Main Content

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

gamultiobj

遺伝的アルゴリズムを使用して複数の適応度関数のパレート最前線を見つける

説明

x = gamultiobj(fun,nvars) は、 fun で定義された目的関数の パレート フロント 上で x を見つけます。 nvars は最適化問題の次元 (決定変数の数) です。解 x はローカルであるため、グローバルなパレート最適解にはならない可能性があります。

メモ

追加パラメーターの受け渡し は、必要に応じて他のパラメーターを目的関数と非線形制約関数に渡す方法を説明します。

x = gamultiobj(fun,nvars,A,b) は、線形不等式 Axb に従うローカル パレート集合 x を見つけます。線形不等式制約 を参照してください。gamultiobj は、デフォルトの PopulationType オプション ('doubleVector') に対してのみ線形制約をサポートします。

x = gamultiobj(fun,nvars,A,b,Aeq,beq) は、線形等式 Aeqx=beq と線形不等式 Axb に従うローカル パレート集合 x を見つけます。線形等式制約 を参照してください。(不等式が存在しない場合は、A = []b = [] を設定します。) gamultiobj は、デフォルトの PopulationType オプション ('doubleVector') に対してのみ線形制約をサポートします。

x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub) は、設計変数 x の下限と上限のセットを定義し、ローカル パレート集合が範囲 lb x ub で見つかるようにします (範囲制約 を参照)。線形等式制約が存在しない場合は、Aeq および beq に空の行列を使用します。gamultiobj は、デフォルトの PopulationType オプション ('doubleVector') に対してのみ境界制約をサポートします。

x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon) は、 nonlcon で定義された制約に従ってパレート集合を見つけます。関数 nonlconx を受け取り、それぞれ非線形不等式と等式を表すベクトル cceq を返します。gamultiobjc(x) 0 および ceq(x) = 0 となるように fun を最小化します。(境界が存在しない場合は、lb = []ub = [] を設定します。) gamultiobj は、デフォルトの PopulationType オプション ('doubleVector') に対してのみ非線形制約をサポートします。

x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,options) または x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,options) は、デフォルトの最適化パラメータを options の値に置き換えたパレート集合 x を見つけます。optimoptions (推奨) または構造体を使用して options を作成します。

x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,intcon) または x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,intcon,options) では、intcon にリストされている変数が整数値を取る必要があります。

メモ

整数制約がある場合、gamultiobj は非線形等式制約を受け入れず、非線形不等式制約のみを受け入れます。

x = gamultiobj(problem)problem のパレート集合を見つけます。ここで、 problemproblem で記述される構造です。

[x,fval] = gamultiobj(___) は、任意の入力変数に対して、 x のすべてのソリューションに対する fun で定義されたすべての適合関数の値である行列 fval を返します。 fval には nf 列があり、 nf は目的関数の数で、 x と同じ行数を持ちます。

[x,fval,exitflag,output] = gamultiobj(___) は、アルゴリズムが停止した理由を識別する整数である exitflag と、最適化プロセスに関する情報を含む構造体である output を返します。

[x,fval,exitflag,output,population,scores] = gamultiobj(___) は、行が最終的な母集団である population と、最終的な母集団のスコアである scores を返します。

すべて折りたたむ

単純な多目的問題のパレート最適解を見つけます。2 つの目的と 2 つの決定変数 x があります。

fitnessfcn = @(x)[norm(x)^2,0.5*norm(x(:)-[2;-1])^2+2];

この目的関数のパレート最適解を見つけます。

rng default % For reproducibility
x = gamultiobj(fitnessfcn,2);
gamultiobj stopped because the average change in the spread of Pareto solutions is less than options.FunctionTolerance.

解の点をプロットします。

plot(x(:,1),x(:,2),'ko')
xlabel('x(1)')
ylabel('x(2)')
title('Pareto Points in Parameter Space')

この問題における線形制約の効果を確認するには、線形制約を伴う多目的問題 を参照してください。

この例では、線形制約がある場合の多目的問題のパレート最適解を見つける方法を示します。

2 つの目的関数と 2 つの決定変数 x があります。

fitnessfcn = @(x)[norm(x)^2,0.5*norm(x(:)-[2;-1])^2+2];

線形制約は x(1)+x(2)1/2 です。

