メインコンテンツ

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

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 を返します。gamultiobj は、c(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')

Figure contains an axes object. The axes object with title Pareto Points in Parameter Space, xlabel x(1), ylabel x(2) contains a line object which displays its values using only markers.

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

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

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

Figure contains an axes object. The axes object with title Pareto Points in Parameter Space, xlabel x(1), ylabel x(2) contains 2 objects of type line. One or more of the lines displays its values using only markers

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

区間 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
    4.1976
    4.0093
    4.5791
    3.6800
    4.0656
      ⋮

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

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

Figure contains an axes object. The axes object with title Pareto Front, xlabel sin(x), ylabel cos(x) contains a line object which displays its values using only markers. This object represents 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.

Figure Genetic Algorithm contains an axes object. The axes object with title Pareto Front, xlabel Objective 1, ylabel Objective 2 contains an object of type scatter.

解を 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 を使用します。

非負整数 |{100*numberOfVariables}ga{200*numberOfVariables}gamultiobj

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} | 混合整数問題の場合のみga{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 またはオプション構造を使用して作成されたオプション

フィールド fitnessfcnnvars、および options を指定する必要があります。残りは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 で導入