非線形制約条件付きGAのcrossoverintermediateに関するエラー
显示 更早的评论
非線形制約条件付きの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 个评论
Kazuya
2018-12-18
おそらく、、実行している状況に特有のエラーなので回答が難しいかと思います。エラーが発生するコードを転記(添付)可能ですか?
Aoi Midori
2018-12-19
tsuyo0000さん、
横から失礼いたします。頂いたコードで、確かにエラーが再現しました。そこで、エラーの原因を細かく探ると、optimoptions()で設定されている「'InitialPopulationMatrix',x0」の処理が原因のようでした。前後のソースがtsuyo0000さんとは異なるので、一概には言えませんが、私の環境では、InitialPopulationMatrixの値を変えると(例えばx0(6)を0に変更)エラーがなくなりました。
こうすることで、tsuyo0000さんの意図通りのコードではなくなってしまう点恐縮ですが、これによって配列parentsの中の要素も0ではなくなっていたので、一解決案として記載します。
tsuyo0000
2018-12-19
Aoi Midori
2018-12-19
tsuyo0000さん、
実は、私の環境でも網羅的に実験していたのですが、'InitialPopulationMatrix'を設定しない時はエラーは発生せず、また、世代数や個体数を増減させてもエラーは起きなかったのです。。
ここにあるSyntaxの、optionsを追加する前の形では全て正常動作を確認できています。
tsuyo0000
2018-12-19
tsuyo0000
2018-12-20
Aoi Midori
2018-12-21
tsuyo0000
私も色々見てたのですが、いまいち原因がよくわかっていません。特に自分の場合、上記でもエラーにならないので...。
もしもう少し大きい範囲でソースを添付頂けたら、何かわかることがあるかもしれません。
Kazuya
2018-12-21
目的関数の fun.m があれば同じ条件下でいろいろ試せるので原因を見つけるのに効率的かと思いますが、、どうでしょう。
tsuyo0000
2018-12-21
Aoi Midori
2018-12-21
MathWorksさんからご回答貰えたようでよかったです。ご解決おめでとうございます!また、回答の共有もありがとうございます。今後参考にさせていただきます。
回答(0 个)
类别
在 帮助中心 和 File Exchange 中查找有关 ソルバーの選択 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!