メインコンテンツ

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

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

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

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' などの空でない文字ベクトルに設定します。

メモ

プロット関数のフレームワークで座標軸が管理されるため、プロット関数は subplot ステートメントをサポートしていません。複数のサブプロットを指定するには、個別のプロット関数を記述し、cell 配列としてソルバーに渡します。

options = optimoptions("solvername",PlotFcn={@plot1,@plot2,@plot3});

出力関数は subplot をサポートするため、プロット関数ではなく出力関数を使用すると、1 つの関数に複数のプロットを含めることができます。

状態構造

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

  • Generation — 現在の世代番号。

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

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

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

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

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

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

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

  • Expectation —個体選択の期待値。Fitness のスケールバージョン。非線形制約関数が 'penalty' の場合、または整数制約がある場合、Expectation はペナルティ関数のスケール バージョンになります。

  • Fitness —母集団の適応度値。Population と同じ行数の列ベクトル。実行不可能な個体については値は評価されず、Inf に設定されます。'augLag' 非線形制約アルゴリズムには存在しません。

  • NonlinIneq — 非線形不等式関数の値 c(x)、つまり Population と同じ行数の行列。このフィールドは、flag'interrupt' でない場合に存在します。

  • NonlinEq — 非線形等式関数の値 ceq(x)、つまり Population と同じ行数の行列。このフィールドは、flag'interrupt' でない場合に存在します。

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

  • Population — 現在の世代の母集団。

  • Score — 現在の母集団のスコア。

  • 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は目標の数である

  • Fitness —母集団の適応度値。長さが Population と同じ列ベクトル。実行不可能な個体については値は評価されず、Inf に設定されます。

  • NonlinIneq — 非線形不等式関数の値 c(x)、つまり Fitness と同じ行数の行列。このフィールドは、flag'interrupt' でない場合に存在します。

  • NonlinEq — 非線形等式関数の値 ceq(x)、つまり Fitness と同じ行数の行列。このフィールドは、flag'interrupt' でない場合に存在します。

  • 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 の要素がある場合、このオプションを使用できます。

    注意

    ビット文字列母集団内の個体は文字列や文字ではなく、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' は、問題に整数制約がある場合の ga および gamultiobj のデフォルトの突然変異関数です。パワー突然変異は、次のようにして親 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 を参照してください。

    クスム ディープ、クリシュナ プラタップ シンシュ、M. L. カンサル、C. モハン。整数および混合整数の最適化問題を解決するための実際のコード化された遺伝的アルゴリズム。応用数学と計算、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' は、親の加重平均を取って子を作成します。重みは、スカラーまたは長さ nvars の行ベクトルである単一のパラメーターratio で指定できます。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 を参照してください。

    クスム ディープ、クリシュナ プラタップ シンシュ、M. L. カンサル、C. モハン。整数および混合整数の最適化問題を解決するための実際のコード化された遺伝的アルゴリズム。応用数学と計算、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 を超える可能性があります。これは、反復回数 のステップ 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(jk) を使用して目標達成問題を実行します。

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

停止基準オプション

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

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

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

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

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

    gamultiobj の場合、MaxStallGenerations におけるパレート解の 広がり の相対的変化の幾何平均が FunctionTolerance より小さく、最終的な広がりが最後の MaxStallGenerations における平均広がりより小さい場合、アルゴリズムは停止します。幾何平均係数は1/2です。広がりはパレート フロントの動きを測る尺度です。gamultiobj アルゴリズムを参照してください。

  • MaxStallTimeMaxStallTime で指定された秒数の間、tictoc で測定された最適適応値に改善が見られない場合、アルゴリズムは停止します。

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

    gamultiobj の場合、MaxStallGenerations におけるパレート解の 広がり の相対的変化の幾何平均が FunctionTolerance より小さく、最終的な広がりが最後の MaxStallGenerations における平均広がりより小さい場合、アルゴリズムは停止します。幾何平均係数は1/2です。広がりはパレート フロントの動きを測る尺度です。gamultiobj アルゴリズムを参照してください。

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

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

出力関数のオプション

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

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

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

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

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

edit gaoutputfcntemplate

MATLAB コマンドラインで。

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

出力関数の構造

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

[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並列ベクトル化