0

MATLAB で遺伝的アルゴリズム ソルバーを使用しようとすると、次のような "添字付きの代入次元の不一致" エラーが発生します:エラー メッセージ Pastebin

さて、エラーは最後にフィットネス関数に関係していると言われていますが、フィットネス関数を個別にテストすると、エラーなしで動作します. それが役立つ場合は、フィットネス関数と制約関数のコードをリンクすることもできます。

どうもありがとうございました!

4

1 に答える 1

1

何が起こっているのかがわかると思います... CDraft への付属物の 1 つが if の内部にあるため、常に同じ長さのベクトルを返すとは限りません。つまり、最初に制約ベクトルを返すと、行列が事前に割り当てられます。制約出力を使用すると、次回はこのマトリックスに収まらないものを返すため、エラーが発生します。

手がかりはエラー スタックにあります。スタックの一番上にあります。

添字付きの代入次元が一致しません。

C:\Program Files\MATLAB\R2012b\toolbox\globaloptim\globaloptim\private\gaminlpenaltyfcn.p>i_convectorizer のエラー (135 行目)

明らかに、これはあなたが作成した関数ではありません。関数を調べると、このエラーの原因となるものは何もありません。エラーの終わりは別の手がかりを与える

原因: 最初のユーザー提供のフィットネス関数評価の失敗。GA を続行できません。

関数は、gaユーザー指定の制約を処理するコードのビットでエラーを報告しています。このコード全体 (ユーザー提供の関数の呼び出しおよびその他の関連行) はすべてtry...catch、このエラーを返す 1 つのステートメント内にある可能性があります。このようなもの:

try
    c = userConFun(x);
    if isempty(cHistory)
        cHistory = zeros(length(c), 1000); % or whatever
    end
    cHistory(:, currentIterationIndex) = c;
catch err
    error('Failure in user-supplied fitness function blah blah blah');
end

その結果、関数が返された後にエラーが発生したにもかかわらず、エラーは関数から発生したように見えます。

于 2013-05-06T11:14:18.070 に答える