Filter löschen
Filter löschen

非線形制約条件付きG​Aのcrossove​rintermedi​ateに関するエラー

4 Ansichten (letzte 30 Tage)
tsuyo0000
tsuyo0000 am 18 Dez. 2018
Kommentiert: Aoi Midori am 21 Dez. 2018
非線形制約条件付きのGAを用いたシミュレーションを行っていたところ,以下のエラーが表示されます.
位置 1 のインデックスが無効です。配列インデックスは正の整数または logical 値でなければなりません。
エラー: crossoverintermediate (line 47)
parent1 = thisPopulation(parents(index),:);
エラーで一時停止したところ,配列parentsの中の要素がすべて0になっており,配列thisPopulationの要素を呼び出せなくなっていました.
配列parentsの中の要素がすべて0になるのを防ぐためにはどうすればいいのでしょうか.すべてのエラー文を以下に記します.
位置 1 のインデックスが無効です。配列インデックスは正の整数または logical 値でなければなりません。
エラー: crossoverintermediate (line 47)
parent1 = thisPopulation(parents(index),:);
エラー: stepGA (line 34)
xoverKids = feval(options.CrossoverFcn, parents(1:(2 *
nXoverKids)),options,GenomeLength,FitnessFcn,thisScore,thisPopulation,options.CrossoverFcnArgs{:});
エラー: galincon (line 62)
[score,population,state] =
stepGA(score,population,options,state,GenomeLength,FitnessFcn);
エラー: gacon (line 78)
[~,Iterate.f,innerExitFlag,innerOutput,innerPopulation,innerScore] = ...
エラー: ga (line 405)
[x,fval,exitFlag,output,population,scores] = gacon(FitnessFcn,nvars, ...
エラー: optim (line 7)
[x,fval,exitflag,output,population,scores] = ga(@fun,8,[1 0 0 0 0 0 0 0; 0 1 0 0 0 0 0 0; 0 0 1 0 0 0 0 0; 0 0 0 0 1 0 0 0; 0 0 0 0 0 1 0 0; 0 0 0 0 0 0 1
0],[0.3;0.3;0.1;0.3;0.3;0.1],[],[],[0 0 0 0 0 0 0 0],[],@nonlcon,options);
  11 Kommentare
tsuyo0000
tsuyo0000 am 21 Dez. 2018
mathWorksに問い合わせたところ,以下の回答を頂いたので共有させていただきます.optionsのスケーリング関数と初期値の設定に問題があるようです.以下の設定で解決できそうです.親身に質問にお答えいただき,ありがとうございました.
___________________________________________________________
options.FitnessScalingFcn = @fitscalingprop;
であることが原因です。
 まず、ドキュメンテーションに次のように記載しています。
Do not use 'gacreationuniform' when you have linear constraints. Otherwise, your population might not satisfy the linear constraints.
したがって、CreationFcnは、デフォルトのgacreationuniformではなく、gacreationlinearfeasibleを設定しなければなりません。
次に、与えられている初期値からは良いスコアが生成されないようです。 fitscalingpropの説明には次のように記載しています。
This strategy has weaknesses when raw scores are not in a "good range". 動作中にfitscalingprop.mのraw scoreを見ていくと、NaNが含まれており、最終出力は全てNaNになります。
options.FitnessScalingFcn = @fitscalingrank;
であればscoreにNaNが含まれていたとしても、最終出力の全てがNaNになることはありません。 どうしてもfitscalinpropで計算したいということであれば、収束するか否かについては保証の限りではありませんが、初期値設定を止めるか、他の初期値を与えることをご検討ください。 もしくは、fitscalinpropにNaNの処理を書き加え、カスタム関数として導入する方法もよいかと思われます。
Aoi Midori
Aoi Midori am 21 Dez. 2018
MathWorksさんからご回答貰えたようでよかったです。ご解決おめでとうございます!また、回答の共有もありがとうございます。今後参考にさせていただきます。

Melden Sie sich an, um zu kommentieren.

Antworten (0)

Produkte


Version

R2018b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!