Tecnomatix Plant Simmution 14 学习之路(二)
本篇博客主要介绍基础遗传算法的实现,例子参考博客一推荐的周金平老师教材第三章,这里做简单介绍
问题描述:
将n个设备(M1,…Mn)放置到n个位置(A,B…)上,其中每个位置上能且仅能放置一台设备,已知n个设备两两之间的物料搬运量大小W(i, j),以及固定的n个位置布局,并且每个位置之间的距离D(i, j)知晓。求将n个作业单位分配到n个工作地点,使得总的物流量最小。即使得下式最小(设备搬运过程为顺序执行,例如某次已经存在M1—M2,则不考虑M2—M1)
将n个设备(M1,…Mn)放置到n个位置(A,B…)上,其中每个位置上能且仅能放置一台设备,已知n个设备两两之间的物料搬运量大小W(i, j),以及固定的n个位置布局,并且每个位置之间的距离D(i, j)知晓。求将n个作业单位分配到n个工作地点,使得总的物流量最小。即使得下式最小(设备搬运过程为顺序执行,例如某次已经存在M1—M2,则不考虑M2—M1)
设备物料搬运量从至表
位置布局的距离从至表
Plant Simmulation平台建模:
step1
首先,在软件平台搭建以下模型
首先,在软件平台搭建以下模型
step2
定义全局变量Number_Of_Machine,设备数量,八台
定义全局变量Number_Of_Machine,设备数量,八台
PartNo(记录后续仿真模型过程中搬运的零件个数),也就是搬运的物料数目
X_pos_init, Y_pos_init 定义产生设备及缓存坐标。
step3
创建从至表数据,固定生成设备及缓存初始位置
创建从至表数据,固定生成设备及缓存初始位置
(本图创建时候只有表格对角线以右部分,左下角为程序创建,下篇博客会对该程序说明,这里只是介绍步骤)
step4
从至表数据校核,设置方法在InitPartsTable中完成,完整代码如下:
从至表数据校核,设置方法在InitPartsTable中完成,完整代码如下:
其中包括了删除之前缓冲对象以及建立新对象的操作。
step5
定义机器序列表(默认时2、3列为空值,只设置了第一列机器名)
定义机器序列表(默认时2、3列为空值,只设置了第一列机器名)
step6
定义零件加工顺序表,如图所示,从Mus文件夹中把Entity对象复制到Models文件夹目录下,改名为Parts
定义零件加工顺序表,如图所示,从Mus文件夹中把Entity对象复制到Models文件夹目录下,改名为Parts
在Source设置如图所示
在PartsTable设置如下,新增两列_From和_To,并修改数据类型(表格中具体内容由代码生成,下篇博客会介绍到)
在Parts下新建_From和_To变量,如图所示
step7
初始化设置,在Init设置,特别地,如果未设置GA,请注释第5至第7行代码(使用 '/*.....*/')
step8
调入策略和离开策略,操作如图所示
其中,Leave的策略已经加载至InitPartsTable中,代码为:Machine.ExitCtrl := &Leave。
通过step1-8,进行模拟仿真画面呈现如下,则表示模型顺利建成:
通过step1-8,进行模拟仿真画面呈现如下,则表示模型顺利建成:
GA工具的运用:
由工作模型可知,该序列为数值型,例如54321876就是表示从左开始每台设备依次布置到A…H工作地去
在GASequence设置如下图:
在GASequence设置如下图:
设置数据类型为整型,定义完成数据类型后,即可将Init方法的第5行至第7行注释释放。
在GAwizard设置如下:
step1
如图所示,勾选“配置方法”,点击编辑,编写代码
如图所示,勾选“配置方法”,点击编辑,编写代码
step2
如下图所示,在适应度一栏勾选按表,点击打开,在表格第一列输入HandlingCost,加权值为1
如下图所示,在适应度一栏勾选按表,点击打开,在表格第一列输入HandlingCost,加权值为1
step3
点击对象,选择GA控件,再点击任务,输入绝对地址'.Models.A.GASequence'
点击对象,选择GA控件,再点击任务,输入绝对地址'.Models.A.GASequence'
step4
评估中勾选生成HTML报告,完成GAwizard设置。此后,Reset,运行GAwizard
评估中勾选生成HTML报告,完成GAwizard设置。此后,Reset,运行GAwizard
最终效果如下:
可以看到,实际结果跟教材略有出入(也可能是我哪里不小心弄错了??)
写到最后,先介绍几个常见的小技巧
提示输入: ctrl + space(空格),注意要在美式键盘下才能使用,或者取消ctrl + space的输入法切换功能即可
对象重命名 :F2
方法运行:F5
方法单步运行: F11
删除对象:delete