필터 지우기
필터 지우기

非線形制約条件付き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!