Main Content

このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。

遺伝的アルゴリズムのオプション

遺伝的アルゴリズムのオプション

optimoptions を使用して ga のオプションを設定します。

options = optimoptions('ga','Option1','value1','Option2','value2');
  • いくつかのオプションは italics にリストされています。これらのオプションは、optimoptions が返すリストには表示されません。'optimoptions がこれらのオプション値を非表示にする理由については、optimoptions で非表示になっているオプション を参照してください。

  • ソルバーにオプションを渡すようにしてください。それ以外の場合、patternsearch はデフォルトのオプション値を使用します。

    [x,fval] = ga(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

プロット オプション

PlotFcn は、 ga または gamultiobj によって各反復で呼び出されるプロット関数を指定します。PlotFcn オプションを組み込みのプロット関数名またはプロット関数へのハンドルに設定します。プロット ウィンドウの Stop ボタンをクリックすると、いつでもアルゴリズムを停止できます。たとえば、最適な関数値を表示するには、options を次のように設定します。

options = optimoptions('ga','PlotFcn','gaplotbestf');

複数のプロットを表示するには、組み込みのプロット関数名のセル配列または関数ハンドルのセル配列を使用します。

options = optimoptions('ga',...
    'PlotFcn', {@plotfun1, @plotfun2, ...});

ここで、@plotfun1@plotfun2 などはプロット関数への関数ハンドルです。複数のプロット関数を指定すると、すべてのプロットが同じウィンドウにサブプロットとして表示されます。任意のサブプロットを右クリックすると、別の図ウィンドウで拡大バージョンが表示されます。

ga または gamultiobj で使用可能なプロット関数:

  • 'gaplotscorediversity' は各世代のスコアのヒストグラムをプロットします。

  • 'gaplotstopping' は停止基準レベルをプロットします。

  • 'gaplotgenealogy' は個人の系図をプロットします。ある世代から次の世代への系統は、突然変異の子、交差の子、エリート個体を区別するために色分けされています。

  • 'gaplotscores' は各世代の個体のスコアをプロットします。

  • 'gaplotdistance' は、各世代の個体間の平均距離をプロットします。

  • 'gaplotselection' は親のヒストグラムをプロットします。

  • 'gaplotmaxconstr' は、各世代における最大の非線形制約違反をプロットします。ga の場合、NonlinearConstraintAlgorithm オプションが 'auglag' (非整数問題のデフォルト) の場合にのみ使用できます。したがって、'penalty' 非線形制約アルゴリズムを使用するため、整数制約の問題には使用できません。

  • 独自のプロット関数を作成して使用することもできます。プロット関数の構造 では、カスタム プロット関数の構造について説明します。任意のカスタム関数を関数ハンドルとして渡します。カスタム プロット関数の例については、カスタムのプロット関数の作成 を参照してください。

次のプロット関数は ga でのみ使用できます。

  • 'gaplotbestf' は、世代ごとに最高スコア値と平均スコアをプロットします。

  • 'gaplotbestindiv' は、各世代で最適な適応度関数値を持つ個体のベクトルエントリをプロットします。

  • 'gaplotexpectation' は、各世代における予想される子供の数と生のスコアをプロットします。

  • 'gaplotrange' は、各世代の最小、最大、平均スコア値をプロットします。

次のプロット関数は gamultiobj でのみ使用できます。

  • 'gaplotpareto' は、最初の 2 つまたは 3 つの目的関数のパレート フロントをプロットします。

  • 'gaplotparetodistance' は、各個体とその近隣個体との距離を棒グラフでプロットします。

  • 'gaplotrankhist' は、個人の順位のヒストグラムをプロットします。ランク 1 の個人はパレート限界上にいます。ランク 2 の個体は、ランク 1 の個体の少なくとも 1 名よりも下位ですが、他のランクの個体よりも下位ではありません。

  • 'gaplotspread' は、反復回数の関数として平均拡散をプロットします。

プロット関数の構造

プロット関数の最初の行は次の形式になります。

function state = plotfun(options,state,flag)

関数の入力引数は

  • options — 現在のすべてのオプション設定を含む構造体。

  • state — 現在の世代に関する情報を含む構造体。国家構造state のフィールドについて説明します。

  • flag — アルゴリズムが現在どの段階にあるかの説明。詳細については、出力関数オプション を参照してください。

追加パラメーターの受け渡し は、関数に追加のパラメータを提供する方法について説明します。

出力引数 state も状態構造体です。必要に応じて変更した入力引数を渡します。国家構造の変更 を参照してください。反復を停止するには、state.StopFlag'y' などの空でない文字ベクトルに設定します。

国家構造

が.  プロット、突然変異、および出力関数への入力引数である ga の状態構造には、次のフィールドが含まれています。

  • Generation — 現在の世代番号。

  • StartTime — 遺伝的アルゴリズムが開始された時刻。tic によって返されます。

  • StopFlag — 停止の理由、文字ベクトル。

  • LastImprovement — 適応度値が最後に向上した世代。

  • LastImprovementTime — 最後に改善が行われた時刻。

  • Best — 各世代の最高スコアを含むベクトル。

  • how'augLag' 非線形制約アルゴリズムは、次のいずれかのアクションを報告します: 'Infeasible point''Update multipliers'、または 'Increase penalty'拡張ラグランジュ遺伝的アルゴリズム を参照してください。

  • FunEval — 関数評価の累積回数。

  • Expectation — 個人の選択に対する期待。

  • Selection — エリート、クロスオーバー、突然変異のために選択された個体のインデックス。

  • Population — 現在の世代の人口。

  • Score — 現在の人口のスコア。

  • NonlinIneq — 現在の時点での非線形不等式制約。非線形制約関数が指定され、整数変数がなく、flag'interrupt' ではなく、NonlinearConstraintAlgorithm'auglag' である場合にのみ存在します。

  • NonlinEq — 現在のポイントでの非線形等式制約。非線形制約関数が指定され、整数変数がなく、flag'interrupt' ではなく、NonlinearConstraintAlgorithm'auglag' である場合にのみ存在します。

  • EvalElitesga がエリート個体の適応度関数を評価するかどうかを示す論理値。最初、この値は true です。最初の世代では、エリート個体が以前の値に評価された場合 (これは、適応度関数が決定論的であることを示します)、この値は、後続の反復ではデフォルトで false になります。EvalElitesfalse の場合、ga はエリート個体の適応度関数を再評価しません。出力 state.EvalElites を変更することにより、カスタム プロット関数またはカスタム出力関数でこの動作をオーバーライドできます。

  • HaveDuplicatesga が初期集団に重複する個体を追加するかどうかを示す論理値。ga は、個体が重複しているか一意であるかを判断するために小さな相対許容値を使用します。HaveDuplicatestrue の場合、ga は固有の個体を特定し、固有の個体ごとに適応度関数を 1 回だけ評価します。ga は適応度関数と制約関数の値を複製個体にコピーします。ga は、すべての個体が固有になるまで、各世代でテストを繰り返します。このテストは n*m*log(m) 回の演算を実行します。ここで、 m は母集団のサイズ、 nnvars です。カスタム プロット関数またはカスタム出力関数でこのテストをオーバーライドするには、出力 state.HaveDuplicatesfalse に設定します。

gamultiobj.  プロット、突然変異、および出力関数への入力引数である gamultiobj の状態構造には、次のフィールドが含まれています。

  • Population — 現在の世代の人口

  • Score — 現在の集団のスコア、PopulationnObjectives列の行列、nObjectivesは目標の数

  • Generation — 現在の世代番号

  • StartTime — 遺伝的アルゴリズムが開始された時刻。tic によって返されます。

  • StopFlag — 停止理由、文字ベクトル

  • FunEval — 関数評価の累積回数

  • Selection — エリート、クロスオーバー、突然変異のために選択された個体のインデックス

  • Rank — 人口内のメンバーの順位のベクトル

  • Distance — 集団の各メンバーから最も近い隣接メンバーまでの距離のベクトル

  • AverageDistanceDistance の標準偏差 (平均ではありません)

  • Spread — 各世代における広がりを表すベクトル

  • mIneq — 非線形不等式制約の数

  • mEq — 非線形等式制約の数

  • mAll — 非線形制約の合計数、mAll = mIneq + mEq

  • C — 現在のポイントでの非線形不等式制約、PopulationSizemIneq列の行列

  • Ceq — 現在のポイントでの非線形等式制約、PopulationSizemEq列の行列

  • isFeas — 人口の実現可能性、PopulationSize 要素を持つ論理ベクトル

  • maxLinInfeas — 人口の線形制約に関する最大の実現不可能性

人口オプション

集団オプションを使用すると、遺伝的アルゴリズムが使用する集団のパラメータを指定できます。

PopulationType は、フィットネス関数への入力のタイプを指定します。タイプとその制限は次のとおりです。

  • 'doubleVector' — 集団内の個体が double タイプの場合、このオプションを使用します。また、混合整数プログラミングに推奨されるデータ型は、混合整数 ga 最適化 の手法を使用した 'doubleVector' です。'doubleVector' がデフォルトのデータ型です。

  • 'bitstring' — 集団内の個体に 0 または 1 の要素がある場合にこのオプションを使用できます。

    注意

    Bit string 集団内の個体は文字列や文字ではなく、double 型のベクトルです。

    CreationFcn および MutationFcn の場合は、'gacreationuniform' および 'mutationuniform' またはカスタム関数へのハンドルを使用します。CrossoverFcn の場合は、'crossoverscattered''crossoversinglepoint''crossovertwopoint'、またはカスタム関数へのハンドルを使用します。

    'bitstring' データ型は使いにくい場合があります。ga は、境界、線形制約、非線形制約を含むすべての制約を無視します。HybridFcn は使用できません。ga でバイナリ変数を最も簡単に使用するには、混合整数 ga 最適化 を参照してください。

  • 'custom' — カスタム人口タイプを示します。この場合、カスタム CrossoverFcnMutationFcn も使用する必要があります。カスタム作成関数または InitialPopulationMatrix のいずれかを指定する必要があります。HybridFcn は使用できません。また、ga は境界、線形制約、非線形制約を含むすべての制約を無視します。

PopulationSize は、各世代に何人の個体が存在するかを指定します。集団のサイズが大きい場合、遺伝的アルゴリズムはソリューション空間をより徹底的に検索するため、アルゴリズムがグローバル最小値ではないローカル最小値を返す可能性が低くなります。ただし、人口規模が大きいと、アルゴリズムの実行速度も遅くなります。既定値は '50 when numberOfVariables <= 5, else 200' です。

PopulationSize をベクトルに設定すると、遺伝的アルゴリズムによって複数のサブポピュレーションが作成され、その数はベクトルの長さになります。各サブポピュレーションのサイズは、ベクトルの対応するエントリです。このオプションは役に立たないことに注意してください。移行オプションを参照してください。

CreationFcn は、 ga の初期集団を作成する関数を指定します。以下から選択します。

  • [] は、問題の種類に応じてデフォルトの作成関数を使用します。

  • 'gacreationuniform' は均一分布のランダムな初期集団を作成します。線形制約がない場合、または整数制約がある場合は、これがデフォルトになります。一様分布は、初期の母集団範囲 (InitialPopulationRange) 内にあります。InitialPopulationRange のデフォルト値は、すべてのコンポーネントに対して [-10;10] であり、整数制約がある場合は [-9999;10001] です。これらの境界は、既存の境界 lb および ub と一致するようにシフトおよびスケーリングされます。

    注意

    線形制約がある場合は 'gacreationuniform' を使用しないでください。そうしないと、人口が線形制約を満たさなくなる可能性があります。

  • 線形制約があり、整数制約がない場合は、'gacreationlinearfeasible' がデフォルトになります。この選択により、すべての境界と線形制約を満たすランダムな初期集団が作成されます。線形制約がある場合、'gacreationlinearfeasible' は制約領域の境界上に多数の個体を作成し、分散した集団を作成します。'gacreationlinearfeasible'InitialPopulationRange を無視します。'gacreationlinearfeasible'linprog を呼び出して、境界と線形制約に関して実行可能な集団を作成します。

    動作の例については、ga のカスタム プロット関数と線形制約 を参照してください。

  • 'gacreationnonlinearfeasible' は、'penalty' 非線形制約アルゴリズムのデフォルトの作成関数です。詳細については、制約パラメータ を参照してください。

  • 問題に整数制約がある場合、'gacreationuniformint'ga のデフォルトの作成関数です。この関数は、無制限のコンポーネントに人工的な境界を適用し、境界内で個体を均一にランダムに生成し、整数制約を適用します。

    メモ

    問題に整数制約がある場合、gagamultiobj は、整数制約、境界、およびすべての線形制約が各反復で実行可能であることを強制します。デフォルト以外の突然変異、交差、作成、および選択関数の場合、gagamultiobj は関数が動作した後に追加の実行可能性ルーチンを適用します。

  • 問題に整数制約がある場合、'gacreationsobol'gamultiobj のデフォルトの作成関数です。作成関数は、準ランダムな Sobol シーケンスを使用して、十分に分散された初期集団を生成します。集団は、境界、線形制約、および整数制約に関して実現可能です。

  • 関数ハンドルを使用すると、PopulationType で指定したタイプのデータを生成する独自の作成関数を記述できます。以下に例を示します。

    options = optimoptions('ga','CreationFcn',@myfun);

    作成関数には次の呼び出し構文が必要です。

    function Population = myfun(GenomeLength, FitnessFcn, options)

    関数への入力引数は次のとおりです。

    • Genomelength — 適応度関数の独立変数の数

    • FitnessFcn — フィットネス関数

    • options — オプション

    この関数は、遺伝的アルゴリズムの初期集団である Population を返します。

    追加パラメーターの受け渡し は、関数に追加のパラメータを提供する方法について説明します。

    注意

    境界または線形制約がある場合は、作成関数がこれらの制約を満たす個体を作成することを確認します。そうしないと、人口が制約を満たさなくなる可能性があります。

InitialPopulationMatrix は遺伝的アルゴリズムの初期集団を指定します。デフォルト値は [] です。この場合、ga はデフォルトの CreationFcn を使用して初期集団を作成します。InitialPopulationMatrix に空でない配列を入力する場合、その配列の行数は PopulationSize 以下、列数は nvars である必要があります。ここで、 nvars は変数の数であり、 ga または gamultiobj への 2 番目の入力です。初期個体群が 部分的 である場合、つまり PopulationSize 行未満である場合、遺伝的アルゴリズムは CreationFcn を呼び出して残りの個体を生成します。

InitialScoreMatrix は初期集団の初期スコアを指定します。初期スコアは部分的なものになることもあります。問題に非線形制約がある場合、アルゴリズムは InitialScoreMatrix を使用しません。

InitialPopulationRange は、gacreationuniform 作成関数によって生成される初期集団内のベクトルの範囲を指定します。InitialPopulationRange を 2 行 nvars 列の行列に設定できます。各列の形式は [lb;ub] です。ここで、lb はその座標のエントリの下限、ub は上限です。InitialPopulationRange を 2 行 1 列のベクトルとして指定すると、各エントリは長さ nvars の定数行に拡張されます。InitialPopulationRange を指定しない場合、デフォルトは [-10;10] (整数制約問題の場合は [-1e4+1;1e4+1]) となり、既存の境界と一致するように変更されます。'gacreationlinearfeasible'InitialPopulationRange を無視します。例については、初期範囲の設定を参照してください。

フィットネススケーリングオプション

フィットネス スケーリングは、フィットネス関数によって返される生のフィットネス スコアを、選択関数に適した範囲の値に変換します。

FitnessScalingFcn はスケーリングを実行する関数を指定します。次のオプションがあります。

  • 'fitscalingrank' — デフォルトのフィットネス スケーリング関数 'fitscalingrank' は、各個体のスコアではなく、そのランクに基づいて生のスコアをスケーリングします。個人のランクは、ソートされたスコアにおける位置です。ランク r の個人のスケールスコアは 1/r に比例します。したがって、最も適合度の高い個体のスケール スコアは 1 に比例し、次に適合度の高い個体のスケール スコアは 1/2 に比例する、というようになります。ランク適合度スケーリングは、生のスコアの広がりの影響を取り除きます。平方根により、順位スコアリングと比較して、順位の低い個人のスコアがほぼ同等になります。詳細については、適応度のスケーリングを参照してください。

  • 'fitscalingprop' — 比例スケーリングにより、個々のスケーリングされた値がその生のフィットネス スコアに比例します。

  • 'fitscalingtop' — トップスケーリングは、トップの個体を均等にスケーリングします。追加のパラメータを使用して上部のスケーリングを変更できます。

    options = optimoptions('ga',...
        'FitnessScalingFcn',{@fitscalingtop,quantity})

    quantity は、正のスケール値が割り当てられる個体の数を指定します。quantity は、1 から個体群サイズまでの整数、または個体群サイズの割合を指定する 0 から 1 までの分数になります。既定値は 0.4 です。子孫を生み出す各個体には等しいスケール値が割り当てられ、残りの個体には値 0 が割り当てられます。スケールされた値の形式は [01/n 1/n 0 0 1/n 0 0 1/n ...] です。

  • 'fitscalingshiftlinear' — シフト線形スケーリングは、最も適合した個体の期待値が平均スコアに掛けた rate と呼ばれる定数と等しくなるように生のスコアをスケーリングします。rate パラメータを変更できます:

    options = optimoptions('ga','FitnessScalingFcn',...
        {@fitscalingshiftlinear, rate})

    rate の既定値は 2 です。

  • 関数ハンドルを使用すると、独自のスケーリング関数を記述できます。

    options = optimoptions('ga','FitnessScalingFcn',@myfun);

    スケーリング関数には次の呼び出し構文が必要です。

    function expectation = myfun(scores, nParents)

    関数への入力引数は次のとおりです。

    • scores — 母集団の各メンバーに対応するスカラーのベクトル

    • nParents — この人口から必要な親の数

    この関数は、scores と同じ長さのスカラーの列ベクトルである expectation を返し、母集団の各メンバーのスケールされた値を提供します。expectation のエントリの合計は nParents と等しくなければなりません。

    追加パラメーターの受け渡し は、関数に追加のパラメータを提供する方法について説明します。

詳細については、適応度のスケーリングを参照してください。

選択オプション

選択オプションは、遺伝的アルゴリズムが次世代の親を選択する方法を指定します。

SelectionFcn オプションは選択関数を指定します。

gamultiobj'selectiontournament' 選択機能のみを使用します。

ga の場合のオプションは次のとおりです。

  • 'selectionstochunif'ga のデフォルトの選択関数 'selectionstochunif' は、各親がそのスケール値に比例した長さの線の部分に対応する線をレイアウトします。アルゴリズムは、同じサイズのステップで線に沿って移動します。各ステップで、アルゴリズムは到達したセクションから親を割り当てます。最初のステップは、ステップ サイズよりも小さい均一な乱数です。

  • 'selectionremainder' — 剰余選択は、各個体のスケール値の整数部分から決定論的に親を割り当て、残りの小数部分に対してルーレット選択を使用します。たとえば、個体のスケール値が 2.3 の場合、整数部分が 2 であるため、その個体は親として 2 回リストされます。スケール値の整数部分に従って親が割り当てられた後、残りの親は確率的に選択されます。このステップで親が選択される確率は、そのスケール値の小数部分に比例します。

  • 'selectionuniform' — 均一選択は、期待値と親の数を使用して親を選択します。均一な選択はデバッグやテストには便利ですが、あまり効果的な検索戦略ではありません。

  • 'selectionroulette' — ルーレット選択は、ルーレットホイールをシミュレートして親を選択します。ルーレットホイールでは、個体に対応するホイールのセクションの面積が、個体の期待値に比例します。アルゴリズムは乱数を使用して、その面積に等しい確率でセクションの 1 つを選択します。

  • 'selectiontournament' — トーナメント選択では、size 人のプレイヤーをランダムに選択し、その中から最適な個人を親として選択することで、各親を選択します。size は少なくとも 2 である必要があります。size の既定値は 4 です。size を次のように別の値に設定します。

    options = optimoptions('ga','SelectionFcn',...
                         {@selectiontournament,size})

    NonlinearConstraintAlgorithmPenalty の場合、 ga はサイズ 2'selectiontournament' を使用します。

  • メモ

    問題に整数制約がある場合、gagamultiobj は、整数制約、境界、およびすべての線形制約が各反復で実行可能であることを強制します。デフォルト以外の突然変異、交差、作成、および選択関数の場合、gagamultiobj は関数が動作した後に追加の実行可能性ルーチンを適用します。

  • 関数ハンドルを使用すると、独自の選択関数を記述できます。

    options = optimoptions('ga','SelectionFcn',@myfun);

    選択関数には次の呼び出し構文が必要です。

    function parents = myfun(expectation, nParents, options)

    ga は、入力引数 expectationnParents、および options を提供します。関数は親のインデックスを返します。

    関数への入力引数は次のとおりです。

    • expectation

      • ga の場合、expectation は集団の各メンバーのスケールされた適応度の列ベクトルです。スケーリングは フィットネススケーリングオプション から行われます。

        ヒント

        expectation(:,1) を使用すると、列ベクトルがあることを確認できます。たとえば、edit selectionstochunif やその他の組み込み選択関数などです。

      • gamultiobj の場合、expectation は、最初の列が個体の順位の負数であり、2 番目の列が個体の距離測定値である行列です。多目的オプションを参照してください。

    • nParents — 選択する親の数。

    • options — 遺伝的アルゴリズム options

    この関数は、選択した親のインデックスを含む長さ nParents の行ベクトル parents を返します。

    追加パラメーターの受け渡し は、関数に追加のパラメータを提供する方法について説明します。

詳細については、選択を参照してください。

複製オプション

生殖オプションは、遺伝的アルゴリズムが次世代の子供をどのように作成するかを指定します。

EliteCount は、次の世代まで生き残ることが保証されている個体の数を指定します。EliteCount を人口サイズ以下の正の整数に設定します。デフォルト値は、連続問題の場合は ceil(0.05*PopulationSize)、混合整数問題の場合は 0.05*(default PopulationSize) です。

CrossoverFraction は、交叉によって生成されるエリートの子供以外の次世代の割合を指定します。CrossoverFraction01 の間の分数に設定します。既定値は 0.8 です。

例については、変異と交差の変化 の「クロスオーバー分率の設定」を参照してください。

突然変異のオプション

突然変異オプションは、遺伝的アルゴリズムが集団内の個体に小さなランダムな変更を加えて突然変異の子を作成する方法を指定します。突然変異により遺伝的多様性がもたらされ、遺伝的アルゴリズムがより広い空間を探索できるようになります。MutationFcn オプションで突然変異関数を指定します。

MutationFcn オプション:

  • 'mutationgaussian' — 制約のない問題に対する ga のデフォルトの突然変異関数である 'mutationgaussian' は、平均 0 のガウス分布から取得した乱数を親ベクトルの各エントリに追加します。この分布の標準偏差は、パラメータ scaleshrink、および InitialPopulationRange オプションによって決まります。scaleshrink を次のように設定します。

    options = optimoptions('ga','MutationFcn', ... 
    {@mutationgaussian, scale, shrink})
    • scale パラメータは、第 1 世代での標準偏差を決定します。InitialPopulationRange を 2 行 1 列のベクトル v に設定すると、初期標準偏差は親ベクトルのすべての座標で同じになり、 scale*(v(2)-v(1)) で与えられます。

      InitialPopulationRange を 2 行 nvars 列のベクトル v に設定すると、親ベクトルの座標 i における初期標準偏差は scale*(v(i,2) - v(i,1)) で与えられます。

    • shrink パラメータは、世代が進むにつれて標準偏差がどのように縮小するかを制御します。InitialPopulationRangeを2行1列のベクトルに設定すると、k世代の標準偏差であるσkは親ベクトルのすべての座標で同じになり、再帰式で与えられます。

      σk=σk1(1ShrinkkGenerations).

      InitialPopulationRangeを2行nvars列のベクトルに設定すると、k世代目σi,kの親ベクトルの座標iにおける標準偏差は、再帰式で与えられます。

      σi,k=σi,k1(1ShrinkkGenerations).

      shrink1 に設定すると、アルゴリズムは各座標の標準偏差を最後の世代で 0 になるまで線形に縮小します。shrink の値が負の場合、標準偏差は大きくなります。

    scaleshrink の両方のデフォルト値は 1 です。

    注意

    境界または線形制約がある場合は、mutationgaussian を使用しないでください。そうしないと、人口が必ずしも制約を満たすとは限りません。代わりに、'mutationadaptfeasible' または線形制約を満たすカスタム変異関数を使用します。

  • 'mutationuniform' — 均一な突然変異は 2 段階のプロセスです。まず、アルゴリズムは個体のベクトルエントリの一部を突然変異のために選択します。各エントリが突然変異する確率は rate です。rate の既定値は 0.01 です。2 番目のステップでは、アルゴリズムは選択された各エントリを、そのエントリの範囲から均一に選択された乱数に置き換えます。

    rateのデフォルト値を変更するには、

    options = optimoptions('ga','MutationFcn', {@mutationuniform, rate})

    注意

    境界または線形制約がある場合は、mutationuniform を使用しないでください。そうしないと、人口が必ずしも制約を満たすとは限りません。代わりに、'mutationadaptfeasible' または線形制約を満たすカスタム変異関数を使用します。

  • 'mutationadaptfeasible' は、gamultiobj および非整数制約がある場合の ga のデフォルトの突然変異関数であり、最後の成功または失敗した生成に関して適応的な方向をランダムに生成します。突然変異は、境界と線形制約を満たす方向とステップの長さを選択します。

  • 問題に整数制約がある場合、'mutationpower'gagamultiobj のデフォルトの突然変異関数です。パワー突然変異は、次のようにして親 x を突然変異させます。親の各コンポーネントに対して、子の i 番目のコンポーネントは次のように与えられます。

    mutationChild(i) = x(i) - s(x(i) - lb(i)) なら t < r

    = x(i) + s(ub(i) - x(i)) なら t >= r

    ここで、t は、下限の i 番目の要素 lb(i) からの x(i) のスケール距離です。s はべき分布から抽出されたランダム変数であり、r は一様分布から抽出された乱数です。

    この関数は lb(i) = ub(i) を処理できます。新しい子要素は、 i 番目の要素が lb(i) (つまり ub(i)) に設定されて生成されます。このクロスオーバー機能の詳細については、次のリファレンスのセクション 2.1 を参照してください。

    Kusum Deep、Krishna Pratap Singsh、M. L. Kansal、C. Mohan。整数および混合整数の最適化問題を解決するための実際のコード化された遺伝的アルゴリズム。応用数学と計算、212(2009)、505-518。

    メモ

    問題に整数制約がある場合、gagamultiobj は、整数制約、境界、およびすべての線形制約が各反復で実行可能であることを強制します。デフォルト以外の突然変異、交差、作成、および選択関数の場合、gagamultiobj は関数が動作した後に追加の実行可能性ルーチンを適用します。

  • 'mutationpositivebasis' — この突然変異関数は、線形制約と境界に合わせて変更された直交 MADS ステップに似ています。

  • 関数ハンドルを使用すると、独自の変更関数を記述できます。

    options = optimoptions('ga','MutationFcn',@myfun);

    ミューテーション関数には次の呼び出し構文が必要です:

    function mutationChildren = myfun(parents, options, nvars, 
    FitnessFcn, state, thisScore, thisPopulation)

    関数の引数は

    • parents — 選択関数によって選択された親の行ベクトル

    • options — オプション

    • nvars — 変数の数

    • FitnessFcn — フィットネス関数

    • state — 現在の世代に関する情報を含む構造体。国家構造state のフィールドについて説明します。

    • thisScore — 現在の人口のスコアのベクトル

    • thisPopulation — 現在の集団内の個体のマトリックス

    この関数は、行が子に対応する行列として、mutationChildren(変異した子孫)を返します。行列の列数は nvars です。

    追加パラメーターの受け渡し は、関数に追加のパラメータを提供する方法について説明します。

    注意

    境界または線形制約がある場合は、突然変異関数がこれらの制約を満たす個体を作成することを確認します。そうしないと、人口が必ずしも制約を満たすとは限りません。

クロスオーバーオプション

交差オプションは、遺伝的アルゴリズムが 2 つの個体、つまり親を組み合わせて、次世代の交差子を形成する方法を指定します。

CrossoverFcn はクロスオーバーを実行する関数を指定します。以下の機能から選択できます。

  • 線形制約のない問題のデフォルトの交差関数である 'crossoverscattered' は、ランダムなバイナリ ベクトルを作成し、最初の親からベクトルが 1 である遺伝子と、2 番目の親からベクトルが 0 である遺伝子を選択し、遺伝子を組み合わせて子を形成します。例えば、p1p2が親の場合

    p1 = [a b c d e f g h]
    p2 = [1 2 3 4 5 6 7 8]

    バイナリベクトルが[1 1 0 0 1 0 0 0]の場合、関数は次の子を返します。

    child1 = [a b 3 4 e 6 7 8]

    注意

    問題に線形制約がある場合、'crossoverscattered' は分布が不完全な集団を生成する可能性があります。この場合は、'crossoverintermediate' などの別のクロスオーバー関数を使用します。

  • 'crossoversinglepoint'は1からnvarsまでのランダムな整数nを選択し、

    • 最初の親から n 以下の番号のベクトル エントリを選択します。

    • 2 番目の親から n より大きい番号のベクトル エントリを選択します。

    • これらのエントリを連結して子ベクトルを形成します。

      例えば、p1p2が親の場合

      p1 = [a b c d e f g h]
      p2 = [1 2 3 4 5 6 7 8]

    交差ポイントが 3 の場合、関数は次の子を返します。

    child = [a b c 4 5 6 7 8]

    注意

    問題に線形制約がある場合、'crossoversinglepoint' は分布が不完全な集団を生成する可能性があります。この場合は、'crossoverintermediate' などの別のクロスオーバー関数を使用します。

  • 'crossovertwopoint' は、 1nvars の間の 2 つのランダムな整数 mn を選択します。この関数は

    • 最初の親から m 以下の番号のベクトルエントリ

    • 2番目の親からm+1からnまでの番号が付けられたベクトルエントリ

    • 最初の親から n より大きい番号が付けられたベクトル エントリ。

    次に、アルゴリズムはこれらの遺伝子を連結して 1 つの遺伝子を形成します。例えば、p1p2が親の場合

    p1 = [a b c d e f g h]
    p2 = [1 2 3 4 5 6 7 8]

    交差ポイントが 3 と 6 の場合、関数は次の子を返します。

    child = [a b c 4 5 6 g h]

    注意

    問題に線形制約がある場合、'crossovertwopoint' は分布が不完全な集団を生成する可能性があります。この場合は、'crossoverintermediate' などの別のクロスオーバー関数を使用します。

  • 線形制約がある場合のデフォルトの交差関数である 'crossoverintermediate' は、親の加重平均を取って子を作成します。重みは単一のパラメータ ratio で指定できます。このパラメータは、スカラーまたは長さ nvars の行ベクトルになります。ratio のデフォルト値はすべて 1 のベクトルです。ratio パラメータを次のように設定します。

    options = optimoptions('ga','CrossoverFcn', ...  
    {@crossoverintermediate, ratio});

    'crossoverintermediate' は、次の式を使用して parent1parent2 から子を作成します。

    child = parent1 + rand * Ratio * ( parent2 - parent1)

    ratio のすべてのエントリが [0, 1] の範囲内にある場合、生成される子は、親を反対の頂点に配置することによって定義されたハイパーキューブ内にあります。ratio がその範囲内にない場合、子要素はハイパーキューブの外側にある可能性があります。ratio がスカラーの場合、すべての子は親の間の線上にあります。

  • 'crossoverlaplace' は、問題に整数制約がある場合のデフォルトのクロスオーバー関数です。ラプラス交差は、次のいずれかの式 (ランダムに選択) を使用して子を生成します。

    xOverKid = p1 + bl*abs(p1 – p2)

    xOverKid = p2 + bl*abs(p1 – p2)

    ここで、p1p2xOverKid の親であり、blラプラス分布 から生成された乱数です。このクロスオーバー機能の詳細については、次のリファレンスのセクション 2.1 を参照してください。

    Kusum Deep、Krishna Pratap Singsh、M. L. Kansal、C. Mohan。整数および混合整数の最適化問題を解決するための実際のコード化された遺伝的アルゴリズム。応用数学と計算、212(2009)、505-518。

  • 'crossoverheuristic' は、2 つの親を含む線上に位置し、適応度値が高い親から少し離れた、適応度値が低い親から離れる方向にある子を返します。パラメータ ratio によって、子がより良い親からどれだけ離れているかを指定できます。ratio のデフォルト値は 1.2 です。ratio パラメータを次のように設定します。

    options = optimoptions('ga','CrossoverFcn',...
                       {@crossoverheuristic,ratio});

    parent1parent2が親で、parent1の適応度が優れている場合、関数は子を返します。

    child = parent2 + ratio * (parent1 - parent2);

    注意

    問題に線形制約がある場合、'crossoverheuristic' は分布が不完全な集団を生成する可能性があります。この場合は、'crossoverintermediate' などの別のクロスオーバー関数を使用します。

  • 'crossoverarithmetic' は、2 つの親の加重算術平均である子を作成します。子は線形制約と境界に関して常に実行可能です。

  • メモ

    問題に整数制約がある場合、gagamultiobj は、整数制約、境界、およびすべての線形制約が各反復で実行可能であることを強制します。デフォルト以外の突然変異、交差、作成、および選択関数の場合、gagamultiobj は関数が動作した後に追加の実行可能性ルーチンを適用します。

  • 関数ハンドルを使用すると、独自のクロスオーバー関数を記述できます。

    options = optimoptions('ga','CrossoverFcn',@myfun);

    クロスオーバー関数には次の呼び出し構文が必要です。

    xoverKids = myfun(parents, options, nvars, FitnessFcn, ...
        unused,thisPopulation)

    関数の引数は

    • parents — 選択関数によって選択された親の行ベクトル

    • options — オプション

    • nvars — 変数の数

    • FitnessFcn — フィットネス関数

    • unused — プレースホルダーは使用されていません

    • thisPopulation — 現在の人口を表す行列。行列の行数は PopulationSize 、列数は nvars です。

    この関数は、行が子に対応する行列として、交差子孫である xoverKids を返します。行列の列数は nvars です。

    追加パラメーターの受け渡し は、関数に追加のパラメータを提供する方法について説明します。

    注意

    境界または線形制約がある場合は、交差関数によってこれらの制約を満たす個体が作成されるようにしてください。そうしないと、人口が必ずしも制約を満たすとは限りません。

移行オプション

メモ

サブポピュレーションは、遺伝的アルゴリズムの並列処理の形式を指します。ga は現在この形式をサポートしていません。亜集団では、各働きアリが複数の個体を抱えます。これらの個人はサブ集団です。移住により一部の個体がワーカー間を移動する場合を除き、ワーカーは他のワーカーとは独立してサブポピュレーションを進化させます。

ga は現在この形式の並列処理をサポートしていないため、PopulationSize をベクトルに設定したり、MigrationDirectionMigrationInterval、または MigrationFraction オプションを設定したりしても利点はありません。

移行オプションは、個体がサブポピュレーション間でどのように移動するかを指定します。PopulationSize を長さが 1 より大きいベクトルに設定すると、移行が発生します。移住が発生すると、ある集団の最も優れた個体が別の集団の最も劣った個体に取って代わります。ある集団から別の集団に移動する個体は複製されます。これらはソースサブポピュレーションから削除されません。

次の 3 つのオプションによって移行の実行方法を制御できます。

  • MigrationDirection — 移行は一方向または双方向で実行できます。

    • MigrationDirection'forward' に設定すると、最後のサブポピュレーションに向かって移行が行われます。つまり、n 番目のサブポピュレーションは (n+1) 番目のサブポピュレーションに移行します。

    • MigrationDirection'both' に設定すると、n番目のサブポピュレーションは (n –1) 番目と (n+1) 番目のサブポピュレーションの両方に移行します。

    移行はサブポピュレーションの端で終了します。つまり、最後のサブポピュレーションが最初のサブポピュレーションに移行し、最初のサブポピュレーションが最後のサブポピュレーションに移行する可能性があります。

  • MigrationInterval — 移行間で何世代経過するかを指定します。たとえば、MigrationInterval20 に設定すると、移行は 20 世代ごとに行われます。

  • MigrationFraction — サブポピュレーション間で移動する個体の数を指定します。MigrationFraction は、移動する 2 つのサブポピュレーションのうち小さい方の割合を指定します。たとえば、個体が 50 個体のサブポピュレーションから 100 個体のサブポピュレーションに移行し、MigrationFraction0.1 に設定すると、移行する個体の数は 0.1*50=5 になります。

制約パラメータ

制約パラメータは、非線形制約ソルバーを参照します。アルゴリズムの詳細については、遺伝的アルゴリズムのための非線形制約ソルバーアルゴリズム を参照してください。

NonlinearConstraintAlgorithm オプションを 'auglag' (拡張ラグランジアン) または 'penalty' (ペナルティ アルゴリズム) に設定して、非線形制約アルゴリズムを選択します。

拡張ラグランジュ遺伝的アルゴリズム

  • InitialPenalty — 非線形制約アルゴリズムで使用されるペナルティ パラメーターの初期値を指定します。InitialPenalty1 以上である必要があり、既定値は 10 です。

  • PenaltyFactor — 問題が必要な精度で解決されず、制約が満たされない場合にペナルティ パラメータを増やします。PenaltyFactor1 よりも大きい必要があり、デフォルトは 100 です。

ペナルティアルゴリズム

ペナルティ アルゴリズムは、デフォルトで 'gacreationnonlinearfeasible' 作成関数を使用します。この作成関数は、fmincon を使用して実行可能な個体を検索します。'gacreationnonlinearfeasible' は、InitialPopulationRange オプションの範囲内のさまざまな初期ポイントから fmincon を開始します。オプションで、'gacreationnonlinearfeasible' は初期ポイントで fmincon を並列に実行できます。

メモ

'gacreationnonlinearfeasible' は常に実現可能な集団を作成するわけではありません。

次の名前と値のペアを使用して、'gacreationnonlinearfeasible' のチューニング パラメータを指定できます。

名前
SolverOptsfmincon オプションは、optimoptions または optimset を使用して作成されます。
UseParalleltrue の場合、初期ポイントで fmincon を並列に実行します。デフォルトは false です。
NumStartPts開始点の数。値は最大 sum(PopulationSize) の正の整数です。

名前と値のペアを @gacreationnonlinearfeasible とともにセル配列に含めます。

options = optimoptions('ga','CreationFcn',{@gacreationnonlinearfeasible,...
    'UseParallel',true,'NumStartPts',20});

多目的オプション

多目的オプションは、gamultiobj アルゴリズムの特性パラメータを定義します。次のパラメーターを指定できます。

  • ParetoFraction — ソルバーがより高いフロントから個体を選択している間、最初のパレートフロントに保持する個体の割合を設定します。このオプションは 0 から 1 までのスカラーです。

    メモ

    最初のパレート最前線上の個体の割合は ParetoFraction を超えることがあります。これは、Iterations のステップ 6 で他のランクの個体が少なすぎる場合に発生します。

  • DistanceMeasureFcn — 決定変数空間 (遺伝子型、設計変数空間とも呼ばれる) または関数空間 (表現型) で計算された個体の距離測定を計算する関数へのハンドルを定義します。たとえば、関数空間内のデフォルトの距離測定関数は 'distancecrowding' であり、これは {@distancecrowding,'phenotype'} と同じです。

    「距離」は集団内の各個体の混雑度を測定します。以下の中から選択してください。

    • 'distancecrowding'、または同等の {@distancecrowding,'phenotype'} — 適応度関数空間で距離を測定します。

    • {@distancecrowding,'genotype'} — 決定変数空間内の距離を測定します。

    • @distancefunction — 次のテンプレートを使用してカスタム距離関数を記述します。

      function distance = distancefunction(pop,score,options)
      % Uncomment one of the following two lines, or use a combination of both
      % y = score; % phenotype
      % y = pop; % genotype
      popSize = size(y,1); % number of individuals
      numData = size(y,2); % number of dimensions or fitness functions
      distance = zeros(popSize,1); % allocate the output
      % Compute distance here

      gamultiobj は、 pop の母集団、 scores の母集団の計算されたスコア、および options のオプションを渡します。距離関数は、母集団の各メンバーから参照(ある意味で最も近い隣人など)までの距離を返します。たとえば、組み込みファイル distancecrowding.m を編集します。

ハイブリッド機能オプション

ga ハイブリッド機能

ハイブリッド関数は、遺伝的アルゴリズムが終了した後に実行される別の最小化関数です。HybridFcn オプションでハイブリッド関数を指定できます。整数問題には使用しないでください。以下を選択できます。

  • [] — ハイブリッド機能はありません。

  • 'fminsearch' — MATLAB® 関数 fminsearch を使用して制約のない最小化を実行します。

  • 'patternsearch' — パターン検索を使用して、制約付きまたは制約なしの最小化を実行します。

  • 'fminunc' — Optimization Toolbox™ 関数 fminunc を使用して制約のない最小化を実行します。

  • 'fmincon' — Optimization Toolbox 関数 fmincon を使用して制約付き最小化を実行します。

メモ

ハイブリッド関数が問題の制約を受け入れることを確認します。そうでない場合、ga はエラーをスローします。

ハイブリッド機能には個別のオプションを設定できます。fminsearch の場合は optimset を使用し、fminconpatternsearchfminunc の場合は optimoptions を使用します。以下に例を示します。

hybridopts = optimoptions('fminunc','Display','iter',...
    'Algorithm','quasi-newton');
次のように、遺伝的アルゴリズム options にハイブリッド オプションを含めます。
options = optimoptions('ga',options,'HybridFcn',{@fminunc,hybridopts}); 
options を設定する前に hybridopts が存在している必要があります。

例については、遺伝的アルゴリズムにおけるハイブリッド方式を参照してください。ハイブリッド関数を使用する場合を参照してください。

gamultiobj ハイブリッド機能

ハイブリッド関数は、多目的遺伝的アルゴリズムが終了した後に実行される別の最小化関数です。HybridFcn オプションでハイブリッド関数 'fgoalattain' を指定できます。

多目的ハイブリッド関数として使用する場合、ソルバーは次の処理を実行します。

  1. 各目的関数の解における最大値と最小値を計算します。目的jの解kについて、

    Fmax(j)=maxkFk(j)Fmin(j)=minkFk(j).

  2. 各解kにおける総重量を計算します。

    w(k)=jFmax(j)Fk(j)1+Fmax(j)Fmin(j).

  3. 各解kにおける各目的関数jの重みを計算する。

    p(j,k)=w(k)Fmax(j)Fk(j)1+Fmax(j)Fmin(j).

  4. 各ソリューション k に対して、目標ベクトル Fk(j) と重みベクトル p(j,k) を使用して目標達成問題を実行します。

詳細については、Deb [3] のセクション 9.6 を参照してください。

停止基準オプション

停止基準は、アルゴリズムを終了する原因を決定します。次のオプションを指定できます。

  • MaxGenerations — 遺伝的アルゴリズムが実行する反復の最大回数を指定します。既定値は 100*numberOfVariables です。

  • MaxTimetictoc で測定される、遺伝的アルゴリズムが停止するまでの最大実行時間を秒単位で指定します。この制限は各反復の後に適用されるため、反復にかなりの時間がかかる場合は ga が制限を超える可能性があります。

  • FitnessLimit — 最適な適合値が FitnessLimit の値以下の場合、アルゴリズムは停止します。gamultiobj には適用されません。

  • MaxStallGenerationsMaxStallGenerations における最良適合度関数値の平均相対変化が FunctionTolerance 以下になった場合、アルゴリズムは停止します。(StallTest オプションが 'geometricWeighted' の場合、テストは 幾何加重 平均相対変化を対象とします。)非線形制約のある問題の場合、MaxStallGenerations がサブ問題に適用されます (遺伝的アルゴリズムのための非線形制約ソルバーアルゴリズム を参照)。

    gamultiobj の場合、MaxStallGenerations にわたるパレート解の 広がり の相対的変化の幾何平均が FunctionTolerance より小さく、最終的な広がりが最後の MaxStallGenerations にわたる平均広がりより小さい場合、アルゴリズムは停止します。幾何平均係数は½です。スプレッドはパレート最前線の動きを測る尺度です。gamultiobj アルゴリズムを参照してください。

  • MaxStallTimeMaxStallTime で指定された時間間隔 (tictoc で測定) 中に最良適合値に改善が見られない場合、アルゴリズムは停止します。

  • FunctionToleranceMaxStallGenerations における最良適合度関数値の平均相対変化が FunctionTolerance 以下になった場合、アルゴリズムは停止します。(StallTest オプションが 'geometricWeighted' の場合、テストは 幾何加重 平均相対変化を対象とします。)

    gamultiobj の場合、MaxStallGenerations にわたるパレート解の 広がり の相対的変化の幾何平均が FunctionTolerance より小さく、最終的な広がりが最後の MaxStallGenerations にわたる平均広がりより小さい場合、アルゴリズムは停止します。幾何平均係数は½です。スプレッドはパレート最前線の動きを測る尺度です。gamultiobj アルゴリズムを参照してください。

  • ConstraintToleranceConstraintTolerance は停止基準として使用されません。非線形制約に関する実現可能性を判断するために使用されます。また、max(sqrt(eps),ConstraintTolerance) は線形制約に関して実現可能性を決定します。

例については、最大世代数の設定と世代停止を参照してください。

出力関数オプション

出力関数は、遺伝的アルゴリズムが各世代で呼び出す関数です。他のソルバーとは異なり、ga 出力関数はアルゴリズムの状態の値を読み取るだけでなく、それらの値を変更することもできます。出力関数は、設定した条件に応じてソルバーを停止することもできます。

options = optimoptions('ga','OutputFcn',@myfun);

複数の出力関数の場合は、関数ハンドルのセル配列を入力します。

options = optimoptions('ga','OutputFcn',{@myfun1,@myfun2,...});

独自の出力関数を書くために使用できるテンプレートを表示するには、次のように入力します。

edit gaoutputfcntemplate

MATLAB コマンドラインで。

例については、遺伝的アルゴリズムのカスタム出力関数を参照してください。

出力関数の構造

出力関数には次の呼び出し構文が必要です。

[state,options,optchanged] = myfun(options,state,flag)

MATLAB は optionsstateflag データを出力関数に渡し、出力関数は stateoptionsoptchanged データを返します。

メモ

反復を停止するには、state.StopFlag'y' などの空でない文字ベクトルに設定します。

出力関数には次の入力引数があります。

  • options — オプション

  • state — 現在の世代に関する情報を含む構造体。国家構造state のフィールドについて説明します。

  • flag — アルゴリズムの現在のステータス:

    • 'init' — 初期化状態

    • 'iter' — 反復状態

    • 'interrupt''auglag' 非線形制約アルゴリズムの非線形制約問題の部分問題の反復。flag'interrupt' である場合、次のようになります。

      • state フィールドの値は、サブ問題の反復に適用されます。

      • gaoptions の変更を受け入れず、 optchanged を無視します。

      • state.NonlinIneq フィールドと state.NonlinEq フィールドは使用できません。

    • 'done' — 最終状態

追加パラメーターの受け渡し は、関数に追加のパラメータを提供する方法について説明します。

出力関数は、ga に次の引数を返します。

  • state — 現在の世代に関する情報を含む構造体。国家構造state のフィールドについて説明します。反復を停止するには、state.StopFlag'y' などの空でない文字ベクトルに設定します。

  • options — 出力関数によって変更されるオプション。この引数はオプションです。

  • optchangedoptions への変更を示すブールフラグ。後続の反復で options を変更するには、 optchangedtrue に設定します。

国家構造の変更

注意

状態構造を不注意に変更すると、一貫性のない結果や誤った結果が生じる可能性があります。通常、プロット関数または出力関数で状態構造を変更する代わりに、突然変異関数または交差関数を使用することで、同じまたはより優れた状態変更を実現できます。

ga 出力関数は state 構造を変更できます (国家構造 を参照)。この構造体の値を変更するときは、矛盾したデータが ga に返される可能性があるため注意してください。

ヒント

出力構造で Population フィールドが変更された場合は、Score フィールドを更新し、必要に応じて BestNonlinIneq、または NonlinEq フィールドも更新して、一貫した情報が含まれるようにしてください。

Population フィールドを変更した後に Score フィールドを更新するには、まず集団の適応度関数値を計算し、次に集団の適応度スケーリングを計算します。フィットネススケーリングオプションを参照してください。

コマンドウィンドウオプションに表示

'Display' は、遺伝的アルゴリズムの実行中にコマンド ラインに表示される情報の量を指定します。利用可能なオプションは次のとおりです

  • 'final' (デフォルト) — 停止の理由が表示されます。

  • 'off' または同等の 'none' — 出力は表示されません。

  • 'iter' — 反復ごとに情報が表示されます。

  • 'diagnose' — 反復ごとに情報が表示されます。さらに、診断にはいくつかの問題情報とデフォルトから変更されたオプションがリストされます。

'iter''diagnose' は両方とも次の情報を表示します。

  • Generation — 世代番号

  • f-count — 適応度関数評価の累積回数

  • Best f(x) — 最適な適応度関数値

  • Mean f(x) — 平均適応度関数値

  • Stall generations — 適応度関数の最後の改善以降の世代数

非線形制約関数が指定されている場合、'iter''diagnose'Mean f(x) を表示せず、追加で以下を表示します。

  • Max Constraint — 最大非線形制約違反

さらに、'iter''diagnose' は、問題の種類や、ga または gamultiobj が使用している作成、突然変異、交差、選択関数などの問題情報を反復表示の前に表示します。

ベクトル化と並列化オプション (ユーザー関数評価)

適合関数と制約関数をシリアル、並列、またはベクトル化された形式で評価することを選択できます。'UseVectorized' および 'UseParallel' オプションを optimoptions で設定します。

  • 'UseVectorized'false (デフォルト) の場合、ga は集団をループしながら一度に 1 つの個体に対して適応度関数を呼び出します。(これは、'UseParallel' がデフォルト値の false にあることを前提としています。)

  • 'UseVectorized'true の場合、ga は、適応度関数への 1 回の呼び出しで、集団全体に対して適応度関数を一度に呼び出します。

    非線形制約がある場合、アルゴリズムがベクトル化された方法で計算できるように、適合関数と非線形制約をすべてベクトル化する必要があります。

    例については、適応度関数をベクトル化するを参照してください。

  • UseParalleltrue の場合、ga は、確立した並列環境を使用して、適応度関数を並列に呼び出します (Global Optimization Toolbox で並列処理を使用する方法 を参照)。連続して計算するには、UseParallelfalse (デフォルト) に設定します。

メモ

ベクトル化計算と並列計算を同時に使用することはできません。'UseParallel'true に設定し、'UseVectorized'true に設定すると、ga は適応度関数と制約関数を並列ではなくベクトル形式で評価します。

適合度と制約関数の評価方法

 UseVectorized = falseUseVectorized = true
UseParallel = falseシリアルベクトル化
UseParallel = true並列ベクトル化