Flexsim学习笔记

问题:如何关闭中间端口

(以下聊天记录写成日志已获得J的本人同意。)

J: 对于关闭输入端口,有closeinput(current,*)。如果想要关闭中间端口连接。有相应的命令吗?

西姆:在默认逻辑中,input和output是基于flow(流)概念的,FixResource(固定资源)的上游在默认的连接下会将FlowItem(临时实体)moveobject(移动)到下游。而TaskExcuter(执行器)则是扮演者中间运输的载体。因此没有从FR->TE的过程,而只有FR1->FR2的过程,既然没有FR->TE的过程,自然也没必要去设置开/关的机制。

J:我在搞一个人员安排分配的问题。 遇到了一个想关闭中间端口的逻辑。 或者有其他实现的方法。

西姆:从软件 View -> Edit Select Objects,在模型中点击你的FR实体(它会变成高亮,或者叫黄选的状态),然后在右边的菜单下找到 usetransport:

在这个列表里应该可以找到:usertransport这条属性,记住它的名字,这条属性在实体中是一个节点存储着,它的值应该是0/1(关/开),如果你在脚本中,可以使用 getvarnode()这个方法获得这个属性节点的地址引用。也可以使用getvarnum() setvarnum()查询和修改这个节点的数值。

同理如果以后有一个存储着字符串的属性节点,你可以使用getvarstr() 和setvarstr()查询和修改字符串。这是实现你功能的一种方式,通过开关来控制是否调用运输工具。

举个小例子:一个MM1模型中,如何自定义关闭使搬运使用操作员?

在Queue的离开触发 OnExit中,写入一句代码:

setvarnum(current,"usetransport", fmod(getoutput(current),2));

这句代码的意思是,修改”usetransport”属性,其值等于这个对象的吞吐量总数与数字2求余数。当余数=1时,使用运输工具,当余数=0时不使用运输工具。

观察模型,新建一个Dashboard,在空白的地方添加一个Output per hour 。把Queue和Operator添加进去,观察运行结果,Queue的吞吐量是操作员的2倍,也就是说操作员只搬运了其中一半的临时实体,而另一半都不需要他去作业。这个功能就这样完成了。

问题:运行时如何重置所有数据统计

群友X:各位,早!有什么方法重置模型所有数据统计,不重置模型的前提下?

西姆:使用这个函数:resetstats()

群友X:随机因子起点位置在哪里?

西姆:关于随机数因子,虽然试用版无法用自定义但可以改变随机数发生的起点位置用于统计,你可以在模型重置触发时,设置某个统计分布函数的初始位置,举个例子:

int num = realtime(2); //运行次数,使用物理时钟,参数2表示毫秒数
for(int i=1;i<num;i++)
  duniform(0,0); //每次执行 duniform() 改变随机数因子起点

用本地计算机的时钟作为运行起点,模型重置时 duniform随机分布函数已经运行了num次,当模型运行时,就从num之后开始。由于realtime(2)的返回值介于 0~1000,所以这个起点就可能有999个可能,从而实现打乱随机因子,你也可以使用其他方法获得执行次数。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

4 × 3 =