Tecnomatix Plant Simulation 14 学习之路(四)

在介绍GAwizard和GASequence在模型上的应用时,先推荐几篇博客,有助于接下去的理解

遗传算法的简单介绍:点击打开链接

遗传算法交叉过程的理解:点击打开链接

笔者在调试该模型中,认为下面两个概念比较重要

交叉率:判断父代两两个体是否需要交叉的概率

变异率:判断该染色体(序列)是否需要变异的概率

关于仿真模型与遗传算法的总体关系,在软件帮助中已经给出,如下图所示:

具体设置中,GAwizard的对象其实是GA控件GASequence,指采用了GA序列的方式来使用遗传算法,GAwizard类似总部,对于本模型采用了GA序列方式。

在GASequence的Attributes选项中,只需修改数据类型,因为序列表示方式均为整型数字。其它参数设置大多与Position Constraints位置约束有关,如若以后分析需要,在以后博客更新。另外,在初始化过程中,方法Init中有以下代码

扫描二维码关注公众号,回复: 3633200 查看本文章
for var i := 1 to Number_OF_Machine
	GASequence[1, i] := i
next

执行过后,将在GASequence的Define Set生成初始集

在GAwizard中,首先声明了对象是GASequence,另外设置好了迭代次数,以及每一代产生的个体数,设置适应度为HandlingCost,与模型保持一致。最重要的,是GA-tables参数化模型,该方法将计算每一代每一种情况(每一个新序列对应的适应度),并将对应的结果反馈到MachineSequence表格当中

代码和解析如下

/* The global variable 'individual' is an individual consisting of chromosomes.
The order of chromosomes is defined by the wizard object.
called by: evaluate (in case of the first_individual of a generation)
and endSim
result: A simulation can be started with the settings of the_individual.
*/
-> boolean                   --方法返回布尔值
--配置方法,该方法执行的评估不重复的染色体序列下的HandlingCost(适应度)
var obj: object
var chrom: table   
chrom := individual[1,1]     --定义初始序列到表chrom,individual理解为染色体序列
result := true               --个人认为,当染色体序列为新序列时,返回True,执行该方法
obj := .Models.A.MachineSequence  --优化结果转录对象MachineSequence机器序列
obj.sort(2, "up")                 --按原来次序排序
for var i := 1 to obj.YDim
	obj[3, chrom[1, i]] := i      --将优化个体排序输出到MachineSequence列表
next
obj.sort(3, "up")                 --按优化次序排序
/*for var q := 1 to chrom.YDim    --用于观察新产生得的染色体序列
	print chrom[1, q]
next
print "------------"*/

优化结果如下,可以看到跟教材上面比较接近了:

此外,关于HandlingCost加权设置为1的理解,当目标函数(适应度)为多个,也就是俗称的多目标函数,加权需要分配权重,和值为1。

最后,是一点小改,用于快速修改MachineSequence序列排序方式,按照初始或者优化排序。见下图和程序

MachineSequence.sort(2,"up")
MachineSequence.sort(3,"up")

提示:sort函数是按对应列修改排序方式,值得注意表格的行具有相关性,修改某列的排序会影响到与之对应的行,详情可以参考软件帮助。下一篇将会研究软件自带的关于遗传算法Demo。如下:

猜你喜欢

转载自blog.csdn.net/weixin_40211315/article/details/80227019