设为首页收藏本站

最大的系统仿真与系统优化公益交流社区

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4644|回复: 10

请教Source"By Time of Day"设置的问题-[已解决]

  [复制链接]
发表于 2010-1-18 21:51:21 | 显示全部楼层 |阅读模式
本帖最后由 Anony 于 2010-1-22 11:13 编辑

问题描述:
(1)每天早上8:00—12:00按exponential(0,5,1)产生实体;
(2)每天下午14:00—1800按exponential(0,15,1)产生实体;
(3)每天晚上19:00—24:00按exponential(0,9,1)产生实体;
(4)每天其余时间不产生实体。

具体设置Source>Inter-Arrival Time,在Inter-Arrivaltime选By Time of Day。代码修改如下:
treenode current = ownerobject(c);
/**By Time of Day:*/
int second = 1;
int minute = 60;
int hour = 3600;
int day = 86400;
int shift = 28800;
/** \nModel Time Unit: */
int timeunits = /**/second/**/;/** (second, minute, hour, day)\n*/
int timeinseconds = fmod(time()*timeunits, day);
hour = trunc(timeinseconds / hour);
shift = trunc(timeinseconds / shift) + 1;

if(hour >= 8 && hour <12) return exponential(0,5,1);
if(hour >= 12 && hour <18)  return exponential(0,15,1);
if(hour>=18 &&  hour<24)  return exponential(0,9,1);
return exponential(0,900000000000000,1); /**用小概率事件表示不生成实体*/

运行时间设置为1天,但运行结果却没有任何实体产生。请问本人的这设置存在什么问题?请指教,谢谢。(模型参见附件)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2010-1-19 14:03:24 | 显示全部楼层
本帖最后由 Anony 于 2010-1-19 14:09 编辑

改成else return exponential(0,900000000000000,1);
结果都一样,没有实体产生。Flexscript是否可以设置断点,进行单步跟踪调试?在Flexsim中没有找到相关的设置,请指教,谢谢。
 楼主| 发表于 2010-1-19 18:45:47 | 显示全部楼层
本帖最后由 Anony 于 2010-1-20 01:09 编辑

如果把停止时间设置为none,运行速度设为Unlimited,运行一个很大的时间后会产生实体。谢谢qtbgo ,本人对Source生成实体的机理有了更深的理解,再冒昧请教一下,要在一个比较短的时间内(如一天)实现前面所描述的要求,"每天其余时间不产生实体"应如何实现呢?谢谢。
 楼主| 发表于 2010-1-20 12:29:55 | 显示全部楼层
本帖最后由 Anony 于 2010-1-20 12:32 编辑

如果对Source使用stopobject或closeoutput,在适当时间触发后,Run Time也会随之停止,模型将不再运行,resumeobject或openinput无法触发。
发表于 2010-1-20 13:00:28 | 显示全部楼层
7# Anony
你可以在模型里再添加一Source和Sink,A连接它俩,其它什么都不要设定.这样模型运行不会停止.为了模型好看,你可以隐蔽Source和Sink的3D外型.
 楼主| 发表于 2010-1-20 13:30:54 | 显示全部楼层
8# 北京创时能
在模型里再添加一Source和Sink,连接之后,Run Time是不会停止,但原来的Source一停下来之后还是无法再运行了,以下是Source在Inter-Arrivaltime选By Time of Day设置的代码:

treenode current = ownerobject(c);
/**By Time of Day:*/
int second = 1;
int minute = 60;
int hour = 3600;
int day = 86400;
int shift = 28800;
/** \nModel Time Unit: */
int timeunits = /**/second/**/;/** (second, minute, hour, day)\n*/
int timeinseconds = fmod(time()*timeunits, day);
hour = trunc(timeinseconds / hour);
if(hour >= 8 && hour <12) {openoutput(current);return exponential(0,5,1);}
if(hour >= 14 && hour <18)  {openoutput(current);return exponential(0,15,1);}
if(hour>=19 &&  hour<24)  {openoutput(current);return exponential(0,9,1);}
else closeoutput(current);

如用stopobject、resumeobject分别替换closeoutput、openoutput,效果一样,模型参见附件。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2010-1-22 11:10:59 | 显示全部楼层
在Flexsim官方论坛上仔细查看相关贴子之后发现,只需要在Time Tables设置运行及终止时间,结合By Time of Day设置概率分布,就可以实现对描述问题的模拟,非常简单。国内对Flexsim研究的资料还是太少了。
发表于 2010-1-22 13:07:07 | 显示全部楼层
11# Anony
是的,Flexsim的工具(Tools)菜单里的几个功能掌握了的话,建立复杂模型也基本不用编程,如:Time Tables;MTBF MTTR;Global Task Sequencese等等。但是,要更上一层的话,还是要学会编程,特别是秦老师反复讲的消息触发的使用对更细腻的定制是非常有用的。
大家一起加油吧,为了赶超Flexsim世界水平( )。
发表于 2010-10-21 20:14:40 | 显示全部楼层
学习了
发表于 2011-6-8 12:12:13 | 显示全部楼层
学习
发表于 2012-4-11 17:17:19 | 显示全部楼层
嗯 编程还是很有必要的,本身提供的不一定能满足所有需求
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|SimulWay 道于仿真   

GMT+8, 2024-11-23 21:46 , Processed in 0.015773 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表