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

4 次查看(过去 30 天)
tsuyo0000
tsuyo0000 2018-12-18
评论: Aoi Midori 2018-12-21
非線形制約条件付きの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 个评论
tsuyo0000
tsuyo0000 2018-12-21
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 2018-12-21
MathWorksさんからご回答貰えたようでよかったです。ご解決おめでとうございます!また、回答の共有もありがとうございます。今後参考にさせていただきます。

请先登录,再进行评论。

回答(0 个)

类别

Help CenterFile Exchange 中查找有关 ソルバー出力と反復表示 的更多信息

产品


版本

R2018b

Community Treasure Hunt

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

Start Hunting!