A = [1,1];
b = 1/2;

パレート最適点を見つけます。

rng default % For reproducibility
x = gamultiobj(fitnessfcn,2,A,b);
gamultiobj stopped because the average change in the spread of Pareto solutions is less than options.FunctionTolerance.

制約付き解と線形制約をプロットします。

plot(x(:,1),x(:,2),'ko')
t = linspace(-1/2,2);
y = 1/2 - t;
hold on
plot(t,y,'b--')
xlabel('x(1)')
ylabel('x(2)')
title('Pareto Points in Parameter Space')
hold off

この問題から線形制約を削除した場合の効果を確認するには、単純な多目的問題 を参照してください。

区間 0x2π 上の 2 つの適応度関数 sin(x)cos(x) のパレート面を見つけます。

fitnessfcn = @(x)[sin(x),cos(x)];
nvars = 1;
lb = 0;
ub = 2*pi;
rng default % for reproducibility
x = gamultiobj(fitnessfcn,nvars,[],[],[],[],lb,ub)
gamultiobj stopped because the average change in the spread of Pareto solutions is less than options.FunctionTolerance.
x = 18×1

    4.7124
    4.7124
    3.1415
    3.6733
    3.9845
    3.4582
    3.9098
    4.4409
    4.0846
    3.8686
      ⋮

解をプロットします。gamultiobj はパレート面全体に沿ってポイントを見つけます。

plot(sin(x),cos(x),'r*')
xlabel('sin(x)')
ylabel('cos(x)')
title('Pareto Front')
legend('Pareto front')

2 つの目的を持つシャッファーの第 2 関数のパレート フロントを見つけてプロットします。この関数には切断されたパレートフロントがあります。

このコードを MATLAB® パス上の関数ファイルにコピーします。

function y = schaffer2(x) % y has two columns

% Initialize y for two objectives and for all x
y = zeros(length(x),2);

% Evaluate first objective. 
% This objective is piecewise continuous.
for i = 1:length(x)
    if x(i) <= 1
        y(i,1) = -x(i);
    elseif x(i) <=3 
        y(i,1) = x(i) -2; 
    elseif x(i) <=4 
        y(i,1) = 4 - x(i);
    else 
        y(i,1) = x(i) - 4;
    end
end

% Evaluate second objective
y(:,2) = (x -5).^2;

2 つの目標を計画します。

x = -1:0.1:8;
y = schaffer2(x);
plot(x,y(:,1),'r',x,y(:,2),'b');
xlabel x
ylabel 'schaffer2(x)'
legend('Objective 1','Objective 2')

2つの目的関数は、範囲 [1,3] と [4,5] 内の x を競います。しかし、パレート最適フロントは、範囲 [1,2][4,5] 内の x に対応する 2 つの切断された領域のみで構成されます。領域 [2,3][4,5] より劣っているため、切断された領域が存在します。この範囲では、目標 1 は同じ値を持ちますが、目標 2 は小さくなります。

母集団のメンバーを $-5\le x\le 10$ の範囲内に保つように境界を設定します。

lb = -5;
ub = 10;

gamultiobj の実行時にパレートフロントを表示するオプションを設定します。

options = optimoptions('gamultiobj','PlotFcn',@gaplotpareto);

gamultiobj を呼び出します。

rng default % For reproducibility
[x,fval,exitflag,output] = gamultiobj(@schaffer2,1,[],[],[],[],lb,ub,options);
gamultiobj stopped because it exceeded options.MaxGenerations.

2 つの問題変数で 2 つの目的関数を作成します。

rng default % For reproducibility
M = diag([-1 -1]) + randn(2)/4; % Two problem variables
fun = @(x)[(x').^2 / 30 + M*x']; % Two objectives

2 番目の変数は整数である必要があることを指定します。

intcon = 2;

問題の範囲、gaplotpareto プロット関数、および人口サイズ 100 を指定します。

lb = [0 0];
ub = [100 50];
options = optimoptions("gamultiobj","PlotFcn","gaplotpareto",...
    "PopulationSize",100);

問題のパレート集合を見つけます。

nvars = 2;
A = [];
b = [];
Aeq = [];
beq = [];
nonlcon = [];
[x,fval] = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,intcon,options);
gamultiobj stopped because the average change in the spread of Pareto solutions is less than options.FunctionTolerance.

