全球FlexSim系统仿真中文论坛

标题: 【TFT 2014.07.22 FlexSim仿真模型题(14)】 [打印本页]

作者: 慧娴亚伦    时间: 2014-7-22 09:15
标题: 【TFT 2014.07.22 FlexSim仿真模型题(14)】
问题描述:本题来源于某些可能由于缺货而流失的需求仿真,比如零售商品或者公共租借服务等。需求服从某种分布且与时间有强烈的联系,当产生需求的时,如果在短时间内没有产品或者服务可以满足,该需求就会流失。


模型要求:
1、附件中有本题7.1的原始布局,使用其他版本请也按照附件中的模型进行布局,以方便审核和对比;
2、发生器按时间表发出一定量产品到Queue5中存放(原题布局中已经设置好);
3、仿真模型一共运行120秒,需求产生的间隔时间前60秒服从exponential(0,3,0),后60秒服从exponential(0,6,0)。每次需求产生,如果Queue5中有产品,则将一个产品放置到Queue6以满足需求;如果Queue5中没有产品,则等待1秒之后仍未有产品,则该需求流失。

提示:1 可能需要添加其他实体来辅助完成,moveobject()命令可能有帮助;
      2需求也可以不需要使用额外的临时实体表示。
作者: 蓝桥书生    时间: 2014-7-22 10:05
[attach]2083[/attach]
作者: yushaozheng1990    时间: 2014-7-22 11:17
[b] [url=http://www.flexsim.asia/redirect.php?goto=findpost&pid=13244&ptid=4629]1#[/url] [i]慧娴亚伦[/i] [/b]按常规思路做了一个,另添加发生器产生需求,每产生一个需求则向Queue5发消息,通过消息机制实现缺货损失。等待楼主点评。[attach]2084[/attach]
作者: manaijin    时间: 2014-7-22 14:58
学习中
作者: 慧娴亚伦    时间: 2014-7-22 18:45
回复2楼:
         完成模型要求。通过另一个发生器来模拟需求的产生,使用moveobject()命令来控制库存的改变。但是有一个小细节没有处理好,当然也可能是我的题目描述造成的误导。要求3称“如果Queue5中没有产品,则等待1秒之后仍未有产品,则该需求流失”,实际上效果应该是在等待的1秒时间内,若有新的产品到达,应该可以马上满足正在等待的需求,而您的模型,只能是1秒之后再检查一次。在等待时间仅为1秒的时候,这种情况可能影响很小,若需求等待时间较长,则影响会比较明显。

恭喜您!论坛ID为 蓝桥书生 的朋友在第二层的回复是第一个有效回复,获得积分5分。
24小时后本题结束(即2014年6月23日18时45分),其后的回复不计为有效回复。
作者: 慧娴亚伦    时间: 2014-7-22 18:46
回复2楼:
         完成模型要求。您的模型基本上跟2楼的模型思路是一样的,做法上区别也不大。

恭喜您!论坛ID为 yushaozheng1990 的朋友在第二层的回复是第二个有效回复,获得积分4分。
作者: 蓝桥书生    时间: 2014-7-23 00:13
[attach]2089[/attach]   我用控制输入端口开闭的方式重新做了一个模型,楼主看下弥补2楼出现的缺陷没有
作者: 慧娴亚伦    时间: 2014-7-24 09:17
回复7楼:
          完成的很好。运用开闭端口实现了题目的要求,也弥补了2楼模型的问题。
作者: 慧娴亚伦    时间: 2014-7-24 09:29
本次TFT活动已经截止。
     本次活动是TFT的第十四次正式活动,在许多随机性比较强强的需求系统下,现实中常面临需求流失和存货策略的博弈问题。此类问题由于其离散型和随机性很适合运用flexsim进行分析。一直犹豫提示1中出现的moveobject()是否会限制大家的思路,其实本题的解决方法有很多,然而根据数据需求的重点不懂,建模方式或者说解决方法也各不相同,结合实际需求非常重要。

本次题目一共有2位朋友得到了有效回复。他们的论坛ID分别是:
      蓝桥书生、yushaozheng1990
      他们将获得指定积分,没有获得积分的朋友期待您的下次参与.
      
      下面放上我个人制作的参考模型,通过一个合成器的分解器的组合完成,编写代码的地方不多,该模型可以较好的统计流失的需求数量(本模型中延长需求等待时间至2秒),并非最佳答案,仅供参考。
      再次感谢大家的参与和支持,没有参与者活动将无法开展,希望各位还能继续支持TFT的接下来的活动,再次感谢!
作者: FFFrenk    时间: 2014-8-1 14:36
学习学习
作者: FFFrenk    时间: 2014-8-1 15:34
学习学习
作者: FFFrenk    时间: 2014-8-1 15:35
学习学习
作者: tang1991tang    时间: 2014-8-18 10:25
学习学习
作者: tang1991tang    时间: 2014-8-18 10:26
学习学习
作者: 草原一棵树    时间: 2014-9-29 13:10
学习ing
作者: 丫头盖    时间: 2014-10-9 11:01
非常感谢各位大神
作者: 丫头盖    时间: 2014-10-10 16:08
[b] [url=http://www.flexsim.asia/redirect.php?goto=findpost&pid=13262&ptid=4629]9#[/url] [i]慧娴亚伦[/i] [/b]
您好!看了您在这个问题上的解决方式,有一个合成器上的代码问题向您咨询。
消息触发:
if(objectexists(first(current)))
{
        moveobject(first(current),outobject(current,2),[color=Red]2[/color]);
}
我理解的意思是:
1)判断合成器上的第一个子节点即临时实体是否存在,若存在(返回值1),则移动第一个临时实体到当前母实体(合成器)的第二个输出端口。
2)加红色的2,不清楚应该如何理解。
3)疑问:若果按我的理解,这和题目的要求“如果Queue5中有产品,则将一个产品放置到Queue6以满足需求;如果Queue5中没有产品,则等待1秒之后仍未有产品,则该需求流失。”,是不相符的。
应该是我的理解有问题,请问正确应该是怎样理解的。非常感谢!
作者: 丫头盖    时间: 2014-10-10 16:19
[b] [url=http://www.flexsim.asia/redirect.php?goto=findpost&pid=13262&ptid=4629]9#[/url] [i]慧娴亚伦[/i] [/b]
您好!刚看了您的解答,对模型内合成器的代码不是很理解,向您请教。
[b]消息触发:[/b]
if(objectexists(first(current)))
{
        moveobject(first(current),outobject(current,2),[color=Red]2[/color]);
}
是指如果当前合成器上的第一个临时实体存在(值为1),则移动第一个临时实体到合成器的第二个输出端口,即吸收器。  加红色的[color=Red]2[/color],我不理解是什么意思。

这和题目:“如果Queue5中有产品,则将一个产品放置到Queue6以满足需求;如果Queue5中没有产品,则等待1秒之后仍未有产品,则该需求流失。”好像不相同。

可能是我的理解错误,向您问一下您模型内代码的正确含义,应该怎么理
作者: 慧娴亚伦    时间: 2014-10-10 18:00
回复17楼:
       1、这个代码里面的2,是指moveobject()这个命令的第三个可选参数,指的是这个移动是通过那个输出端口离开该实体的
       2、这里的代码所实现的是:如果端口1进入(也就是source2产生的需求)到合成器,那么2秒之后如果该需求没被满足(即被合成),则将其送至2号输出端口,即sink7。
       以上,不知道是否解决您的疑惑。
作者: 丫头盖    时间: 2014-10-11 09:08
[b] [url=http://www.flexsim.asia/redirect.php?goto=findpost&pid=14249&ptid=4629]19#[/url] [i]慧娴亚伦[/i] [/b]
您好!可以将您这个函数的每个代码理解一下吗?
软件内关于这个函数的应用为:moveobject(first(current),centerobject(current,[color=MediumTurquoise]1[/color]));
                                                意为:移动端口1进入的实体到第一个中间端口,[color=MediumTurquoise]1[/color]指的应该就是第一个中间端口的意思。
您的函数为:moveobject(first(current),outobject(current,2),[color=Red]2[/color]);
                比上述函数多的这个[color=Red]2[/color],所以对您的这个2代表的什么还是理解的不透彻,辛苦您再解答一下。

另:在消息触发里的整个函数,是怎么和进入触发内的“延迟2秒”连接起来,判断需求被满足的呢?

非常感谢。
作者: 慧娴亚伦    时间: 2014-10-11 09:47
回复20楼:
       1、帮助里面的例子并没有用到第三个参数,moveobject()的第三个参数是可选参数,通常状况下无需使用,本例中删去也不会有影响;
       2、进入触发中的senddelaymessage()这个函数的第一个参数,是指消息传递至的实体,本例中是current,即合成器本身,因此会触发合成器本身的消息触发器,只不过这个消息是会延迟2秒后触发。
       以上,不知道是否解决您的疑惑。
作者: 丫头盖    时间: 2014-10-11 11:04
[i=s] 本帖最后由 丫头盖 于 2014-10-11 11:07 编辑 [/i]

[b] [url=http://www.flexsim.asia/redirect.php?goto=findpost&pid=14254&ptid=4629]21#[/url] [i]慧娴亚伦[/i] [/b]
非常感谢!延迟的消息懂了~
1、moveobject()的第三个参数,我在本例中删去,发现存在一个问题:
在Queue5中最开始有的几个货物,都转移到Queue6以后,再产生需求,就会出现以下图片的问题(即Queue5的货物不会再往Queue6发送)。感觉这个2还是有影响的,只是我没理解透它的影响在哪里。您看一下。[attach]2256[/attach]

2、如果发送的消息为4条,但是sendmessage()函数只能发送3条消息,这个咋能解决?非常感谢!
作者: shiny0801    时间: 2014-10-14 09:36
學習
作者: shiny0801    时间: 2014-10-14 09:37
{:3_41:}
作者: yangkaichong    时间: 2014-10-19 16:47
学习中
作者: xinglei    时间: 2014-11-18 16:32

作者: xinglei    时间: 2014-12-8 16:16
学习一下其他模型
作者: fengyemancheng    时间: 2014-12-13 11:10
学习学习,努力学习
作者: cdotag    时间: 2015-3-17 19:57
xuexi
作者: cdotag    时间: 2015-3-17 20:04
学习
作者: cdotag    时间: 2015-3-17 20:04
学习
作者: 657776724    时间: 2015-6-4 17:40
[i=s] 本帖最后由 657776724 于 2015-6-4 18:01 编辑 [/i]

按照常规的做法做了一个。
关于二楼的缺陷,我使用了开关端口以及在上游加一个暂存区作为排队队列的方式。
另外做了一张全局表,用来跟踪订单是否流失。
代码集中在暂存区7
[attach]2647[/attach]
作者: 657776724    时间: 2015-6-4 19:29
模型自我改进:
上一个模型规定了如果缺货的话,需求必须等待一秒钟。
但实际中应该有个最大等待时间,在这个最大等待时间的范围内,一旦有货物到达,立刻满足需求,等待的时间就不会是最大等待时间。
所以:改进如下:
增加全局表maxwt设置最大等待时间
暂存区7增加标签ctime记录开始等待时间。
其他的代码中有注解。[attach]2648[/attach]
作者: 657776724    时间: 2015-6-4 19:43
做完之后发现其实这道题用moveobject函数不是一个好的选择。。。。。。
作者: yuzhu    时间: 2015-11-21 17:30
学习一下!
作者: gaoshanliushui    时间: 2017-10-21 19:06
好好学习
作者: gaoshanliushui    时间: 2017-10-21 19:07

学习学习
作者: gaoshanliushui    时间: 2017-10-21 19:08
学习学习




欢迎光临 全球FlexSim系统仿真中文论坛 (http://www.flexsimasia.com/) Powered by Discuz! X3.3