首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >过程中的时间分布和时间

过程中的时间分布和时间
EN

Stack Overflow用户
提问于 2021-09-06 08:37:52
回答 2查看 294关注 0票数 0

我工作的生产模式,原料的投入是每小时的基础,我运行模型8小时(1班),所以基本上16小时,资源闲置。当我不使用调度部分并运行模型8 *7小时( 56小时)时,每个作业的时间度量都很好,但是现在,当我调度输出时,它也包括空闲时间。所以,我怎么才能计算出忙碌的时间来看一份工作在车间里平均花费的时间(从原材料到完成的时间)。

这是一个作业在一个过程中花费的时间,它应该是34-16=大约18。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-06 15:30:57

首先,请注意:虽然您说您运行8小时轮班,但上午8点到下午6点的时间段实际上是10小时,所以我将在此解决方案中忽略它,而是假设班次实际上是8小时,从9:00到17:00运行。

下面是一个用于测试的简单模型(模型时间单位是秒):

要做到这一点,有四个要素:

  1. 必须对服务进行配置,以允许在恢复时抢占任务,这是通过使用优先级/抢占选项来完成的,如下所示:

  1. ResourcePool必须配置为“结束换档”抢占状态,如下所示:

  1. f_calcTATsec函数中计算真实时间(不包括班次之间的死时间):
代码语言:javascript
复制
// get 'Service' enter time for that agent
double startTime = col_startTimesSec.get(_agent);

// calculate time spent
double timeSpent = time() - startTime;

traceln("%.2f: agent spent %.2f in service", time(), timeSpent);
traceln("%.2f: 8hrs is %.2f, 16hrs is %.2f", 
    time(), (8 * hour()), (16 * hour()));

// below is a ternary statement which says:
//   if 'timeSpent' is less than 8 hrs then use it
//   otherwise 
//      exclude whole 16 hr periods (can be more than 1) 
//      and use the remainder
double trueTimeSpent = timeSpent <= (8 * hour()) ? 
    timeSpent :
    timeSpent % (16 * hour());

// return time spent
traceln("%.2f: returning %.2f", time(), trueTimeSpent);
return trueTimeSpent;
  1. 需要将服务对象配置为记录col_startTimeSec集合中每个代理的输入时间,然后在退出时调用f_calcTATsec()函数,即On enter = col_startTimesSec.put(agent, time());On exit = double trueTimeSpentSec = f_calcTATsec(agent);
票数 1
EN

Stack Overflow用户

发布于 2021-09-07 16:31:11

当我不使用进度表部分并运行模型8 *7小时( 56小时)时,每个作业的时间度量都很好,但是现在当我调度输出时,它也包括空闲时间。

所以我想你是在用时间测量开始/结束块来进行系统时间测量。他们只计算从开始块到结束块的运行时间,因此永远不能计算“不应该计算的时间”。您不必使用这些块来计算时间;通常,您将相关的开始时间存储在流程中的(自定义)代理类型中,然后根据需要计算相关的运行时间(例如,在服务块的退出时,伪代码是“当前时间在入口上=块中经过的时间”)。

首先,您需要更清楚地了解您正在计算的度量以及计算原因。您希望排除正在进行的(可能是先发制人的)作业等待资源返回轮班的时间。但是,那些排队等待资源的工作又会怎样呢?如果有多种可能的资源可以用在不同的转换模式中呢?更普遍的工作等待资源(当资源处于轮班状态时)会怎样呢?

听起来你真正想要的是两者

  • 花在工作上的时间(参见。等任何东西)。
  • 作业花在等待某样东西上的时间(通常是在捕捉/服务块中的资源--不仅仅是当任务被shift-end抢占时--而是可能是其他的等待机制,例如使用等待块)。

后者只是总运行时间减去前者。

因此有多种方法来解决这个问题。可能最简单的方法可能是保留您的整个运行时间(通过Time测量开始/结束块),然后分别计算工作时间:将其作为变量存储在作业代理中,并将其添加到其“已完成的工作”的每个块中(例如,对于服务块,不需要抢占使用持续时间,从开始-抢占到打开-退出,延迟块使用持续时间从开始-进入-退出)。

要处理移位结束抢占任务等待资源返回轮班的情况,您可以使用Service块的"On任务暂停“和"On任务恢复”操作,这些操作会在任务挂起(由于抢占原因)或恢复时触发(当原始资源可用时,如果这是您选择的抢占选项)。

这需要一个额外的变量来存储“当前持续时间开始时间”。

明确地:

  • 在职务代理类型中键入double变量cumulativeWorkingTimeMins
  • 在职务代理类型中键入double Vriable currentWorkStartTimeMins

服务块的...and (处理抢占情况)

  • agent.currentWorkStartTimeMins = time(MINUTE);的“On捕捉单元”(或“在进入延迟时”)动作
  • agent.cumulativeWorkingTimeMins += (time(MINUTE) - agent.currentWorkStartTimeMins);的“任务暂停”行为
  • agent.currentWorkStartTimeMins = time(MINUTE);的“关于任务恢复”的动作
  • agent.cumulativeWorkingTimeMins += (time(MINUTE) - agent.currentWorkStartTimeMins);的“退出”作用

注意在变量名称中指定的单元要清楚,并在获取当前时间时显式指定单元;这确保代码对更改模型时间单元具有鲁棒性。

NB:如果您真的想要减去抢占的作业等待下班资源返回的时间(而且没有其他等待时间)--作为一个度量标准,这似乎没有意义--您仍然可以使用上面的一个变量来完成这个任务,因为它只捕获了等待时间。

(作业完成后,还需要将相关的最终数字存储在某个HistogramData元素或类似元素中,以便能够在图表中显示这些数据:TimeMeasureEnd块会自动在其distribution变量中捕获该直方图数据,但在计算时间时,您需要自己存储图表的数据。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69071587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档