解を 10 個リストし、2 番目の変数が整数値であることに注意してください。

x(1:10,:)
ans = 10×2

    8.3393   28.0000
   12.9927   49.0000
    7.1611   27.0000
    7.0210   18.0000
    0.0004   12.0000
    9.0989   44.0000
    9.3974   29.0000
    0.5537   17.0000
    6.4010   17.0000
    7.0531   31.0000

単純な多目的問題を実行し、利用可能なすべての出力を取得します。

再現性のために乱数ジェネレータを設定します。

rng default

フィットネス関数を、3 つの制御変数を持ち、2 つのフィットネス関数値を返す関数である kur_multiobjective に設定します。

fitnessfcn = @kur_multiobjective;
nvars = 3;

kur_multiobjective 関数のコードは次のとおりです。

function y = kur_multiobjective(x)
%KUR_MULTIOBJECTIVE Objective function for a multiobjective problem. 
%   The Pareto-optimal set for this two-objective problem is nonconvex as
%   well as disconnected. The function KUR_MULTIOBJECTIVE computes two
%   objectives and returns a vector y of size 2-by-1.
%
%   Reference: Kalyanmoy Deb, "Multi-Objective Optimization using
%   Evolutionary Algorithms", John Wiley & Sons ISBN 047187339 

%   Copyright 2007 The MathWorks, Inc.


% Initialize for two objectives 
y = zeros(2,1);

% Compute first objective
for i = 1:2
  y(1) = y(1)  - 10*exp(-0.2*sqrt(x(i)^2 + x(i+1)^2));
end

% Compute second objective
for i = 1:3
   y(2) = y(2) +  abs(x(i))^0.8 + 5*sin(x(i)^3);
end

すべての変数に下限と上限を設定します。

ub = [5 5 5];
lb = -ub;

この問題のパレート最適解とその他すべての出力を見つけます。

[x,fval,exitflag,output,population,scores] = gamultiobj(fitnessfcn,nvars, ...
    [],[],[],[],lb,ub);
gamultiobj stopped because the average change in the spread of Pareto solutions is less than options.FunctionTolerance.

返された変数のいくつかのサイズを調べます。

sizex = size(x)
sizepopulation = size(population)
sizescores = size(scores)
sizex =

    18     3


sizepopulation =

    50     3


sizescores =

    50     2

返されたパレート面には 18 個のポイントが含まれます。最終的な人口は 50 人です。各 population 行には、3 つの決定変数に対応する 3 つの次元があります。各 scores 行には、2 つのフィットネス関数に対応する 2 つの次元があります。

入力引数

すべて折りたたむ

最適化するフィットネス関数。関数ハンドルまたは関数名として指定します。

fun は、長さ nvars の double x の実数行ベクトルを受け取り、目的関数値の実数ベクトル F(x) を返す関数です。fun の書き方の詳細については、 目的関数を計算する を参照してください。

UseVectorized オプションを true に設定すると、fun はサイズが nnvars 列の行列を受け入れます。ここで、行列は n 個の個体を表します。fun はサイズが nm 列の行列を返します。ここで、m は目的関数の数です。適応度関数をベクトル化するを参照してください。

例: @(x)[sin(x),cos(x)]

データ型: char | function_handle | string

変数の数。正の整数として指定されます。ソルバーは長さ nvars から fun の行ベクトルを渡します。

例: 4

データ型: double

線形不等式制約。実数行列として指定されます。AMnvars 列の行列で、M は不等式の数です。

AM 個の線形不等式を符号化します。

A*x <= b,

ここで、xnvars 個の変数 x(:) の列ベクトル、bM 個の要素をもつ列ベクトルです。

たとえば、次の合計を指定するには、制約 A = [1,2;3,4;5,6]b = [10;20;30] を指定します。

x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30.

例: x 成分の合計を 1 以下に設定するには、A = ones(1,N)b = 1 を使用します。

データ型: double

実数ベクトルで指定される線形不等式制約です。b は、行列 A に関連する M 要素ベクトルです。b を行ベクトルとして渡す場合、ソルバーは b を列ベクトル b(:) に内部的に変換します。

