SimPy 资源有 3 个,每个资源都有不同的特征

2024-04-22

我试图模拟这样一种情况:我们有 5 台机器,它们的情况是 1 -> 3 -> 1。即中间的3个并行运行以减少它们所花费的有效时间。

我可以通过创建值为 3 的 SimPy 资源来轻松模拟这一点,如下所示:

simpy.Resource(env, capacity=3)

然而,在我的情况下,这三种资源的操作方式略有不同,有时我希望能够使用其中任何一种(当我操作时)或预订特定的一种(当我想要清洁时)。基本上,这三台机器会以不同的速度慢慢地弄脏,运行速度也会变慢,我希望能够模拟这些,并且当一台机器太脏时也能进行清洁。

我尝试了几种模拟此方法的方法,但每次都会遇到问题。

第一个是当它预订资源时,它还预订了 3 个机器(A、B、C)全局标志之一和一个标志本身来告诉它正在使用哪台机器。这是可行的,但它并不干净,并且很难理解到处都有巨大的 if 语句所发生的情况。

第二种是将其建模为三个独立的资源,然后尝试等待并请求 3 台机器中的一台,如下所示:

reqA = A.res.request()
reqB = B.res.request()
reqC = C.res.request()

unitnumber = yield reqA | reqB | reqC
yield env.process(batch_op(env, name, machineA, machineB, machineC, unitnumber))

但这是行不通的,我无法找出最好的方法来产生一个选择。

模拟这种情况的最佳方法是什么?为了完整起见,我正在寻找以下内容:

  1. 请求 3 台机器中的任意一个
  2. 请求特定机器
  3. 让每台机器跟踪它的历史
  4. 每台机器的特性都不同。即犯规速度更快,但最初工作速度更快
  5. 根据性能或指标检测并安排清洁

这是我迄今为止尝试将每个资源建模为单独资源的最新版本的内容

class Machine(object):

    def __init__(self, env, cycletime, cleantime, k1foul, k2foul):
        self.env = env
        self.res = simpy.Resource(env, 1)

        self.cycletime = cycletime
        self.cleantime = cleantime
        self.k1foul = k1foul
        self.k2foul = k2foul
        self.batchessinceclean = 0

    def operate(self):
        self.cycletime = self.cycletime + self.k2foul * np.log(self.k1foul * self.batchessinceclean + 1)
        self.batchessinceclean += 1
        yield self.env.timeout(self.cycletime) 

    def clean(self):
        print('%s begin cleaning at %s' % (self.env.now))
        self.batchessinceclean = 0
        yield env.timeout(self.cleantime)
        print('%s finished cleaning at %s' % (self.env.now))

您应该尝试(过滤器)存储:

import simpy


def user(machine):
    m = yield machine.get()
    print(m)
    yield machine.put(m)

    m = yield machine.get(lambda m: m['id'] == 1)
    print(m)
    yield machine.put(m)

    m = yield machine.get(lambda m: m['health'] > 98)
    print(m)
    yield machine.put(m)


env = simpy.Environment()
machine = simpy.FilterStore(env, 3)
machine.put({'id': 0, 'health': 100})
machine.put({'id': 1, 'health': 95})
machine.put({'id': 2, 'health': 97.2})

env.process(user(machine))

env.run()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SimPy 资源有 3 个,每个资源都有不同的特征 的相关文章

