2
我有一個MATLAB腳本(實際上是一個函數,funModel
),其中我試圖通過遺傳算法7個整型變量來解決:遺傳算法:最小生成數?
nvars = 7; %number of variables
Aineq = [1 1 1 1 1 1 1]; Aeq = [];
bineq = [VesMaxCrew]; beq = [];
LowBound = [1 1 1 1 1 4 0];
UpBound = [1 1 VesMaxCrew 1 VesMaxCrew VesMaxCrew VesMaxCrew];
Nonlcon = [];
IntCon = [1:7]; % all 7 variables to be treated as integers
Options = gaoptimset('Display','iter',... %display every iteration
'Generations',70,... %maximum number of generations is 70
'TolFun',1,... %tolerance for optimisation is 1
'TolCon',1,...
'PlotFcns',@gaplotbestf);
OptimisedValue = ga(@funModel,nvars,Aineq,bineq,Aeq,beq,,LowBound,UpBound,NonlCon,IntCon,Options);
遺傳算法工作正常,找到一個很好的解決方案,很容易在70代之內(如可以看到的情節功能@gaplotbestf
)。通過當前的輸入,爲每個人在25至30代之後選擇最佳解決方案。然而,該算法繼續運行,直到51代完成。這看起來至少有20代人太多了。
即使我改變了輸入參數funModel
,遺傳算法仍然運行至少51代,就像有一些約束或設置說算法必須運行51代最小。 (可以看出,已經輸入了最大代數)
爲什麼算法在25或30代之間停止? (或剛剛過了30代) 更重要的是,有沒有人知道如何改變這種情況?
(我一直沒能找到有關最低代的Matlab的文件中的設置(gaoptimset
)任何東西,亦沒有我能找到同樣的問題/問題別人。)
您能否向我們展示「最佳解決方案超世代」和「社會平均適應度超過一代」的圖表?這可能是因爲,儘管找到了最優方案,它仍然試圖改進(因爲它當然不知道它找到的是最優的)。 – Shahbaz 2013-03-01 10:04:39
@Shahbaz:感謝您的快速響應!然而,即使它試圖找到一個更優化的解決方案,爲什麼總是這個最低的51代呢? – Willem 2013-03-01 10:30:11
可能是幸運的,並與你的問題的性質有關。或者可能是那些實施該算法的人認爲至少50代有助於防止早期(和錯誤)終止,所以他只是將它放在實現中而沒有記錄它。 – Shahbaz 2013-03-01 10:41:05