このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
遺伝的アルゴリズムのオプション
遺伝的アルゴリズムのオプション
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)
関数の入力引数は
追加パラメーターの受け渡し は、関数に追加のパラメータを提供する方法について説明します。
出力引数 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'
である場合にのみ存在します。EvalElites
—ga
がエリート個体の適応度関数を評価するかどうかを示す論理値。最初、この値はtrue
です。最初の世代では、エリート個体が以前の値に評価された場合 (これは、適応度関数が決定論的であることを示します)、この値は、後続の反復ではデフォルトでfalse
になります。EvalElites
がfalse
の場合、ga
はエリート個体の適応度関数を再評価しません。出力state.EvalElites
を変更することにより、カスタム プロット関数またはカスタム出力関数でこの動作をオーバーライドできます。HaveDuplicates
—ga
が初期集団に重複する個体を追加するかどうかを示す論理値。ga
は、個体が重複しているか一意であるかを判断するために小さな相対許容値を使用します。HaveDuplicates
がtrue
の場合、ga
は固有の個体を特定し、固有の個体ごとに適応度関数を 1 回だけ評価します。ga
は適応度関数と制約関数の値を複製個体にコピーします。ga
は、すべての個体が固有になるまで、各世代でテストを繰り返します。このテストはn*m*log(m)
回の演算を実行します。ここで、m
は母集団のサイズ、n
はnvars
です。カスタム プロット関数またはカスタム出力関数でこのテストをオーバーライドするには、出力state.HaveDuplicates
をfalse
に設定します。
gamultiobj. プロット、突然変異、および出力関数への入力引数である gamultiobj
の状態構造には、次のフィールドが含まれています。
Population
— 現在の世代の人口Score
— 現在の集団のスコア、Population
行nObjectives
列の行列、nObjectives
は目標の数Generation
— 現在の世代番号StartTime
— 遺伝的アルゴリズムが開始された時刻。tic
によって返されます。StopFlag
— 停止理由、文字ベクトルFunEval
— 関数評価の累積回数Selection
— エリート、クロスオーバー、突然変異のために選択された個体のインデックスRank
— 人口内のメンバーの順位のベクトルDistance
— 集団の各メンバーから最も近い隣接メンバーまでの距離のベクトルAverageDistance
—Distance
の標準偏差 (平均ではありません)Spread
— 各世代における広がりを表すベクトルmIneq
— 非線形不等式制約の数mEq
— 非線形等式制約の数mAll
— 非線形制約の合計数、mAll
=mIneq
+mEq
C
— 現在のポイントでの非線形不等式制約、PopulationSize
行mIneq
列の行列Ceq
— 現在のポイントでの非線形等式制約、PopulationSize
行mEq
列の行列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'
— カスタム人口タイプを示します。この場合、カスタムCrossoverFcn
とMutationFcn
も使用する必要があります。カスタム作成関数または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
のデフォルトの作成関数です。この関数は、無制限のコンポーネントに人工的な境界を適用し、境界内で個体を均一にランダムに生成し、整数制約を適用します。メモ
問題に整数制約がある場合、
ga
とgamultiobj
は、整数制約、境界、およびすべての線形制約が各反復で実行可能であることを強制します。デフォルト以外の突然変異、交差、作成、および選択関数の場合、ga
とgamultiobj
は関数が動作した後に追加の実行可能性ルーチンを適用します。問題に整数制約がある場合、
'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 に比例し、次に適合度の高い個体のスケール スコアは に比例する、というようになります。ランク適合度スケーリングは、生のスコアの広がりの影響を取り除きます。平方根により、順位スコアリングと比較して、順位の低い個人のスコアがほぼ同等になります。詳細については、適応度のスケーリングを参照してください。'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})
NonlinearConstraintAlgorithm
がPenalty
の場合、ga
はサイズ2
の'selectiontournament'
を使用します。メモ
問題に整数制約がある場合、
ga
とgamultiobj
は、整数制約、境界、およびすべての線形制約が各反復で実行可能であることを強制します。デフォルト以外の突然変異、交差、作成、および選択関数の場合、ga
とgamultiobj
は関数が動作した後に追加の実行可能性ルーチンを適用します。関数ハンドルを使用すると、独自の選択関数を記述できます。
options = optimoptions('ga','SelectionFcn',@myfun);
選択関数には次の呼び出し構文が必要です。
function parents = myfun(expectation, nParents, options)
ga
は、入力引数expectation
、nParents
、および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
は、交叉によって生成されるエリートの子供以外の次世代の割合を指定します。CrossoverFraction
を 0
と 1
の間の分数に設定します。既定値は 0.8
です。
例については、変異と交差の変化 の「クロスオーバー分率の設定」を参照してください。
突然変異のオプション
突然変異オプションは、遺伝的アルゴリズムが集団内の個体に小さなランダムな変更を加えて突然変異の子を作成する方法を指定します。突然変異により遺伝的多様性がもたらされ、遺伝的アルゴリズムがより広い空間を探索できるようになります。MutationFcn
オプションで突然変異関数を指定します。
MutationFcn
オプション:
'mutationgaussian'
— 制約のない問題に対するga
のデフォルトの突然変異関数である'mutationgaussian'
は、平均 0 のガウス分布から取得した乱数を親ベクトルの各エントリに追加します。この分布の標準偏差は、パラメータscale
とshrink
、およびInitialPopulationRange
オプションによって決まります。scale
とshrink
を次のように設定します。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は親ベクトルのすべての座標で同じになり、再帰式で与えられます。InitialPopulationRange
を2行nvars
列のベクトルに設定すると、k世代目σi,kの親ベクトルの座標iにおける標準偏差は、再帰式で与えられます。shrink
を1
に設定すると、アルゴリズムは各座標の標準偏差を最後の世代で 0 になるまで線形に縮小します。shrink
の値が負の場合、標準偏差は大きくなります。
scale
とshrink
の両方のデフォルト値は 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 を参照してください。Kusum Deep、Krishna Pratap Singsh、M. L. Kansal、C. Mohan。整数および混合整数の最適化問題を解決するための実際のコード化された遺伝的アルゴリズム。応用数学と計算、212(2009)、505-518。
メモ
問題に整数制約がある場合、
ga
とgamultiobj
は、整数制約、境界、およびすべての線形制約が各反復で実行可能であることを強制します。デフォルト以外の突然変異、交差、作成、および選択関数の場合、ga
とgamultiobj
は関数が動作した後に追加の実行可能性ルーチンを適用します。'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 である遺伝子を選択し、遺伝子を組み合わせて子を形成します。例えば、p1
とp2
が親の場合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 より大きい番号のベクトル エントリを選択します。
これらのエントリを連結して子ベクトルを形成します。
例えば、
p1
とp2
が親の場合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'
は、1
とnvars
の間の 2 つのランダムな整数m
とn
を選択します。この関数は最初の親から
m
以下の番号のベクトルエントリ2番目の親から
m+1
からn
までの番号が付けられたベクトルエントリ最初の親から
n
より大きい番号が付けられたベクトル エントリ。
次に、アルゴリズムはこれらの遺伝子を連結して 1 つの遺伝子を形成します。例えば、
p1
とp2
が親の場合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'
は、次の式を使用してparent1
とparent2
から子を作成します。child = parent1 + rand * Ratio * ( parent2 - parent1)
ratio
のすべてのエントリが [0, 1] の範囲内にある場合、生成される子は、親を反対の頂点に配置することによって定義されたハイパーキューブ内にあります。ratio
がその範囲内にない場合、子要素はハイパーキューブの外側にある可能性があります。ratio
がスカラーの場合、すべての子は親の間の線上にあります。'crossoverlaplace'
は、問題に整数制約がある場合のデフォルトのクロスオーバー関数です。ラプラス交差は、次のいずれかの式 (ランダムに選択) を使用して子を生成します。xOverKid = p1 + bl*abs(p1 – p2)
xOverKid = p2 + bl*abs(p1 – p2)
ここで、
p1
、p2
はxOverKid
の親であり、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});
parent1
とparent2
が親で、parent1
の適応度が優れている場合、関数は子を返します。child = parent2 + ratio * (parent1 - parent2);
注意
問題に線形制約がある場合、
'crossoverheuristic'
は分布が不完全な集団を生成する可能性があります。この場合は、'crossoverintermediate'
などの別のクロスオーバー関数を使用します。'crossoverarithmetic'
は、2 つの親の加重算術平均である子を作成します。子は線形制約と境界に関して常に実行可能です。メモ
問題に整数制約がある場合、
ga
とgamultiobj
は、整数制約、境界、およびすべての線形制約が各反復で実行可能であることを強制します。デフォルト以外の突然変異、交差、作成、および選択関数の場合、ga
とgamultiobj
は関数が動作した後に追加の実行可能性ルーチンを適用します。関数ハンドルを使用すると、独自のクロスオーバー関数を記述できます。
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
をベクトルに設定したり、MigrationDirection
、MigrationInterval
、または MigrationFraction
オプションを設定したりしても利点はありません。
移行オプションは、個体がサブポピュレーション間でどのように移動するかを指定します。PopulationSize
を長さが 1 より大きいベクトルに設定すると、移行が発生します。移住が発生すると、ある集団の最も優れた個体が別の集団の最も劣った個体に取って代わります。ある集団から別の集団に移動する個体は複製されます。これらはソースサブポピュレーションから削除されません。
次の 3 つのオプションによって移行の実行方法を制御できます。
MigrationDirection
— 移行は一方向または双方向で実行できます。MigrationDirection
を'forward'
に設定すると、最後のサブポピュレーションに向かって移行が行われます。つまり、n 番目のサブポピュレーションは (n+1) 番目のサブポピュレーションに移行します。MigrationDirection
を'both'
に設定すると、n番目のサブポピュレーションは (n –1) 番目と (n+1) 番目のサブポピュレーションの両方に移行します。
移行はサブポピュレーションの端で終了します。つまり、最後のサブポピュレーションが最初のサブポピュレーションに移行し、最初のサブポピュレーションが最後のサブポピュレーションに移行する可能性があります。
MigrationInterval
— 移行間で何世代経過するかを指定します。たとえば、MigrationInterval
を20
に設定すると、移行は 20 世代ごとに行われます。MigrationFraction
— サブポピュレーション間で移動する個体の数を指定します。MigrationFraction
は、移動する 2 つのサブポピュレーションのうち小さい方の割合を指定します。たとえば、個体が 50 個体のサブポピュレーションから 100 個体のサブポピュレーションに移行し、MigrationFraction
を0.1
に設定すると、移行する個体の数は 0.1*50=5 になります。
制約パラメータ
制約パラメータは、非線形制約ソルバーを参照します。アルゴリズムの詳細については、遺伝的アルゴリズムのための非線形制約ソルバーアルゴリズム を参照してください。
NonlinearConstraintAlgorithm
オプションを 'auglag'
(拡張ラグランジアン) または 'penalty'
(ペナルティ アルゴリズム) に設定して、非線形制約アルゴリズムを選択します。
拡張ラグランジュ遺伝的アルゴリズム
InitialPenalty
— 非線形制約アルゴリズムで使用されるペナルティ パラメーターの初期値を指定します。InitialPenalty
は1
以上である必要があり、既定値は10
です。PenaltyFactor
— 問題が必要な精度で解決されず、制約が満たされない場合にペナルティ パラメータを増やします。PenaltyFactor
は1
よりも大きい必要があり、デフォルトは100
です。
ペナルティアルゴリズム
ペナルティ アルゴリズムは、デフォルトで 'gacreationnonlinearfeasible'
作成関数を使用します。この作成関数は、fmincon
を使用して実行可能な個体を検索します。'gacreationnonlinearfeasible'
は、InitialPopulationRange
オプションの範囲内のさまざまな初期ポイントから fmincon
を開始します。オプションで、'gacreationnonlinearfeasible'
は初期ポイントで fmincon
を並列に実行できます。
メモ
'gacreationnonlinearfeasible'
は常に実現可能な集団を作成するわけではありません。
次の名前と値のペアを使用して、'gacreationnonlinearfeasible'
のチューニング パラメータを指定できます。
名前 | 値 |
---|---|
SolverOpts | fmincon オプションは、optimoptions または optimset を使用して作成されます。 |
UseParallel | true の場合、初期ポイントで 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
を使用し、fmincon
、patternsearch
、fminunc
の場合は optimoptions
を使用します。以下に例を示します。
hybridopts = optimoptions('fminunc','Display','iter',... 'Algorithm','quasi-newton');
options
にハイブリッド オプションを含めます。options = optimoptions('ga',options,'HybridFcn',{@fminunc,hybridopts});
options
を設定する前に hybridopts
が存在している必要があります。例については、遺伝的アルゴリズムにおけるハイブリッド方式を参照してください。ハイブリッド関数を使用する場合を参照してください。
gamultiobj
ハイブリッド機能
ハイブリッド関数は、多目的遺伝的アルゴリズムが終了した後に実行される別の最小化関数です。HybridFcn
オプションでハイブリッド関数 'fgoalattain'
を指定できます。
多目的ハイブリッド関数として使用する場合、ソルバーは次の処理を実行します。
各目的関数の解における最大値と最小値を計算します。目的jの解kについて、
各解kにおける総重量を計算します。
各解kにおける各目的関数jの重みを計算する。
各ソリューション k に対して、目標ベクトル Fk(j) と重みベクトル p(j,k) を使用して目標達成問題を実行します。
詳細については、Deb [3] のセクション 9.6 を参照してください。
停止基準オプション
停止基準は、アルゴリズムを終了する原因を決定します。次のオプションを指定できます。
MaxGenerations
— 遺伝的アルゴリズムが実行する反復の最大回数を指定します。既定値は100*numberOfVariables
です。MaxTime
—tic
とtoc
で測定される、遺伝的アルゴリズムが停止するまでの最大実行時間を秒単位で指定します。この制限は各反復の後に適用されるため、反復にかなりの時間がかかる場合はga
が制限を超える可能性があります。FitnessLimit
— 最適な適合値がFitnessLimit
の値以下の場合、アルゴリズムは停止します。gamultiobj
には適用されません。MaxStallGenerations
—MaxStallGenerations
における最良適合度関数値の平均相対変化がFunctionTolerance
以下になった場合、アルゴリズムは停止します。(StallTest
オプションが'geometricWeighted'
の場合、テストは 幾何加重 平均相対変化を対象とします。)非線形制約のある問題の場合、MaxStallGenerations
がサブ問題に適用されます (遺伝的アルゴリズムのための非線形制約ソルバーアルゴリズム を参照)。gamultiobj
の場合、MaxStallGenerations
にわたるパレート解の 広がり の相対的変化の幾何平均がFunctionTolerance
より小さく、最終的な広がりが最後のMaxStallGenerations
にわたる平均広がりより小さい場合、アルゴリズムは停止します。幾何平均係数は½です。スプレッドはパレート最前線の動きを測る尺度です。gamultiobj アルゴリズムを参照してください。MaxStallTime
—MaxStallTime
で指定された時間間隔 (tic
とtoc
で測定) 中に最良適合値に改善が見られない場合、アルゴリズムは停止します。FunctionTolerance
—MaxStallGenerations
における最良適合度関数値の平均相対変化がFunctionTolerance
以下になった場合、アルゴリズムは停止します。(StallTest
オプションが'geometricWeighted'
の場合、テストは 幾何加重 平均相対変化を対象とします。)gamultiobj
の場合、MaxStallGenerations
にわたるパレート解の 広がり の相対的変化の幾何平均がFunctionTolerance
より小さく、最終的な広がりが最後のMaxStallGenerations
にわたる平均広がりより小さい場合、アルゴリズムは停止します。幾何平均係数は½です。スプレッドはパレート最前線の動きを測る尺度です。gamultiobj アルゴリズムを参照してください。ConstraintTolerance
—ConstraintTolerance
は停止基準として使用されません。非線形制約に関する実現可能性を判断するために使用されます。また、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 は options
、state
、flag
データを出力関数に渡し、出力関数は state
、options
、optchanged
データを返します。
メモ
反復を停止するには、state.StopFlag
を 'y'
などの空でない文字ベクトルに設定します。
出力関数には次の入力引数があります。
options
— オプションstate
— 現在の世代に関する情報を含む構造体。国家構造 はstate
のフィールドについて説明します。flag
— アルゴリズムの現在のステータス:'init'
— 初期化状態'iter'
— 反復状態'interrupt'
—'auglag'
非線形制約アルゴリズムの非線形制約問題の部分問題の反復。flag
が'interrupt'
である場合、次のようになります。state
フィールドの値は、サブ問題の反復に適用されます。ga
はoptions
の変更を受け入れず、optchanged
を無視します。state.NonlinIneq
フィールドとstate.NonlinEq
フィールドは使用できません。
'done'
— 最終状態
追加パラメーターの受け渡し は、関数に追加のパラメータを提供する方法について説明します。
出力関数は、ga
に次の引数を返します。
state
— 現在の世代に関する情報を含む構造体。国家構造 はstate
のフィールドについて説明します。反復を停止するには、state.StopFlag
を'y'
などの空でない文字ベクトルに設定します。options
— 出力関数によって変更されるオプション。この引数はオプションです。optchanged
—options
への変更を示すブールフラグ。後続の反復でoptions
を変更するには、optchanged
をtrue
に設定します。
国家構造の変更
注意
状態構造を不注意に変更すると、一貫性のない結果や誤った結果が生じる可能性があります。通常、プロット関数または出力関数で状態構造を変更する代わりに、突然変異関数または交差関数を使用することで、同じまたはより優れた状態変更を実現できます。
ga
出力関数は state
構造を変更できます (国家構造 を参照)。この構造体の値を変更するときは、矛盾したデータが ga
に返される可能性があるため注意してください。
ヒント
出力構造で Population
フィールドが変更された場合は、Score
フィールドを更新し、必要に応じて Best
、NonlinIneq
、または 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 回の呼び出しで、集団全体に対して適応度関数を一度に呼び出します。非線形制約がある場合、アルゴリズムがベクトル化された方法で計算できるように、適合関数と非線形制約をすべてベクトル化する必要があります。
例については、適応度関数をベクトル化するを参照してください。
UseParallel
がtrue
の場合、ga
は、確立した並列環境を使用して、適応度関数を並列に呼び出します (Global Optimization Toolbox で並列処理を使用する方法 を参照)。連続して計算するには、UseParallel
をfalse
(デフォルト) に設定します。
メモ
ベクトル化計算と並列計算を同時に使用することはできません。'UseParallel'
を true
に設定し、'UseVectorized'
を true
に設定すると、ga
は適応度関数と制約関数を並列ではなくベクトル形式で評価します。
適合度と制約関数の評価方法
UseVectorized = false | UseVectorized = true | |
---|---|---|
UseParallel = false | シリアル | ベクトル化 |
UseParallel = true | 並列 | ベクトル化 |