driver 发表于 2009-8-5 15:38:39

关于GATE模块

我想通过GATE模块控制资源,即当资源低于安全值时GATE关闭,待活动完成资源被释放到资源池,资源总量高于安全值GATE再重新打开。我建立了一个简单的模型,运行提示逻辑错误,请请点一下错在哪。

iesim 发表于 2009-8-5 16:09:45

本帖最后由 iesim 于 2009-8-5 16:17 编辑

这个问题非常好。主要是应该把 Queue, Resource Pool 这个模块和 Gate 这个模块位置颠倒一下。

我把你的模型稍微修改了一下,可以正常运行了。

iesim 发表于 2009-8-5 16:15:13

我对我的说法修正一下,Queue, Resource Pool 应该是在释放小球时再占用资源,所以,我提到的死锁现象不会发生。

谢谢林伟的修改,用 stop message 方法很巧,但需要较高建模技巧。

focuscon 发表于 2009-8-6 15:00:05

本帖最后由 focuscon 于 2009-8-6 15:01 编辑

来晚了,好问题啊!
谢谢林伟的经验分享,很好的技巧。在手册 P254 Tips and Techniques一章里面有介绍这个问题。
技术支持论坛里面有个这样的帖子,“出现同时事件(时间死结) Extendsim如何处理”
ExtendSim puts the blocks on the event calendar in simulation order. Blocks with a lower simulation order will receive their event message first. You can change the simulation order with the following steps:

Go to Run > Simulation Setup > Continuous tab.

Turn on Show Simulation Order from the Model menu.

Select an event scheduling block and choose Set Simulation Order from the Model menu.

Note that the simulation order will only make a difference if two or more events occur at exactly the same time. If the events are not exactly at the same time, the events will occur in chronological order.
我试了一下按照这个办法调整仿真顺序没办法解决这个问题,是不是这个模型本身就存在逻辑错误,林伟的方法正好可以屏蔽掉那个错误?
Queue, Resource Pool 是在释放小球时再占用资源,Gate放在了Queue和Activity之间,资源低于安全值时发生了冲突?有点不太明白。

focuscon 发表于 2009-8-7 09:18:44

6# linweixu168
谢谢!
怎么样才算是零时间调度呢,一般什么条件下会发生呢?要避免这种情况需要注意哪些?能不能再讲解一下?

iesim 发表于 2009-8-7 11:52:44

本帖最后由 iesim 于 2009-8-7 11:54 编辑

不好意思,最近没来论坛。这是我对这个问题的理解。

对于零时刻事件和同时刻事件,实话实说,我对这两个概念也没有仔细分析过。如果有更权威的解释,我愿意更正自己的理解。

我的理解是,这两个的共性都是发生在用一个时刻的事件。但同时刻事件,在该时刻发生之前,事件次序已经有了一个规定(虽然在同一时刻发生),处理这些事件本身不会带来该时刻其他事件次序的改变。而零时刻事件则是那些处理起来有可能改变当前时刻事件发生列表次序的事件。

比如说我们目前的模型,我们争论的焦点,在还剩下7个资源时候,有两个大的事件,一个是让小球获取资源离开,另一个是资源减少而关闭Gate。 按照原来的模型结构,会使我们面临一个两难的境地,因为 Gate 嵌套在让小球获取资源离开的通路上。这时候的逻辑就很矛盾,如果让小球离开 Queue (Resource Pool),那么由于 Resource Pool 减少会触发 Equation 从而触发 Gate 的 DemandIn 端口而使得门关闭 (顺便说一句,Gate 因为受控于 DemandIn 这个数值,所以,可以随时关闭)。如果不让小球离开 Queue (Resource Pool),Gate 又形成一个通路。这时候的 Gate 的角色会随着小球在 Queue, Resource Pool 中的状态而改变,而且是 反作用力,形成矛盾。

这时候的情形打个比喻,像是一个人离开家到杂货店买东西,只要这个人不出门,小店就永远开着;只要这个人一离开家,小店就关门一样。

好像这个情形很难为仿真软件,每个仿真软件虽然都有自己的处理机制,但我们建立模型的时候,希望尽可能避免这种情况。

林伟用了stopmessage 这个方法很好,为什么这个方法可以解决问题? 是因为我们stop message 模块切断了让 Gate 即刻随着Resource Pool 状态改变的途径,按照刚才的比喻,这个人离开家门后,离开家的这个消息不会马上传给杂货店,杂货店也就不会关门。但如何保证 Gate 还会更新状态呢,因为在 Gate 模块当中有一个选项,就是每个小球通过 Gate 后,Gate 需要重新刷新状态,读取 DemandIn 的数值,这时候,Gate 就可以知道 Resource Pool 已经只剩下6个资源了,门这时候才关闭。

stop message 方法的采用需要比较高级的ExtendSim 建模技巧。

我采用的方法比较适合初学人员。把刚才提到的两个矛盾逻辑拆分开。把Gate 放在 Resource Pool 的前面,按照刚才的比喻,就是说,杂货店告诉买东西的这个人,我们小店是开着的,你来吧;或者说,我们小店已经关门了,不要过来。把这个信息提前控制这个人是否应该离开家。

这个问题虽然很简单,但可以引出很多很深的仿真逻辑控制问题。

focuscon 发表于 2009-8-7 12:12:19

谢谢王老师的耐心讲解,真是生动形象!:victory::lol

focuscon 发表于 2009-8-7 12:37:10

楼主以后要多发这样的帖子啊,谢谢你的提问,我受益良多!

focuscon 发表于 2009-8-7 14:47:17

11# linweixu168
非常好,谢谢你! 我好好体会体会...

focuscon 发表于 2009-8-8 07:56:39

谢谢Jeff,David Khar的观点l跟王老师的一样。

focuscon 发表于 2009-8-8 10:09:20

11# linweixu168
当用Stop message切断Resource pool和Equation的连线时,Equation不会计算(输出端口没有连接到Gate),除非在Equation选项里面选择固定间隔时间主动计算(Every __ time units: )。

qinjiaheng 发表于 2009-8-10 14:31:34

不是很懂,要好好向lz学习

hezhenbang85 发表于 2009-9-26 20:21:18

支持

focuscon 发表于 2009-9-26 23:13:28

欢迎楼上两位,要学习ExtendSim的话本版有很多学习资料,有问题就请尽情发问吧。

Hardy 发表于 2016-3-11 14:01:00

谢谢分享:):)
页: [1]
查看完整版本: 关于GATE模块