bM 個の線形不等式を符号化します。

A*x <= b,

ここで、xnvars 個の変数 x(:) の列ベクトル、AMnvars 列の行列です。

たとえば、次の合計を指定するには、制約 A = [1,2;3,4;5,6]b = [10;20;30] を指定します。

x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30.

例: x 成分の合計を 1 以下に設定するには、A = ones(1,N)b = 1 を使用します。

データ型: double

線形等式制約。実数行列として指定されます。AeqMenvars 列の行列で、Me は等式の数です。

AeqMe 個の線形等式を符号化します。

Aeq*x = beq,

ここで、xnvars 個の変数 x(:) の列ベクトル、beqMe 個の要素をもつ列ベクトルです。

たとえば、次の合計を指定するには、制約 Aeq = [1,2,3;2,4,1]beq = [10;20] を指定します。

x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 20.

例: x 成分の合計を 1 に設定するには、Aeq = ones(1,N)beq = 1 を使用します。

データ型: double

実数ベクトルで指定される線形等式制約です。beq は、行列 Aeq に関連する Me 要素ベクトルです。beq を行ベクトルとして渡す場合、ソルバーは beq を列ベクトル beq(:) に内部的に変換します。

beqMe 個の線形等式を符号化します。

Aeq*x = beq,

ここで、xnvars 個の変数 x(:) の列ベクトル、AeqMeqN 列の行列です。

たとえば、次の合計を指定するには、制約 Aeq = [1,2,3;2,4,1]beq = [10;20] を指定します。

x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 20.

例: x 成分の合計を 1 に設定するには、Aeq = ones(1,N)beq = 1 を使用します。

データ型: double

下限。実数ベクトルまたは実数配列として指定されます。numel(lb) = nvars の場合、 lb はすべての i に対して x(i) >= lb(i) を指定します。

numel(lb) < nvars の場合、 lb1 <= i <= numel(lb) の代わりに x(i) >= lb(i) を指定します。

この場合、ソルバーによって警告が発行されます。

例: すべての x 成分を正として指定するには、lb = zeros(nvars,1) を設定します。

データ型: double

実数ベクトルまたは実数配列として指定される上限です。numel(ub) = nvars の場合、 ub はすべての i に対して x(i) <= ub(i) を指定します。

numel(ub) < nvars の場合、 ub1 <= i <= numel(ub) の代わりに x(i) <= ub(i) を指定します。

この場合、ソルバーによって警告が発行されます。

例: すべての x 成分を 1 未満に指定するには、ub = ones(nvars,1) を設定します。

データ型: double

非線形制約。関数ハンドルまたは関数名として指定されます。nonlcon は、行ベクトル x を受け取り、2 つの行ベクトル c(x)ceq(x) を返す関数です。

  • c(x) は、 x における非線形不等式制約の行ベクトルです。gamultiobj 関数は、 c のすべてのエントリに対して c(x) <= 0 を満たそうとします。

  • ceq(x)x における行ベクトルの非線形等式制約です。gamultiobj 関数は、 ceq のすべてのエントリに対して ceq(x) = 0 を満たそうとします。

UseVectorized オプションを true に設定すると、nonlcon はサイズが nnvars の行列を受け入れます。この行列は n 個の個体を表します。nonlcon は、最初の引数にサイズが nmc の行列を返します。ここで、mc は非線形不等式制約の数です。nonlcon は、2 番目の引数にサイズが nmceq の行列を返します。ここで、mceq は非線形等式制約の数です。適応度関数をベクトル化するを参照してください。

たとえば、x = gamultiobj(@myfun,nvars,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.

詳細については、非線形制約を参照してください。

データ型: char | function_handle | string

最適化オプション。optimoptions の出力または構造体として指定されます。オプションの詳細については遺伝的アルゴリズムのオプションを参照してください。

optimoptions は、斜体 でリストされているオプションを非表示にします。optimoptions で非表示になっているオプションを参照してください。

  • {} 内の値はデフォルト値を示します。

  • {}* は線形制約がある場合のデフォルトを表し、MutationFcn は境界がある場合のデフォルトを表します。

  • I* は、ソルバーが整数制約のオプションを異なる方法で処理することを示します。

  • NM は、オプションが gamultiobj には適用されないことを示します。

gagamultiobj のオプション

オプション説明
ConstraintTolerance

非線形制約に関する実現可能性を決定します。また、max(sqrt(eps),ConstraintTolerance) は線形制約に関して実現可能性を決定します。

オプション構造の場合は、TolCon を使用します。

非負のスカラー | {1e-3}

CreationFcn

初期集団を作成する関数。組み込み作成関数または関数ハンドルの名前として指定します。人口オプションを参照してください。

{'gacreationuniform'} | {'gacreationlinearfeasible'}* | 'gacreationnonlinearfeasible' | {'gacreationuniformint'}I* for ga | {'gacreationsobol'}I* for gamultiobj | カスタム作成機能

CrossoverFcn

アルゴリズムが交差子を作成するために使用する関数。組み込みクロスオーバー関数または関数ハンドルの名前として指定します。クロスオーバーオプションを参照してください。

{'crossoverscattered'}ga{'crossoverintermediate'}*gamultiobj です | {'crossoverlaplace'}I* | 'crossoverheuristic' | 'crossoversinglepoint' | 'crossovertwopoint' | 'crossoverarithmetic' | カスタム クロスオーバー機能

CrossoverFraction

交差関数によって生成される、エリートの子供を除く次世代の人口の割合。

非負のスカラー | {0.8}

Display

表示レベル。

'off' | 'iter' | 'diagnose' | {'final'}

DistanceMeasureFcn

個体間の距離の尺度を計算する関数。組み込みの距離測定関数または関数ハンドルの名前として指定します。値は、決定変数または設計空間 (遺伝子型) または機能空間 (表現型) に適用されます。デフォルトの 'distancecrowding' は関数空間 (表現型) にあります。gamultiobj 専用。多目的オプションを参照してください。

オプション構造体の場合は、名前ではなく関数ハンドルを使用します。

{'distancecrowding'}{@distancecrowding,'phenotype'} と同じ意味です | {@distancecrowding,'genotype'} | カスタム距離関数

EliteCount

NM 現在の世代の何個体が次の世代まで生き残ることが保証されているかを指定する正の整数。gamultiobj では使用されません。

非負整数 | {ceil(0.05*PopulationSize)} | 混合整数問題の場合は {0.05*(default PopulationSize)}

FitnessLimit

NM 適合関数が FitnessLimit の値に達すると、アルゴリズムは停止します。

スカラー | {-Inf}

FitnessScalingFcn

適応度関数の値をスケーリングする関数。組み込みスケーリング関数または関数ハンドルの名前として指定します。gamultiobj ではオプションは使用できません。

{'fitscalingrank'} | 'fitscalingshiftlinear' | 'fitscalingprop' | 'fitscalingtop' | カスタムフィットネススケーリング関数

FunctionTolerance

MaxStallGenerations 世代にわたる最良の適応度関数値の平均相対変化が FunctionTolerance 以下になった場合、アルゴリズムは停止します。StallTest'geometricWeighted' の場合、加重平均相対変化が FunctionTolerance 以下であればアルゴリズムは停止します。

gamultiobj の場合、options.MaxStallGenerations 世代にわたるスプレッド値の相対的な変化の幾何平均が options.FunctionTolerance 未満になり、最終的なスプレッドが過去の options.MaxStallGenerations 世代にわたる平均スプレッドよりも小さくなると、アルゴリズムは停止します。gamultiobj アルゴリズムを参照してください。

オプション構造の場合は、TolFun を使用します。

非負のスカラー | ga の場合は {1e-6}gamultiobj の場合は {1e-4}

HybridFcn

I* ga が終了した後も最適化を継続する関数。名前または関数ハンドルとして指定します。

または、ハイブリッド関数とそのオプションを指定するセル配列。ga ハイブリッド機能を参照してください。

gamultiobj の場合、唯一のハイブリッド関数は @fgoalattain です。gamultiobj ハイブリッド機能を参照してください。

問題に整数制約がある場合は、ハイブリッド関数は使用できません。

ハイブリッド関数を使用する場合を参照してください。

関数名またはハンドル | 'fminsearch' | 'patternsearch' | 'fminunc' | 'fmincon' | {[]}

または

1行2列のセル配列 | {@solver, hybridoptions}、ただしsolver = fminsearchpatternsearchfminunc、またはfmincon {[]}

InitialPenalty

NM I* ペナルティパラメータの初期値

正のスカラー | {10}

InitialPopulationMatrix

遺伝的アルゴリズムのシードに使用される初期集団。最大 PopulationSize 行と N 列があります。ここで、N は変数の数です。部分的な集団、つまり PopulationSize 行未満の集団を渡すこともできます。その場合、遺伝的アルゴリズムは CreationFcn を使用して残りの集団メンバーを生成します。人口オプションを参照してください。

オプション構造の場合は、InitialPopulation を使用します。

マトリックス | {[]}

InitialPopulationRange

初期集団内の個体の範囲を指定する行列またはベクトル。gacreationuniform 作成関数に適用されます。ga は、デフォルトの初期範囲をシフトおよびスケーリングして、任意の有限境界に一致させます。

オプション構造の場合は、PopInitRange を使用します。

行列またはベクトル | {[-10;10]} は非有界成分、{[-1e4+1;1e4+1]} は整数制約問題の非有界成分、{[lb;ub]} は有界成分、デフォルトの範囲は片側境界に合わせて変更されます

InitialScoresMatrix

適応度を判断するために使用される初期スコア。最大 PopulationSize 行と Nf 列があり、Nf は適応度関数の数です (ga の場合は 1gamultiobj の場合は 1 より大きくなります)。部分スコア マトリックス (つまり、PopulationSize 行未満のマトリックス) を渡すことができます。その場合、ソルバーは適合関数を評価するときにスコアを入力します。

オプション構造の場合は、InitialScores を使用します。

単一目的の列ベクトル | 多目的の行列 | {[]}

MaxGenerations

アルゴリズムが停止するまでの最大反復回数。

オプション構造の場合は、Generations を使用します。

非負整数 |ga の場合は {100*numberOfVariables}gamultiobj の場合は {200*numberOfVariables}

MaxStallGenerations

MaxStallGenerations 世代にわたる最良の適応度関数値の平均相対変化が FunctionTolerance 以下になった場合、アルゴリズムは停止します。StallTest'geometricWeighted' の場合、加重平均相対変化が FunctionTolerance 以下であればアルゴリズムは停止します。

gamultiobj の場合、options.MaxStallGenerations 世代にわたるスプレッド値の相対的な変化の幾何平均が options.FunctionTolerance 未満になり、最終的なスプレッドが過去の options.MaxStallGenerations 世代にわたる平均スプレッドよりも小さくなると、アルゴリズムは停止します。gamultiobj アルゴリズムを参照してください。

オプション構造の場合は、StallGenLimit を使用します。

非負の整数 | ga の場合は {50}gamultiobj の場合は {100}

MaxStallTime

NM tictoc で測定された MaxStallTime 秒間、目的関数に改善が見られない場合、アルゴリズムは停止します。

オプション構造の場合は、StallTimeLimit を使用します。

正のスカラー | {Inf}

MaxTime

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

オプション構造の場合は、TimeLimit を使用します。

非負のスカラー | {Inf}

MigrationDirection

移行の方向。移行オプションを参照してください。

'both' | {'forward'}

MigrationFraction

各サブ集団内で別のサブ集団に移動する個体の割合を指定する 0 から 1 までのスカラー。移行オプションを参照してください。

スカラー | {0.2}

MigrationInterval

個体がサブポピュレーション間で移動する間に発生する世代数を指定する正の整数。移行オプションを参照してください。

正の整数 | {20}

MutationFcn

突然変異の子を生成する関数。組み込みのミューテーション関数または関数ハンドルの名前として指定します。突然変異のオプションを参照してください。

制約なしの ga{'mutationgaussian'} | 制約ありの gamultiobj および ga{'mutationadaptfeasible'}* | {'mutationpower'}I* | 'mutationpositivebasis' | 'mutationuniform' | カスタム変異関数

NonlinearConstraintAlgorithm

非線形制約アルゴリズム。遺伝的アルゴリズムのための非線形制約ソルバーアルゴリズムを参照してください。gamultiobj ではオプションは変更できません。

オプション構造の場合は、NonlinConAlgorithm を使用します。

ga では {'auglag'}gamultiobj では {'penalty'}

OutputFcn

ga が各反復で呼び出す関数。関数ハンドルまたは関数ハンドルのセル配列として指定します。出力関数オプションを参照してください。

オプション構造の場合は、OutputFcns を使用します。

関数ハンドルまたは関数ハンドルのセル配列 | {[]}

ParetoFraction

gamultiobj の場合のみ、ソルバーがより高いフロントから個体を選択している間、最初のパレート フロントに保持する個体の割合を指定する 0 から 1 までのスカラー。多目的オプションを参照してください。

スカラー | {0.35}

PenaltyFactor

NM I* ペナルティ更新パラメータ。

正のスカラー | {100}

PlotFcn

アルゴリズムによって計算されたデータをプロットする関数。組み込みのプロット関数の名前、関数ハンドル、または組み込みの名前または関数ハンドルのセル配列として指定します。プロット オプションを参照してください。

オプション構造の場合は、PlotFcns を使用します。

ga または gamultiobj:{[]} | 'gaplotdistance' | 'gaplotgenealogy' | 'gaplotselection' | 'gaplotscorediversity' |'gaplotscores' | 'gaplotstopping' | 'gaplotmaxconstr' | カスタム プロット関数

ga のみ: 'gaplotbestf' | 'gaplotbestindiv' | 'gaplotexpectation' | 'gaplotrange'

gamultiobj のみ: 'gaplotpareto' | 'gaplotparetodistance' | 'gaplotrankhist' | 'gaplotspread'

PlotInterval

プロット関数の連続呼び出し間の世代数を指定する正の整数。

正の整数 | {1}

PopulationSize

人口の規模。

正の整数 | numberOfVariables <= 5 の場合は {50}、それ以外の場合は {200} | 混合整数問題の場合は {min(max(10*nvars,40),100)}

PopulationType

人口のデータ型。混合整数問題の場合は 'doubleVector' にする必要があります。

'bitstring' | 'custom' | {'doubleVector'}

PopulationType'bitString' または 'custom' に設定されている場合、 ga はすべての制約を無視します。人口オプションを参照してください。

SelectionFcn

交差および突然変異の子の親を選択する関数。組み込み選択関数または関数ハンドルの名前として指定します。

gamultiobj'selectiontournament' のみを使用します。

{'selectionstochunif'}ga{'selectiontournament'}gamultiobj です | 'selectionremainder' | 'selectionuniform' | 'selectionroulette' | カスタム選択機能

StallTest

NM テストタイプを停止します。

'geometricWeighted' | {'averageChange'}

UseParallel

適応度と非線形制約関数を並列に計算します。ベクトル化と並列化オプション (ユーザー関数評価)およびGlobal Optimization Toolbox で並列処理を使用する方法を参照してください。

true | {false}

UseVectorized

関数がベクトル化されるかどうかを指定します。ベクトル化と並列化オプション (ユーザー関数評価)および適応度関数をベクトル化するを参照してください。

オプション構造の場合は、値 'on' または 'off' とともに Vectorized を使用します。

true | {false}

例: optimoptions('gamultiobj','PlotFcn',@gaplotpareto)

整数変数。1 から nvars までの値を取る正の整数のベクトルとして指定されます。intcon の各値は、整数値の x コンポーネントを表します。

メモ

intcon が空でない場合、 nonlconceq に対して空を返す必要があります。

例: xの偶数エントリが整数値であることを指定するには、intcon2:2:nvarsに設定します。

データ型: double

問題の説明。これらのフィールドを含む構造体として指定されます。

fitnessfcn

フィットネス関数

nvars

設計変数の数

Aineq

線形不等式制約のA行列

Bineq

線形不等式制約の b ベクトル

Aeq

線形等式制約の Aeq 行列

Beq

線形等式制約の beq ベクトル

lb

x の下限

ub

x の上限

nonlcon

非線形制約関数

intcon整数変数のインデックス
rngstate

乱数ジェネレータの状態をリセットするフィールド

solver

'gamultiobj'

options

optimoptions またはオプション構造を使用して作成されたオプション

フィールド fitnessfcnnvarsoptions を指定する必要があります。残りは gamultiobj ではオプションです。

データ型: struct

出力引数

すべて折りたたむ

パレート ポイントは、mnvars 列の配列として返されます。ここで、m はパレート フロント上のポイントの数です。x の各行は、パレート面上の 1 つの点を表します。

パレートフロント上の関数値は、mnf 列の配列として返されます。m はパレートフロント上の点の数、nf は適応度関数の数です。fval の各行は、 x の 1 つのパレート点における関数値を表します。

gamultiobj の停止理由。整数として返されます。

終了フラグ値停止条件
1

options.MaxStallGenerations 世代にわたるスプレッド値の相対的変化の幾何平均は options.FunctionTolerance 未満であり、最終的なスプレッドは過去 options.MaxStallGenerations 世代にわたる平均スプレッドよりも小さい

0

最大世代数を超えました

-1

出力関数またはプロット関数によって終了した最適化

-2

実行可能なポイントが見つかりません

-5

時間制限を超えました

最適化プロセスに関する情報。次のフィールドをもつ構造体として返されます。

出力フィールド意味
problemtype

問題の種類:

  • 'unconstrained' — 制約なし

  • 'boundconstraints' — 境界制約のみ

  • 'linearconstraints' — 境界制約の有無にかかわらず線形制約

  • 'nonlinearconstr' — 非線形制約(他の種類の制約の有無にかかわらず)

rngstate

アルゴリズムが開始する直前の MATLAB 乱数ジェネレーターの状態。rngstate の値を使用して、 gamultiobj の出力を再現できます。結果を再現するを参照してください。

generationsHybridFcn 反復を除く世代の合計数。
funccount関数評価の合計数。
messagegamultiobj 終了メッセージ。
averagedistance平均「距離」。デフォルトでは、パレート分布の要素とその平均値の差の標準偏差です。
spread「距離」と、最後の 2 つの反復間のパレート面上の点の移動の尺度の組み合わせ。
maxconstraint最終パレート集合における最大の制約違反。

最終的な人口は、nnvars 列の配列として返されます。ここで、n は人口のメンバー数です。

最終的な集団のスコアは、nnf 列の配列として返されます。n は集団のメンバーの数、nf は適応度関数の数です。

非線形制約がある場合、gamultiobj は実行不可能な集団メンバーの scoresInf に設定します。

詳細

すべて折りたたむ

パレート フロント

パレート・フロントは、非劣性適合関数値を持つパラメータ空間(決定変数の空間)内の点の集合です。

言い換えれば、パレート最適解上の各点において、ある適応度関数を改善するには、別の適応度関数を低下させるしかありません。詳細については、多目的最適化とは何ですか?を参照してください。

大域的最適解と局所的最適解 と同様に、パレート面はローカルではあってもグローバルではない可能性があります。「ローカル」とは、パレート点が近くの点と比較して劣っていない可能性があるが、パラメータ空間内のより遠い点ではすべてのコンポーネントで関数値が低くなる可能性があることを意味します。

アルゴリズム

gamultiobj は、制御されたエリート遺伝的アルゴリズム (NSGA-II [1] のバリエーション) を使用します。エリート主義的な GA は常に、適応度値 (ランク) がより高い個体を優先します。制御されたエリート GA は、適応度値が低い場合でも、集団の多様性を高めるのに役立つ個体を優先します。最適なパレート最適点に収束するためには、集団の多様性を維持することが重要です。アルゴリズムが進むにつれて、集団のエリートメンバーを制御することで多様性が維持されます。ParetoFractionDistanceMeasureFcn の 2 つのオプションは、エリート主義を制御します。ParetoFraction は、パレート最前線上の個人 (エリート メンバー) の数を制限します。DistanceMeasureFcn によって選択された距離関数は、前線上で比較的遠くにいる個体を優先することで、前線上の多様性を維持するのに役立ちます。パレート最前線の動きの尺度である 広がり が小さい場合、アルゴリズムは停止します。詳細については、gamultiobj アルゴリズム を参照してください。

代替機能

アプリ

[最適化] ライブ エディター タスクが gamultiobj にビジュアル インターフェイスを提供します。

参照

[1] Deb, Kalyanmoy. Multi-Objective Optimization Using Evolutionary Algorithms. Chichester, England: John Wiley & Sons, 2001.

拡張機能

バージョン履歴

R2007b で導入