1. 程式人生 > >Tecnomatix Plant Simulation 14 學習之路(四)

Tecnomatix Plant Simulation 14 學習之路(四)

在介紹GAwizard和GASequence在模型上的應用時,先推薦幾篇部落格,有助於接下去的理解

遺傳演算法的簡單介紹:點選開啟連結

遺傳演算法交叉過程的理解:點選開啟連結

筆者在除錯該模型中,認為下面兩個概念比較重要

交叉率:判斷父代兩兩個體是否需要交叉的概率

變異率:判斷該染色體(序列)是否需要變異的概率

 

關於模擬模型與遺傳演算法的總體關係,在軟體幫助中已經給出,如下圖所示:

具體設定中,GAwizard的物件其實是GA控制元件GASequence,指採用了GA序列的方式來使用遺傳演算法,GAwizard類似總部,對於本模型採用了GA序列方式。

在GASequence的Attributes選項中,只需修改資料型別,因為序列表示方式均為整型數字。其它引數設定大多與Position Constraints位置約束有關,如若以後分析需要,在以後部落格更新。另外,在初始化過程中,方法Init中有以下程式碼

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。如下: