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