登录发现更多内容
首页
资讯
分类
目录
索引
酷站
发帖
用户名
Email
自动登录
找回密码
密码
登录
立即注册
立即登录
立即注册
其他登录
QQ
微信
门户
Portal
论坛
BBS
搜索
搜索
本版
用户
帖子
设置
我的收藏
退出
0
0
0
首页
技术交流
›
Flexsim在运行大模型时如何提高仿真运行速度 ...
返回列表
Flexsim在运行大模型时如何提高仿真运行速度
[ 复制链接 ]
shadowwind
技术交流
1165
0
2013-10-21 10:04:57
很多Flexsim企业客户在运行大模型时希望可以更快一些得到仿真运行结果,关于这一点的讨论我们原帖引自Flexsim官方论坛,原帖地址:[url]http://www.flexsim.com/community/forum/showthread.php?t=460[/url]
【以下是我们翻译过来的内容】
[color=Navy]Alex Christensen[/color]运行一个大型的模型往往需要花费大量的时间,你的处理器以最快速度在运行模型的时候,单纯将运行速度调到一个较高的值并不会提高模型的实际运行速度。当你想要从模型中获取准确数据且不在意模型的可视化效果或可编辑性时,有如下几种方法可以增加运行速度。
1) 如果一条代码需要重复运行而你又不需要频繁的编辑时,选择代码编写窗口下面的C++选项,将其编译成C++的代码。
2) 如果模型已经建立完毕,只是需要它快速运行,可以在主菜单中将所有的代码转换为C++。虽然你每次要修改模型中的任何部分都需要重新编译一次,但这样会使运行速度更快。
3) 如果你经常设定或引用标签,可以使用标签的索引值进行引用,而不使用标签的名字。比如,如果临时实体的第一个标签是“creationtime”,代码编写中用setlabelnum(item,1,time()); 而不是setlabelnum(item,”creationtime”,time());
4) 表格的使用通常也可以优化。设置并使用指针来访问表格,而不使用表格名或者在数中的排序序号。
5) 在运行模型时,将所有的视图都关闭(不是最小化)。这将避免为读取绘图代码而降低模型运行速度。
以上建议将会降低代码的可读性和编辑性,因此除非你的模型不会再进行大量的修改否则请不要进行这些优化方式。建议您将以上的内容保存下来以备不时之需。
[color=Navy]
Brandon Peterson回复[/color]
在模型中使用C++代码的另一种方法是:将C++代码放到一个DLL文件中,然后在模型中载入这个DLL文件。这是个更复杂的操作,但是可以避免后期的编译。
[color=Navy]Sung Kim回复[/color]A. J和 Anthony也建议我尝试使用 "recycling flowitem"功能 (但是我还不太熟悉这块 )。
分享一些我从A.J.和Anthony那里学到的其它一些小技巧
3)关于标签的索引,为每个实体的标签定义全局宏索引,这样的使用方式更具描述性。
5)他们建议我不仅仅关闭透视视图和俯视视图,也要关闭输出视图(避免打印文本信息)和树视图窗口(我猜尽量将所有的无用的窗口都关闭)
[color=Navy]Dustin Derrick回复[/color]
以下是我在提高运行速度时的一些小建议
提问:如何使模型运行速度更快?
回答:减少计算机必须执行的进程数量
关键在于找到模型运行过程中隐藏在所有活动后面的进程数量
首先,我会提一些有关图形显示时间的建议。只有当打开一个或多个视图窗口的时候(俯视视图和透视视图窗口),实体才执行图形绘制事件。这些绘制事件起到动态显示实体的作用,在视图窗口每次更新(每秒30次)时都执行。比如:传送带上的临时实体流动、叉车在路线运行,处理器、货架的列和层等几何图形等都是在这些绘制事件中定义的。较好的计算机显卡将会确保3维视图的显示、动画和导航更加柔和,当关闭视图窗口的时候,就不会再执行这些绘制事件了。因此,如果你想要模型运行更快,就关闭你的透视显示。
以下是需要记住的关键几个点(排名不分先后)
1. 创建一个临时实体比移动临时实体要慢,因此不要摧毁这些临时实体,应该将他们移动到一个临时暂存区以备后期使用。我们将其称作循环使用的临时实体。这将是下一个版本中发生器和吸收器的理想结构,当前版本中需要我们自行完成。
2. 建议1同样适用于标准节点。如果你为了一些动态数据存储或其他需要而创建你自己的节点,尽量循环使用而不是摧毁重建。
3. 减少模型中的事件数量。尽量不使用“消息循环”、监视列表或flexsim中的监听功能来被动完成逻辑检查。而实在模型发生变化需要进行检查时,主动执行检查操作。
4. 避免在大容量的暂存区中对临时实体进行排序。
5. 避免同时创建太多的待定事件(如senddelaymessage)。如果创建事件时,已经有很多的事件在排队,那么要计算新事件的位置,并重新排序需要耗费很多时间。
6. 作为临时存放临时实体的暂存区应该关闭其容量的显示,把临时实体的放置方式设定为“无操作”
7. 引用全局表、标签和其它对象时,通常使用指针而不是名字。以标签为例,引用索引比名字快,而引用指针是最快的。
8. 使用数值标签而不使用字符串标签。
9. 在条件语句中总是选择数值比较而不是字符比较。
10. 在表中尽量直接引用行而不采用搜索和查找算法。
11. 通过更新表格来统计模型中的库存,而不使用真实的临时实体来表现存货。比如货架的存货用标签表中的数字而不是临时实体来显示。当临时实体进入货架,仅仅是更新了表中的数据,同时将临时实体移动到临时暂存区以供模型中循环使用。(下个版本中将会有好的命令来实现以上这些工作)
12. 设置可以被多次使用的全局函数,而不在每次函数运行时重新定义指针。
13. 避免使用node()命令。
14. 尽量直接编写执行代码,而不是通过nodefunction 或sendmessage执行其它地方的代码。
15. C++比flexscript(flexsim内置语言)运行更快,而先建的flexscript比没有先建的flexscript更快。换言之,则是nodefunction()比executefanode()更快。
16. 在函数中,当你发现你需要多次引用相同的节点或者实体时,可创建本地指针。
17. 通过(ODBC)读取数据时,在改变行之前一次性读取一整行(或记录)。
18. 通过ODBC,DDE,OLE动态读取或写入数据要比直接从Flexsim全局表中读写数据要慢
19. 在开发自己的实体时(例如,通过BasicTE和BasicFR),使用OnUpdateOffset和定制绘制代码字段来定义所有你的动态动作,而不是使用消息字段的消息循环。当你关闭视图时,OnUpdateOffset和定制绘制代码字段不会进行分析,将会使得你的模型运行得更快。
点赞
0
收藏
0
────
0
人觉得很赞
────
回复
举报
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
立即登录
点评
高级模式
本版积分规则
回帖后跳转到最后一页
返回
浏览过的版块
新手入门
资料共享
信息公告
技术交流
登录开启您的创作之旅
快速登录,立即开启您的创作之旅~
登录
热门问答
查看更多
1
厂区生产线布局优化案例!新做的!
厂区生产线布局优化案例!新做的!
12104
227
2
Flexsim二次开发之塔吊
Flexsim二次开发之塔吊
6150
45
3
FlexSim2016 中国象棋
FlexSim2016 中国象棋
6023
44
4
快递分拨中心案例~新手可参考
快递分拨中心案例~新手可参考
5640
62
5
关于Processs Flow 使用的两个案例(AGV Elevator案例/子母穿梭
关于Processs Flow 使用的两个案例(AGV Elevator案例/子母穿梭
5493
34
博主榜
Htenghui
+ 10630
白可露
+ 7753
liguanyu
+ 6759
4
Round2011
+ 6323
5
梁之安
+ 6321
6
zgh1120
+ 5341
7
ishelo
+ 4710
8
linweixu168
+ 3722
9
liuzhifan
+ 3628
10
adysunshine
+ 3566
首页
分类
目录
索引
我的