このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。
ga
遺伝的アルゴリズムを使用して関数の最小値を見つける
構文
説明
は、目的関数 x
= ga(fun
,nvars
)fun
の局所的な制約なし最小値 x
を見つけます。nvars
は fun
の次元 (設計変数の数) です。
メモ
追加パラメーターの受け渡し は、必要に応じて他のパラメーターを目的関数と非線形制約関数に渡す方法を説明します。
例
ga
を使用して非滑らかな関数を最適化する
この例を実行すると、ps_example.m
ファイルが含まれます。関数をプロットします。
xi = linspace(-6,2,300); yi = linspace(-4,4,300); [X,Y] = meshgrid(xi,yi); Z = ps_example([X(:),Y(:)]); Z = reshape(Z,size(X)); surf(X,Y,Z,'MeshStyle','none') colormap 'jet' view(-26,43) xlabel('x(1)') ylabel('x(2)') title('ps\_example(x)')
ga
を使用してこの関数の最小値を見つけます。
rng default % For reproducibility x = ga(@ps_example,2)
ga stopped because the average change in the fitness value is less than options.FunctionTolerance.
x = 1×2
-4.6793 -0.0860
線形制約付きの非滑らかな関数を最小化する
遺伝的アルゴリズムを使用して、領域 x(1) + x(2) >= 1
と x(2) <= 5 + x(1)
上の ps_example
関数を最小化します。この関数は、この例を実行するときに含まれます。
まず、2 つの不等式制約を行列形式 A*x <= b
に変換します。言い換えると、不等式の左側にある x
変数を取得し、両方の不等式を以下になるようにします。
-x(1) -x(2) <= -1
-x(1) + x(2) <= 5
A = [-1,-1; -1,1]; b = [-1;5];
ga
を使用して制約問題を解きます。
rng default % For reproducibility fun = @ps_example; x = ga(fun,2,A,b)
ga stopped because the average change in the fitness value is less than options.FunctionTolerance.
x = 1×2
0.9990 0.0000
制約は、制約許容値のデフォルト値 1e-3
内で満たされます。これを確認するには、負の成分を持つ A*x' - b
を計算します。
disp(A*x' - b)
0.0010 -5.9990
線形等式および不等式制約を使用して非滑らかな関数を最小化する
遺伝的アルゴリズムを使用して、領域 x(1) + x(2) >= 1
と x(2) == 5 + x(1)
上の ps_example
関数を最小化します。この関数は、この例を実行するときに含まれます。
まず、2 つの制約を行列形式 A*x <= b
と Aeq*x = beq
に変換します。つまり、式の左側にある x
変数を取得し、不等式を以下という形式にします。
-x(1) -x(2) <= -1
-x(1) + x(2) == 5
A = [-1 -1]; b = -1; Aeq = [-1 1]; beq = 5;
ga
を使用して制約問題を解きます。
rng default % For reproducibility fun = @ps_example; x = ga(fun,2,A,b,Aeq,beq)
ga stopped because the average change in the fitness value is less than options.FunctionTolerance.
x = 1×2
-2.0005 2.9995
制約がデフォルト値 ConstraintTolerance
、1e-3
内で満たされていることを確認します。
disp(A*x' - b)
1.0000e-03
disp(Aeq*x' - beq)
8.5897e-09
線形制約と境界による最適化
遺伝的アルゴリズムを使用して、領域 x(1) + x(2) >= 1
と x(2) == 5 + x(1)
上の ps_example
関数を最小化します。この例を実行すると、ps_example
関数が含まれます。さらに、境界 1 <= x(1) <= 6
と -3 <= x(2) <= 8
を設定します。
まず、2 つの線形制約を行列形式 A*x <= b
と Aeq*x = beq
に変換します。つまり、式の左側にある x
変数を取得し、不等式を以下という形式にします。
-x(1) -x(2) <= -1
-x(1) + x(2) == 5
A = [-1 -1]; b = -1; Aeq = [-1 1]; beq = 5;
境界 lb
と ub
を設定します。
lb = [1 -3]; ub = [6 8];
ga
を使用して制約問題を解きます。
rng default % For reproducibility fun = @ps_example; x = ga(fun,2,A,b,Aeq,beq,lb,ub)
ga stopped because the average change in the fitness value is less than options.FunctionTolerance.
x = 1×2
1.0000 6.0000
線形制約がデフォルト値 ConstraintTolerance
、1e-3
内で満たされていることを確認します。
disp(A*x' - b)
-6.0000
disp(Aeq*x' - beq)
-7.9765e-08
ga
を使用して非線形制約を最適化する
遺伝的アルゴリズムを使用して、領域 と 上の ps_example
関数を最小化します。この例を実行すると、ps_example
関数が含まれます。
これを行うには、最初の出力 c
に不等式制約を返し、2 番目の出力 ceq
に等式制約を返す関数 ellipsecons.m
を使用します。この例を実行すると、ellipsecons
関数が含まれます。ellipsecons
コードを調べます。
type ellipsecons
function [c,ceq] = ellipsecons(x) c = 2*x(1)^2 + x(2)^2 - 3; ceq = (x(1)+1)^2 - (x(2)/2)^4;
nonlcon
引数として ellipsecons
への関数ハンドルを含めます。
nonlcon = @ellipsecons; fun = @ps_example; rng default % For reproducibility x = ga(fun,2,[],[],[],[],[],[],nonlcon)
Optimization finished: average change in the fitness value less than options.FunctionTolerance and constraint violation is less than options.ConstraintTolerance.
x = 1×2
-0.9766 0.0362
x
で非線形制約が満たされていることを確認します。制約は、c
≤ 0 かつ ceq
= 0 で、ConstraintTolerance
、1e-3
のデフォルト値の範囲内である場合に満たされます。
[c,ceq] = nonlcon(x)
c = -1.0911
ceq = 5.4645e-04
デフォルト以外のオプションで最小化
遺伝的アルゴリズムを使用して、デフォルトよりも小さい制約許容値を使用して、領域 x(1) + x(2) >= 1
および x(2) == 5 + x(1)
上の ps_example
関数を最小化します。この例を実行すると、ps_example
関数が含まれます。
まず、2 つの制約を行列形式 A*x <= b
と Aeq*x = beq
に変換します。つまり、式の左側にある x
変数を取得し、不等式を以下という形式にします。
-x(1) -x(2) <= -1
-x(1) + x(2) == 5
A = [-1 -1]; b = -1; Aeq = [-1 1]; beq = 5;
より正確なソリューションを得るには、制約許容値を 1e-6
に設定します。ソルバーの進行状況を監視するには、プロット関数を設定します。
options = optimoptions('ga','ConstraintTolerance',1e-6,'PlotFcn', @gaplotbestf);
最小化問題を解きます。
rng default % For reproducibility fun = @ps_example; x = ga(fun,2,A,b,Aeq,beq,[],[],[],options)
ga stopped because the average change in the fitness value is less than options.FunctionTolerance.
x = 1×2
-2.0000 3.0000
線形制約が 1e-6
以内で満たされていることを確認します。
disp(A*x' - b)
9.9809e-07
disp(Aeq*x' - beq)
-7.3589e-08
整数制約付きの非線形関数を最小化する
遺伝的アルゴリズムを使用して、x(1)
が整数であるという制約の下で ps_example
関数を最小化します。この関数は、この例を実行するときに含まれます。
intcon = 1; rng default % For reproducibility fun = @ps_example; A = []; b = []; Aeq = []; beq = []; lb = []; ub = []; nonlcon = []; x = ga(fun,2,A,b,Aeq,beq,lb,ub,nonlcon,intcon)
ga stopped because the average change in the penalty function value is less than options.FunctionTolerance and the constraint violation is less than options.ConstraintTolerance.
x = 1×2
-5.0000 -0.0834
解と関数値を取得する
遺伝的アルゴリズムを使用して、整数制約の非線形問題を最小化します。最小値の位置と最小関数値の両方を取得します。この例を実行すると、目的関数 ps_example
が含まれます。
intcon = 1; rng default % For reproducibility fun = @ps_example; A = []; b = []; Aeq = []; beq = []; lb = []; ub = []; nonlcon = []; [x,fval] = ga(fun,2,A,b,Aeq,beq,lb,ub,nonlcon,intcon)
ga stopped because the average change in the penalty function value is less than options.FunctionTolerance and the constraint violation is less than options.ConstraintTolerance.
x = 1×2
-5.0000 -0.0834
fval = -1.8344
この結果を制約のない問題の解決と比較します。
[x,fval] = ga(fun,2)
ga stopped because the average change in the fitness value is less than options.FunctionTolerance.
x = 1×2
-4.6906 -0.0078
fval = -1.9918
診断情報を取得する
遺伝的アルゴリズムを使用して、x(1)
が整数値になるように制約された ps_example
関数を最小化します。この例を実行すると、ps_example
関数が含まれます。ソルバーが停止した理由と ga
が最小値をどのように検索したかを理解するには、exitflag
と output
の結果を取得します。また、ソルバーが進行するにつれて、観測された目的関数の最小値をプロットします。
intcon = 1; rng default % For reproducibility fun = @ps_example; A = []; b = []; Aeq = []; beq = []; lb = []; ub = []; nonlcon = []; options = optimoptions('ga','PlotFcn', @gaplotbestf); [x,fval,exitflag,output] = ga(fun,2,A,b,Aeq,beq,lb,ub,nonlcon,intcon,options)
ga stopped because the average change in the penalty function value is less than options.FunctionTolerance and the constraint violation is less than options.ConstraintTolerance.
x = 1×2
-5.0000 -0.0834
fval = -1.8344
exitflag = 1
output = struct with fields:
problemtype: 'integerconstraints'
rngstate: [1x1 struct]
generations: 86
funccount: 3311
message: 'ga stopped because the average change in the penalty function value is less than options.FunctionTolerance and ...'
maxconstraint: 0
hybridflag: []
最終的な人口とスコアを取得する
遺伝的アルゴリズムを使用して、x(1)
が整数値になるように制約された ps_example
関数を最小化します。この例を実行すると、ps_example
関数が含まれます。最終的な母集団とスコアのベクトルを含むすべての出力を取得します。
intcon = 1; rng default % For reproducibility fun = @ps_example; A = []; b = []; Aeq = []; beq = []; lb = []; ub = []; nonlcon = []; [x,fval,exitflag,output,population,scores] = ga(fun,2,A,b,Aeq,beq,lb,ub,nonlcon,intcon);
ga stopped because the average change in the penalty function value is less than options.FunctionTolerance and the constraint violation is less than options.ConstraintTolerance.
最終的な集団の最初の 10 人のメンバーとそれに対応するスコアを調べます。これらすべての集団メンバーについて、x(1)
は整数値であることに注意してください。整数 ga
アルゴリズムは、整数実行可能な集団のみを生成します。
disp(population(1:10,:))
1.0e+03 * -0.0050 -0.0001 -0.0050 -0.0001 -1.6420 0.0027 -1.5070 0.0010 -0.4540 0.0104 -0.2530 -0.0011 -0.1210 -0.0003 -0.1040 0.1314 -0.0140 -0.0010 0.0160 -0.0002
disp(scores(1:10))
1.0e+06 * -0.0000 -0.0000 2.6798 2.2560 0.2016 0.0615 0.0135 0.0099 0.0001 0.0000
入力引数
fun
— 目的関数
関数ハンドル | 関数名
関数ハンドルまたは関数名として指定される目的関数。長さ nvars
の行ベクトルを受け入れ、スカラー値を返す目的関数を記述します。
'UseVectorized'
オプションが true
の場合、pop
行 nvars
列の行列を受け入れるには fun
と記述します。ここで、pop
は現在の人口サイズです。この場合、fun
は、フィットネス関数の値を含む pop
と同じ長さのベクトルを返します。ga
はベクトル化された計算でも集団の単一のメンバーを渡すことができるため、fun
が pop
に対して特定のサイズを想定していないことを確認してください。
例: fun = @(x)(x-[4,2]).^2
データ型: char
| function_handle
| string
nvars
— 変数の数
正の整数
A
— 線形不等式制約
実数行列
線形不等式制約。実数行列として指定されます。A
は M
行 nvars
列の行列で、M
は不等式の数です。
A
は M
個の線形不等式を符号化します。
A*x <= b
,
ここで、x
は nvars
個の変数 x(:)
の列ベクトル、b
は M
個の要素をもつ列ベクトルです。
例えば、
x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,
次の制約を与えます:
A = [1,2;3,4;5,6]; b = [10;20;30];
例: 制御変数の合計が 1 以下になるように指定するには、制約 A = ones(1,N)
と b = 1
を指定します。
データ型: double
b
— 線形不等式制約
実数ベクトル
実数ベクトルで指定される線形不等式制約です。b
は、行列 A
に関連する M
要素ベクトルです。b
を行ベクトルとして渡す場合、ソルバーは b
を列ベクトル b(:)
に内部的に変換します。
b
は M
個の線形不等式を符号化します。
A*x <= b
,
ここで、x
は N
個の変数 x(:)
の列ベクトル、A
は M
行 N
列の行列です。
例えば、
x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,
次の制約を与えます:
A = [1,2;3,4;5,6]; b = [10;20;30];
例: 制御変数の合計が 1 以下になるように指定するには、制約 A = ones(1,N)
と b = 1
を指定します。
データ型: double
Aeq
— 線形等式制約
実数行列
線形等式制約。実数行列として指定されます。Aeq
は Me
行 nvars
列の行列で、Me
は等式の数です。
Aeq
は Me
個の線形等式を符号化します。
Aeq*x = beq
,
ここで、x
は N
個の変数 x(:)
の列ベクトル、beq
は Me
個の要素をもつ列ベクトルです。
例えば、
x1 + 2 x2 + 3 x3 = 10
2 x1 + 4 x2 + x3 = 20,
次の制約を与えます:
Aeq = [1,2,3;2,4,1]; beq = [10;20];
例: 制御変数の合計が 1 になるように指定するには、制約 Aeq = ones(1,N)
と beq = 1
を指定します。
データ型: double
beq
— 線形等式制約
実数ベクトル
実数ベクトルで指定される線形等式制約です。beq
は、行列 Aeq
に関連する Me
要素ベクトルです。beq
を行ベクトルとして渡す場合、ソルバーは beq
を列ベクトル beq(:)
に内部的に変換します。
beq
は Me
個の線形等式を符号化します。
Aeq*x = beq
,
ここで、x
は N
個の変数 x(:)
の列ベクトル、Aeq
は Meq
行 N
列の行列です。
例えば、
x1 + 2 x2 + 3 x3 = 10
2 x1 + 4 x2 + x3 = 20,
次の制約を与えます:
Aeq = [1,2,3;2,4,1]; beq = [10;20];
例: 制御変数の合計が 1 になるように指定するには、制約 Aeq = ones(1,N)
と beq = 1
を指定します。
データ型: double
lb
— 下限
[]
(既定値) | 実数ベクトルまたは配列
下限。実数ベクトルまたは倍精度浮動小数点配列として指定します。lb
は、 lb
≤ x
≤ ub
内の要素ごとの下限を表します。
ga
は配列 lb
をベクトル lb(:)
に内部的に変換します。
例: lb = [0;-Inf;4]
は x(1) ≥ 0
, x(3) ≥ 4
を意味します。
データ型: double
ub
— 上限
[]
(既定値) | 実数ベクトルまたは配列
上限は、実数ベクトルまたは倍精度浮動小数点数の配列として指定されます。ub
は、 lb
≤ x
≤ ub
内の要素ごとの上限を表します。
ga
は配列 ub
をベクトル ub(:)
に内部的に変換します。
例: ub = [Inf;4;10]
は x(2) ≤ 4
, x(3) ≤ 10
を意味します。
データ型: double
nonlcon
— 非線形制約
関数ハンドル | 関数名
非線形制約。関数ハンドルまたは関数名として指定されます。nonlcon
は、ベクトルまたは配列 x
を受け、2 つの配列 c(x)
および ceq(x)
を返す関数です。
c(x)
は、x
での非線形不等式制約の配列です。ga
は次の条件を満たそうとします。c(x) <= 0
c
のすべてのエントリについて。ceq(x)
は、x
での非線形等式制約の配列です。ga
は次の条件を満たそうとします。ceq(x) = 0
ceq
のすべてのエントリについて。
以下に例を示します。
x = ga(@myfun,4,A,b,Aeq,beq,lb,ub,@mycon)
ここで mycon
は次のような MATLAB® 関数です。
function [c,ceq] = mycon(x) c = ... % Compute nonlinear inequalities at x. ceq = ... % Compute nonlinear equalities at x.
ベクトル化された制約の使用方法については、ベクトル化された制約 を参照してください。
メモ
ga
は、 PopulationType
オプションが 'bitString'
または 'custom'
に設定されている場合、非線形制約を満たすことを強制しません。
intcon
が空でない場合、nonlcon
の 2 番目の出力 (ceq
) は空のエントリ ([]
) である必要があります。
ga
が nonlcon
を使用する方法については、遺伝的アルゴリズムのための非線形制約ソルバーアルゴリズム を参照してください。
データ型: char
| function_handle
| string
options
— 最適化オプション
optimoptions
の出力 | 構造体
最適化オプション。optimoptions
の出力または構造体として指定されます。
optimoptions
は、斜体 でリストされているオプションを非表示にします。optimoptions で非表示になっているオプションを参照してください。
{}
内の値はデフォルト値を示します。{}*
は線形制約がある場合のデフォルトを表し、MutationFcn
は境界がある場合のデフォルトを表します。I* は整数制約のデフォルトを示すか、整数制約に関する特別な考慮事項を示します。
NM は、オプションが
gamultiobj
には適用されないことを示します。
ga
と gamultiobj
のオプション
オプション | 説明 | 値 |
---|---|---|
ConstraintTolerance | 非線形制約に関する実現可能性を決定します。また、 オプション構造の場合は、 | 非負のスカラー | |
| 初期集団を作成する関数。組み込み作成関数または関数ハンドルの名前として指定します。人口オプションを参照してください。 |
|
| アルゴリズムが交差子を作成するために使用する関数。組み込みクロスオーバー関数または関数ハンドルの名前として指定します。クロスオーバーオプションを参照してください。 |
|
| 交差関数によって生成される、エリートの子供を除く次世代の人口の割合。 | 非負のスカラー | |
| 表示レベル。 |
|
| 個体間の距離の尺度を計算する関数。組み込みの距離測定関数または関数ハンドルの名前として指定します。値は、決定変数または設計空間 (遺伝子型) または機能空間 (表現型) に適用されます。デフォルトの オプション構造体の場合は、名前ではなく関数ハンドルを使用します。 |
|
| NM 現在の世代の何個体が次の世代まで生き残ることが保証されているかを指定する正の整数。 | 非負整数 | |
| NM 適合関数が | スカラー | |
| 適応度関数の値をスケーリングする関数。組み込みスケーリング関数または関数ハンドルの名前として指定します。 |
|
FunctionTolerance |
オプション構造の場合は、 | 非負のスカラー | |
| I* または、ハイブリッド関数とそのオプションを指定するセル配列。ga ハイブリッド機能を参照してください。
問題に整数制約がある場合は、ハイブリッド関数は使用できません。 ハイブリッド関数を使用する場合を参照してください。 | 関数名またはハンドル | または 1行2列のセル配列 | |
InitialPenalty | NM I* ペナルティパラメータの初期値 | 正のスカラー | |
| 遺伝的アルゴリズムのシードに使用される初期集団。最大 オプション構造の場合は、 | マトリックス | |
| 初期集団内の個体の範囲を指定する行列またはベクトル。 オプション構造の場合は、 | 行列またはベクトル | |
| 適応度を判断するために使用される初期スコア。最大 オプション構造の場合は、 | 単一目的の列ベクトル | 多目的の行列 | |
| アルゴリズムが停止するまでの最大反復回数。 オプション構造の場合は、 | 非負整数 | |
|
オプション構造の場合は、 | 非負の整数 | |
| NM オプション構造の場合は、 | 正のスカラー |
| アルゴリズムは、 オプション構造の場合は、 | 非負のスカラー | |
MigrationDirection | 移行の方向。移行オプションを参照してください。 |
|
MigrationFraction | 各サブ集団内で別のサブ集団に移動する個体の割合を指定する 0 から 1 までのスカラー。移行オプションを参照してください。 | スカラー | |
MigrationInterval | 個体がサブポピュレーション間で移動する間に発生する世代数を指定する正の整数。移行オプションを参照してください。 | 正の整数 | |
| 突然変異の子を生成する関数。組み込みのミューテーション関数または関数ハンドルの名前として指定します。突然変異のオプションを参照してください。 | 制約なしの |
| 非線形制約アルゴリズム。遺伝的アルゴリズムのための非線形制約ソルバーアルゴリズムを参照してください。 オプション構造の場合は、 |
|
|
オプション構造の場合は、 | 関数ハンドルまたは関数ハンドルのセル配列 | |
|
| スカラー | |
PenaltyFactor | NM I* ペナルティ更新パラメータ。 | 正のスカラー | |
| アルゴリズムによって計算されたデータをプロットする関数。組み込みのプロット関数の名前、関数ハンドル、または組み込みの名前または関数ハンドルのセル配列として指定します。プロット オプションを参照してください。 オプション構造の場合は、 |
|
PlotInterval | プロット関数の連続呼び出し間の世代数を指定する正の整数。 | 正の整数 | |
| 人口の規模。 | 正の整数 | |
| 人口のデータ型。混合整数問題の場合は |
|
| 交差および突然変異の子の親を選択する関数。組み込み選択関数または関数ハンドルの名前として指定します。
|
|
StallTest | NM テストタイプを停止します。 |
|
UseParallel | 適応度と非線形制約関数を並列に計算します。ベクトル化と並列化オプション (ユーザー関数評価)およびGlobal Optimization Toolbox で並列処理を使用する方法を参照してください。 |
|
| 関数がベクトル化されるかどうかを指定します。ベクトル化と並列化オプション (ユーザー関数評価)および適応度関数をベクトル化するを参照してください。 オプション構造の場合は、値 |
|
例: optimoptions('ga','PlotFcn',@gaplotbestf)
intcon
— 整数変数
正の整数のベクトル
整数変数。1
から nvars
までの値を取る正の整数のベクトルとして指定されます。intcon
の各値は、整数値の x
コンポーネントを表します。
メモ
intcon
が空でない場合、 nonlcon
は ceq
に対して空を返す必要があります。整数計画法の詳細については、混合整数 ga 最適化 を参照してください。
例: x
の偶数エントリが整数値であることを指定するには、intcon
を2:2:nvars
に設定します。
データ型: double
problem
— 問題の説明
構造体
問題の説明。これらのフィールドを含む構造体として指定されます。
fitnessfcn | フィットネス関数 |
nvars | 設計変数の数 |
Aineq | 線形不等式制約の |
Bineq | 線形不等式制約の |
Aeq | 線形等式制約の |
Beq | 線形等式制約の |
lb |
|
ub |
|
nonlcon | 非線形制約関数 |
intcon | 整数変数のインデックス |
rngstate | 乱数ジェネレータの状態をリセットするフィールド |
solver |
|
options |
|
フィールド fitnessfcn
、nvars
、options
を指定する必要があります。残りは ga
ではオプションです。
データ型: struct
出力引数
x
— 解
実数ベクトル
解は実数ベクトルとして返されます。x
は、ga
が反復中に特定した最適なポイントです。
fval
— 解での目的関数値
実数
解での目的関数値。実数として返されます。一般的に、fval
= fun(x)
になります。
exitflag
— ga
の停止理由
整数
ga
が停止した理由が整数として返されます。
終了フラグ | 意味 |
---|---|
1 | "非線形制約なし" — |
"非線形制約あり" — 相補性測度 (相補性測度を参照) の大きさが | |
3 | 適応度関数の値が |
4 | ステップの大きさはマシン精度よりも小さく、制約違反は |
5 | 適応度の下限 |
0 | 世代 |
-1 | 出力関数またはプロット関数によって最適化が停止したことを示します。 |
-2 | 実行可能点が検出されませんでした。 |
-4 | 停滞時間制限 |
-5 | 制限時間 |
整数制約がある場合、ga
は停止基準として適合度値ではなくペナルティ適合度値を使用します。
output
— 最適化プロセスに関する情報
構造体
最適化プロセスに関する情報。次のフィールドをもつ構造体として返されます。
problemtype
— 問題の種類。次のいずれかです:'unconstrained'
'boundconstraints'
'linearconstraints'
'nonlinearconstr'
'integerconstraints'
rngstate
— アルゴリズムが開始する直前の MATLAB 乱数ジェネレーターの状態。rngstate
の値を使用して、ga
の出力を再現できます。結果を再現するを参照してください。generations
— 計算された世代数。funccount
— 適応度関数の評価回数。message
— アルゴリズムが終了した理由。maxconstraint
— 最大制約違反(ある場合)。hybridflag
— ハイブリッド関数からの終了フラグ。HybridFcn
options
に関連します。gamultiobj
には適用されません。
population
— 最終人口
行列
最終的な人口は、PopulationSize
行 nvars
列の行列として返されます。population
の行は個体です。
scores
— 最終スコア
列ベクトル
最終スコアは列ベクトルとして返されます。
非整数問題の場合、最終スコアは
population
の行の適合関数値になります。整数問題の場合、最終スコアは集団メンバーのペナルティ適合値になります。整数gaアルゴリズムを参照してください。
詳細
相補性測度
拡張ラグランジュ非線形制約ソルバーでは、相補性尺度は、要素が ciλi であるベクトルのノルムです。ここで、ci は非線形不等式制約違反であり、λi は対応するラグランジュ乗数です。拡張ラグランジュ遺伝的アルゴリズムを参照してください。
ヒント
ga
によって呼び出すことができる独立変数に追加のパラメータを持つ関数を記述するには、追加パラメーターの受け渡し を参照してください。人口タイプ
Double Vector
(デフォルト) を使用する問題の場合、ga
は入力がタイプcomplex
である関数を受け入れません。複雑なデータを含む問題を解決するには、実数部と虚数部を分離して、実数ベクトルを受け入れるように関数を記述します。
アルゴリズム
遺伝的アルゴリズムの説明については、遺伝的アルゴリズムの仕組み を参照してください。
混合整数計画アルゴリズムの説明については、整数gaアルゴリズム を参照してください。
非線形制約アルゴリズムの説明については、遺伝的アルゴリズムのための非線形制約ソルバーアルゴリズム を参照してください。
代替機能
アプリ
[最適化] ライブ エディター タスクが ga
にビジュアル インターフェイスを提供します。
参照
[1] Goldberg, David E., Genetic Algorithms in Search, Optimization & Machine Learning, Addison-Wesley, 1989.
[2] A. R. Conn, N. I. M. Gould, and Ph. L. Toint. “A Globally Convergent Augmented Lagrangian Algorithm for Optimization with General Constraints and Simple Bounds”, SIAM Journal on Numerical Analysis, Volume 28, Number 2, pages 545–572, 1991.
[3] A. R. Conn, N. I. M. Gould, and Ph. L. Toint. “A Globally Convergent Augmented Lagrangian Barrier Algorithm for Optimization with General Inequality Constraints and Simple Bounds”, Mathematics of Computation, Volume 66, Number 217, pages 261–288, 1997.
拡張機能
自動並列サポート
Parallel Computing Toolbox™ を使用して自動的に並列計算を実行することで、コードを高速化します。
並列実行するには、'UseParallel'
オプションを true
に設定します。
options = optimoptions('
solvername
','UseParallel',true)
詳細については、Global Optimization Toolbox で並列処理を使用する方法を参照してください。
バージョン履歴
R2006a より前に導入R2019b: ga
は適合関数の評価をより少なく実行します
適応度関数が決定論的である場合、ga
はエリート (現在最良の) 個体の適応度関数を再評価しません。この動作を制御するには、新しい state.EvalElites
フィールドにアクセスし、カスタム出力関数またはカスタム プロット関数で変更します。同様に、初期集団に重複するメンバーがある場合、ga
は各一意のメンバーを 1 回だけ評価します。新しい state.HaveDuplicates
フィールドにアクセスして変更することにより、カスタム出力関数またはカスタム プロット関数でこの動作を制御できます。詳細については、遺伝的アルゴリズムのカスタム出力関数 または カスタム プロット関数 を参照してください。
2 つの新しいフィールドの詳細については、国家構造 を参照してください。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)