随机推荐

  • 将一组对象分成一定数量的组的算法?

    例如 假设我有一个 2D 像素数组 换句话说 一个图像 我想将它们排列成组 以便组数加起来完美达到某个数字 例如 另一个 2D 中的总项目数 像素阵列 目前 我尝试使用比率和像素的组合 但这在完美整数比率 例如 1 2 1 3 1 4 等
  • 布局底部有两个按钮的滚动视图

    我想创建一个具有滚动视图的布局 在布局顶部的滚动视图内将有两个 Textview 在中心将有两个 Edittexts 在布局的底部将有两个按钮 但一切都将在主滚动视图下 我的要求的直观描述 我已经完成了一些编码 可以滚动顶部内容 但将底部的
  • ASP.NET 中的模拟和委托(使用 SQL Server)

    我编写了一个简单的 ASP NET 应用程序 它用作简单 MSSQL 数据库的前端 该应用程序可通过互联网访问 涉及两台物理服务器 一台也运行 MSQL Server 2008 R2 的 WS2008R2 Active Directory
  • 从S3读取pdf对象

    我正在尝试创建一个 lambda 函数 它将访问上传到 s3 的 pdf 表单 并删除输入到表单中的数据并将其发送到其他地方 当我可以在本地下载文件时 我就可以执行此操作 因此 下面的脚本可以工作并允许我将 pdf 中的数据读取到我的 pa
  • ASP .NET 5 - 将文件从节点模块复制到 wwwroot 的 grunt 任务

    我有一个简单的 ASP NET 5 空项目 安装了 npm 和 grunt 我使用 npm 安装了一些客户端库 目前位于我的 ASP NET 项目下的 node modules 目录中 我想将相关文件 例如 jquery min js 从n
  • Django 模型中的新字段不会显示在管理界面或模型表单中

    我在我的一个应用程序中创建了一个模型 该模型运行良好 但是 我需要添加一个新字段 我这样做了 并使用了manage py reset
  • Prolog 管线任务

    我有一项任务是在序言中制作一张简化的地铁地图 其中一部分要求制定一项规则来检查两个车站是否在同一条线上 我有一条规则 但它似乎不起作用 这就是我到目前为止所拥有的 adjacent nh lg central 4 adjacent lg o
  • Rails 如何处理模型中的错误和异常

    所以我使用 twitter 库解析 Rails 中 twitter api 的数据 有时 api 的响应可能是这样的 error Invalid parameter 模型会引发异常 现在我默默地捕获它并将 error message 放入日
  • 使用 raster() 包在 R 中导入 USDA 作物数据层 (GTIFF) 时出现问题

    我已经下载了美国农业部作物数据层 此处提供数据 注意大文件 http www nass usda gov research Cropland SARS1a htm http www nass usda gov research Cropla
  • 在 WAR 部署期间如何检查哪个类/jar 导致“无法从最终类继承”?

    我正在将 WAR 文件部署到 Windows 7 上的 Weblogic 12 1 2 服务器 也尝试过 Mac OS X 我遇到了一个例外 见下文 看起来其中一个类引用了某个父类的旧 新版本 该父类来自一些重复的 jar 我怎样才能找到哪
  • 来自另一个 js 函数的 JQuery 自动完成源

    我有一个 Jquery 自动完成函数 其源是根据另一个函数计算的request term所以我不知道如何设置源属性权利 自动完成 finder city autocomplete source function request var se
  • ActiveMQ 内存消耗通过屋顶(页面文件)...该怎么办?

    我们使用的是旧版本的 ActiveMQ 5 3 2 请参阅 ActiveMQ可靠吗 https stackoverflow com questions 4303610 is activemq reliable 我们取消了持久性 因为我们需要
  • 解决依赖关系: pub 已完成,退出代码为 1

    我有这个依赖冲突 flutter pub upgrade dry run Resolving dependencies Because image gt 2 1 14 lt 3 0 0 nullsafety 0 depends on arc
  • Swift 变量声明含义

    这两个声明有什么区别 哪一个更好 为什么 error some NSError 1 var newUserInfo NSObject NSObject if let tempUserInfo error userInfo as NSObje
  • 根据请求更改 PostgreSQL 日期语言

    我对 PostgreSQL 有点陌生 我正在尝试更改日期函数结果的区域设置 以获得以下结果to char my date Month 用另一种语言 这是我的一些设置 gt show lc time en US UTF 8 我在文档中发现可以
  • 如何使用 Perl 的 DBI 处理 unicode?

    My 美味到 wp perl 脚本 http edward de leau net wordpress 23 compatible wordpress delicious daily synchronization script 20071
  • 如何在 gnuplot 中设置时区?

    我有一个简单的 gnuplot 命令文件 set xdata time set timefmt s set format x H M 其中 x 时间戳列 结果 UTC 格式的时间 我可以更改 x 轴的本地时区吗 今天刚刚在文档中发现了这一点
  • VarName 未定义,请修复或添加 /*global VarName*/ Cloud9

    客观的 阻止 Cloud9 IDE 向我发出警告消息 背景 我正在使用 Cloud9 IDE 编写 JavaScript 无论何时使用另一个文件 同一文件夹中 中的类 我都会收到警告消息 VarName 未定义 请修复或添加 global
  • 使用 JWT 缺少授权标头

    我正在尝试设置 JSON Web 令牌以从移动应用程序与我的 php 后端进行通信 我可以请求一个令牌就好了 当我需要验证它 或向另一个端点发出请求 时 我使用以下格式设置授权标头 Bearer
  • SimPy 资源有 3 个,每个资源都有不同的特征

    我试图模拟这样一种情况 我们有 5 台机器 它们的情况是 1 gt 3 gt 1 即中间的3个并行运行以减少它们所花费的有效时间 我可以通过创建值为 3 的 SimPy 资源来轻松模拟这一点 如下所示 simpy Resource env