주요 콘텐츠

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)는 국소 파레토 집합이 범위 lb x ub 내에 있도록 설계 변수 x에 대한 하한 및 상한 집합을 정의합니다. 범위 제약 조건 항목을 참조하십시오. 선형 등식 제약 조건이 존재하지 않을 경우 Aeqbeq에 빈 행렬을 사용하십시오. gamultiobj는 디폴트 PopulationType 옵션('doubleVector')에 대해서만 범위 제약 조건을 지원합니다.

예제

x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon)nonlcon에 정의된 제약 조건을 적용하여 파레토 집합을 구합니다. 함수 nonlconx를 받고 각각 비선형 부등식과 등식을 나타내는 벡터 cceq를 반환합니다. gamultiobjc(x) 0ceq(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을 반환합니다. fvalnf개의 열을 가지며 x와 동일한 개수의 행을 갖습니다. 여기서 nf는 목적 함수의 개수입니다.

[x,fval,exitflag,output] = gamultiobj(___)는 알고리즘이 중지된 이유를 나타내는 정수인 exitflag와 최적화 과정에 대한 정보가 포함된 구조체인 output을 반환합니다.

[x,fval,exitflag,output,population,scores] = gamultiobj(___)는 행이 최종 모집단을 나타내는 population과 최종 모집단의 점수를 나타내는 scores를 반환합니다.

예제

예제

모두 축소

단순한 다중 목적 함수 문제의 파레토 경계를 구합니다. 두 가지 목적 함수와 두 가지 결정 변수 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.

선형 제약 조건이 이 문제에 미치는 영향을 보려면 선형 제약 조건이 있는 다중 목적 함수 문제 항목을 참조하십시오.

이 예제에서는 선형 제약 조건이 있는 다중 목적 함수 문제에 대한 파레토 경계를 구하는 방법을 보여줍니다.

두 가지 목적 함수와 두 가지 결정 변수 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π에서 두 가지 적합도 함수 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 함수(Schaffer's second function)에 대한 파레토 경계를 구하여 플로팅합니다. 이 함수는 단절된 파레토 경계를 갖습니다.

이 코드를 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;

두 목적 함수를 플로팅합니다.

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')

두 목적 함수는 x[1,3]과 [4,5] 범위에서 서로 상충합니다. 그러나 파레토 최적 경계는 [1,2][4,5] 범위의 x에 대응하는 두 개의 단절된 범위로만 구성됩니다. 영역 [2,3][4,5]보다 열등(inferior)하기 때문에 단절된 범위가 있습니다. 해당 범위에서 목적 함수 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.

두 문제 변수에서 두 목적 함수를 만듭니다.

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

두 번째 변수가 정수가 되도록 지정합니다.

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개의 해를 나열하면 두 번째 변수가 정수 값이라는 것을 알 수 있습니다.

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을 작성하는 방법에 대한 자세한 내용은 Compute Objective Functions 항목을 참조하십시오.

UseVectorized 옵션을 true로 설정하면 funn×nvars 크기의 행렬을 받습니다. 여기서 행렬은 n개의 개체를 나타냅니다. funn×m 크기의 행렬을 반환합니다. 여기서 m은 목적 함수의 개수입니다. Vectorize the Fitness Function 항목을 참조하십시오.

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

데이터형: char | function_handle | string

변수 개수로, 양의 정수로 지정됩니다. 이 솔버는 길이가 nvars인 행 벡터를 fun으로 전달합니다.

예: 4

데이터형: double

선형 부등식 제약 조건으로, 실수 행렬로 지정됩니다. AM×nvars 행렬입니다. 여기서 M은 부등식 개수입니다.

A는 다음과 같이 M개의 선형 부등식을 인코딩합니다.

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

선형 부등식 제약 조건으로, 실수 벡터로 지정됩니다. bA 행렬과 관련된, 요소를 M개 가진 벡터입니다. b를 행 벡터로 전달하면 솔버는 내부적으로 b를 열 벡터 b(:)으로 변환합니다.

b는 다음과 같이 M개의 선형 부등식을 인코딩합니다.

A*x <= b,

여기서 xnvars개의 변수 x(:)으로 구성된 열 벡터이고, A는 크기가 M×nvars인 행렬입니다.

예를 들어, 다음과 같은 합을 지정하려면 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

선형 등식 제약 조건으로, 실수 행렬로 지정됩니다. AeqMe×nvars 행렬입니다. 여기서 Me는 등식 개수입니다.

Aeq는 다음과 같이 Me개의 선형 등식을 인코딩합니다.

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

선형 등식 제약 조건으로, 실수 벡터로 지정됩니다. beqAeq 행렬과 관련된, 요소를 Me개 가진 벡터입니다. beq를 행 벡터로 전달하면 솔버는 내부적으로 beq를 열 벡터 beq(:)으로 변환합니다.

beq는 다음과 같이 Me개의 선형 등식을 인코딩합니다.

Aeq*x = beq,

여기서 xnvars개의 변수 x(:)으로 구성된 열 벡터이고, Aeq는 크기가 Meq×N인 행렬입니다.

예를 들어, 다음과 같은 합을 지정하려면 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를 받고 두 개의 행 벡터 c(x)ceq(x)를 반환하는 함수입니다.

  • c(x)x의 비선형 부등식 제약 조건으로 구성된 행 벡터입니다. gamultiobj 함수는 모든 c 요소에 대해 c(x) <= 0을 충족하려고 시도합니다.

  • ceq(x)x의 비선형 등식 제약 조건으로 구성된 행 벡터입니다. gamultiobj 함수는 모든 ceq 요소에 대해 ceq(x) = 0을 충족하려고 시도합니다.

UseVectorized 옵션을 true로 설정하면 nonlconn×nvars 크기의 행렬을 받습니다. 여기서 행렬은 n개의 개체를 나타냅니다. nonlcon은 첫 번째 인수에서 n×mc 크기의 행렬을 반환합니다. 여기서 mc는 비선형 부등식 제약 조건의 개수입니다. nonlcon은 두 번째 인수에서 n×mceq 크기의 행렬을 반환합니다. 여기서 mceq는 비선형 등식 제약 조건의 개수입니다. Vectorize the Fitness Function 항목을 참조하십시오.

예를 들어, 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의 출력값 또는 구조체로 지정됩니다. 옵션 세부 정보는 Genetic Algorithm Options 항목을 참조하십시오.

optimoptions기울임꼴로 나열된 옵션을 숨깁니다. Options that optimoptions Hides 항목을 참조하십시오.

  • {}의 값은 디폴트 값을 나타냅니다.

  • {}*은 선형 제약 조건이 있을 때의 디폴트 값을 나타내며, MutationFcn에 대해서도 범위가 있을 경우 디폴트 값을 나타냅니다.

  • I*는 솔버가 정수 제약 조건의 옵션을 다르게 처리함을 나타냅니다.

  • NMgamultiobj에 옵션이 적용되지 않음을 나타냅니다.

gagamultiobj에 대한 옵션

옵션설명
ConstraintTolerance

비선형 제약 조건과 관련하여 실현 가능성을 결정합니다. 또한 max(sqrt(eps),ConstraintTolerance)는 선형 제약 조건과 관련하여 실현 가능성을 결정합니다.

options 구조체의 경우 TolCon을 사용합니다.

음이 아닌 스칼라 | {1e-3}

CreationFcn

초기 모집단을 만드는 함수입니다. 내장 생성 함수 이름 또는 함수 핸들로 지정합니다. Population Options 항목을 참조하십시오.

{'gacreationuniform'} | {'gacreationlinearfeasible'}* | 'gacreationnonlinearfeasible' | {'gacreationuniformint'}I*(ga의 경우) | {'gacreationsobol'}I*(gamultiobj의 경우) | 사용자 지정 생성 함수

CrossoverFcn

알고리즘이 교차 자식을 만드는 데 사용하는 함수입니다. 내장 교차 함수 이름 또는 함수 핸들로 지정합니다. Crossover Options 항목을 참조하십시오.

{'crossoverscattered'}(ga의 경우), {'crossoverintermediate'}*(gamultiobj의 경우) | {'crossoverlaplace'}I* | 'crossoverheuristic' | 'crossoversinglepoint' | 'crossovertwopoint' | 'crossoverarithmetic' | 사용자 지정 교차 함수

CrossoverFraction

교차 함수가 만들어 내는 다음 세대에서 엘리트 자식을 포함하지 않는 모집단의 소수부입니다.

음이 아닌 스칼라 | {0.8}

Display

표시 수준입니다.

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

DistanceMeasureFcn

개체의 거리 측정을 계산하는 함수입니다. 내장 거리 측정 함수 이름 또는 함수 핸들로 지정합니다. 값은 결정 변수나 설계 공간(유전자형) 또는 함수 공간(표현형)에 적용됩니다. 디폴트 값 'distancecrowding'은 함수 공간(표현형)에 있습니다. gamultiobj만 해당됩니다. Multiobjective Options 항목을 참조하십시오.

options 구조체의 경우에는 함수 이름이 아닌 함수 핸들을 사용하십시오.

{'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 Algorithm 항목을 참조하십시오.

options 구조체의 경우 TolFun을 사용합니다.

음이 아닌 스칼라 | {1e-6}(ga의 경우), {1e-4}(gamultiobj의 경우)

HybridFcn

I* ga 종료 이후 최적화를 계속하는 함수입니다. 함수 이름 또는 함수 핸들로 지정합니다.

또는 하이브리드 함수와 해당 옵션을 지정하는 셀형 배열입니다. ga Hybrid Function 항목을 참조하십시오.

gamultiobj의 경우 유일한 하이브리드 함수는 @fgoalattain입니다. gamultiobj Hybrid Function 항목을 참조하십시오.

문제에 정수 제약 조건이 있는 경우 하이브리드 함수를 사용할 수 없습니다.

When to Use a Hybrid Function 항목을 참조하십시오.

함수 이름 또는 함수 핸들 | 'fminsearch' | 'patternsearch' | 'fminunc' | 'fmincon' | {[]}

또는

1×2 셀형 배열 | {@solver, hybridoptions}, 여기서 solver = fminsearch, patternsearch, fminunc, 또는 fmincon {[]}

InitialPenalty

NM I* 벌점 파라미터의 초기값

양의 스칼라 | {10}

InitialPopulationMatrix

유전 알고리즘을 시드하는 데 사용되는 초기 모집단입니다. 최대 PopulationSize개의 행과 N개의 열을 가지며, 여기서 N은 변수의 수입니다. 부분 모집단을 전달할 수 있습니다. 즉, 행 수가 PopulationSize개 미만인 모집단을 전달할 수 있습니다. 이 경우 유전 알고리즘은 CreationFcn을 사용하여 나머지 모집단 구성원을 생성합니다. Population Options 항목을 참조하십시오.

options 구조체의 경우 InitialPopulation을 사용합니다.

행렬 | {[]}

InitialPopulationRange

초기 모집단의 개체 범위를 지정하는 행렬 또는 벡터입니다. gacreationuniform 생성 함수에 적용됩니다. ga는 디폴트 초기 범위가 유한 범위와 일치하도록 이동하고 스케일링합니다.

options 구조체의 경우 PopInitRange를 사용합니다.

벡터 행렬 | 제한 조건이 없는 성분의 경우 {[-10;10]}, 정수 제약 문제의 제한 조건이 없는 성분의 경우 {[-1e4+1;1e4+1]}, 디폴트 범위가 단측 범위와 일치하도록 수정된 제한 조건이 있는 성분의 경우 {[lb;ub]}

InitialScoresMatrix

적합도를 결정하는 데 사용되는 초기 점수입니다. 최대 PopulationSize개의 행과 Nf개의 열이 있습니다. 여기서 Nf은 적합도 함수 개수입니다(ga의 경우 1, gamultiobj의 경우 1보다 큽니다). 부분 점수 행렬을 전달할 수 있습니다. 즉, 행 수가 PopulationSize개 미만인 행렬을 의미합니다. 이 경우 솔버는 적합도 함수를 평가하면서 점수를 채웁니다.

options 구조체의 경우 InitialScores를 사용합니다.

단일 목적 함수의 경우 열 벡터 | 다중 목적 함수의 경우 행렬 | {[]}

MaxGenerations

알고리즘이 중지되기 전까지의 최대 반복 횟수입니다.

options 구조체의 경우 Generations를 사용하십시오.

음이 아닌 정수 |{100*numberOfVariables}(ga의 경우), {200*numberOfVariables}(gamultiobj의 경우)

MaxStallGenerations

MaxStallGenerations개의 세대 동안 최대 적합도 함수 값의 평균 상대 변화가 FunctionTolerance보다 작거나 같으면 알고리즘이 중지됩니다. StallTest'geometricWeighted'인 경우 가중 평균 상대 변화가 FunctionTolerance보다 작거나 같으면 알고리즘이 중지됩니다.

gamultiobj의 경우, options.MaxStallGenerations개의 세대 동안 산포값의 상대적 변화의 기하 평균이 options.FunctionTolerance보다 작고, 최종 산포값이 지난 options.MaxStallGenerations개의 세대 동안의 평균 산포 값보다 작을 때 알고리즘이 중지됩니다. gamultiobj Algorithm 항목을 참조하십시오.

options 구조체의 경우 StallGenLimit을 사용합니다.

음이 아닌 정수 |{50}(ga의 경우), {100}(gamultiobj의 경우)

MaxStallTime

NM tictoc에서 측정한 결과를 기준으로 MaxStallTime초 동안 목적 함수가 개선되지 않으면 알고리즘이 중지됩니다.

options 구조체의 경우 StallTimeLimit을 사용합니다.

양의 스칼라 | {Inf}

MaxTime

tictoc에서 측정한 결과를 기준으로 MaxTime초 동안 실행된 후 알고리즘이 중지됩니다. 이 제한은 각 반복 후에 적용되므로 반복에 상당한 시간이 걸릴 경우 ga가 제한을 초과할 수 있습니다.

options 구조체의 경우 TimeLimit을 사용합니다.

음이 아닌 스칼라 | {Inf}

MigrationDirection

마이그레이션 방향입니다. Migration Options 항목을 참조하십시오.

'both' | {'forward'}

MigrationFraction

다른 하위 모집단으로 마이그레이션하는 각 하위 모집단의 개체 비율을 지정하는, 0부터 1까지의 스칼라입니다. Migration Options 항목을 참조하십시오.

스칼라 | {0.2}

MigrationInterval

하위 모집단 간의 개체 마이그레이션 사이에 발생하는 세대 수를 지정하는 양의 정수입니다. Migration Options 항목을 참조하십시오.

양의 정수 | {20}

MutationFcn

변이 자식을 생성하는 함수입니다. 내장 변이 함수 이름 또는 함수 핸들로 지정합니다. Mutation Options 항목을 참조하십시오.

{'mutationgaussian'}(제약 조건이 없는 ga의 경우) | {'mutationadaptfeasible'}*(제약 조건이 있는 gagamultiobj의 경우) | {'mutationpower'}I* | 'mutationpositivebasis' | 'mutationuniform' | 사용자 지정 변이 함수

NonlinearConstraintAlgorithm

비선형 제약 조건 알고리즘입니다. Nonlinear Constraint Solver Algorithms for Genetic Algorithm 항목을 참조하십시오. gamultiobj에 대해 옵션을 변경할 수 없습니다.

options 구조체의 경우 NonlinConAlgorithm을 사용합니다.

{'auglag'}(ga의 경우), {'penalty'}(gamultiobj의 경우)

OutputFcn

각 반복에서 ga가 호출하는 함수입니다. 함수 핸들 또는 함수 핸들로 구성된 셀형 배열로 지정합니다. Output Function Options 항목을 참조하십시오.

options 구조체의 경우 OutputFcns를 사용합니다.

함수 핸들 또는 함수 핸들로 구성된 셀형 배열 | {[]}

ParetoFraction

솔버가 더 높은 경계에서 개체를 선택하는 동안 첫 번째 파레토 경계에 유지할 개체의 비율을 지정하는, 0에서 1까지의 스칼라입니다. gamultiobj만 해당됩니다. Multiobjective Options 항목을 참조하십시오.

스칼라 | {0.35}

PenaltyFactor

NM I* 벌점 업데이트 파라미터입니다.

양의 스칼라 | {100}

PlotFcn

알고리즘으로 계산된 데이터를 플로팅하는 함수입니다. 내장 플롯 함수 이름, 함수 핸들 또는 내장 함수 이름이나 함수 핸들로 구성된 셀형 배열로 지정합니다. Plot Options 항목을 참조하십시오.

options 구조체의 경우 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는 모든 제약 조건을 무시합니다. Population Options 항목을 참조하십시오.

SelectionFcn

교차 및 변이 자식의 부모를 선택하는 함수입니다. 내장 선택 함수 이름 또는 함수 핸들로 지정합니다.

gamultiobj'selectiontournament' 또는 사용자 지정 선택 함수만 사용합니다.

{'selectionstochunif'}(ga의 경우), {'selectiontournament'}(gamultiobj의 경우) | 'selectionremainder' | 'selectionuniform' | 'selectionroulette' | 사용자 지정 선택 함수

StallTest

NM 테스트 유형을 중지합니다.

'geometricWeighted' | {'averageChange'}

UseParallel

적합도와 비선형 제약 조건 함수를 병렬로 계산합니다. Vectorize and Parallel Options (User Function Evaluation) 항목과 How to Use Parallel Processing in Global Optimization Toolbox 항목을 참조하십시오.

true | {false}

UseVectorized

함수를 벡터화할지 여부를 지정합니다. Vectorize and Parallel Options (User Function Evaluation) 항목과 Vectorize the Fitness Function 항목을 참조하십시오.

options 구조체의 경우 값 '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로 만든 옵션 또는 options 구조체

필드 fitnessfcn, nvars, options를 지정해야 합니다. gamultiobj의 경우 나머지는 선택 사항입니다.

데이터형: struct

출력 인수

모두 축소

파레토 점으로, m×nvars 배열로 반환됩니다. 여기서 m은 파레토 경계에 있는 점 개수입니다. x의 각 행은 파레토 경계에 있는 한 점을 나타냅니다.

파레토 경계에 있는 함수 값으로, m×nf 배열로 반환됩니다. 여기서 m은 파레토 경계에 있는 점 개수이고, nf는 적합도 함수의 개수입니다. fval의 각 행은 x에 있는 파레토 점 한 개에서의 함수 값을 나타냅니다.

gamultiobj가 중지된 이유로, 정수로 반환됩니다.

exitflag 값중지 조건
1

options.MaxStallGenerations개의 세대 동안 산포값의 상대적 변화의 기하 평균이 options.FunctionTolerance보다 작고, 최종 산포 값이 지난 options.MaxStallGenerations개의 세대 동안의 평균 산포값보다 작음

0

최대 세대 수를 초과함

-1

출력 함수나 플롯 함수에 의해 최적화가 종료됨

-2

실현가능점을 찾을 수 없음

-5

시간 제한을 초과함

최적화 과정에 대한 정보로, 다음 필드를 가진 구조체로 반환됩니다.

출력 필드의미
problemtype

문제 유형:

  • 'unconstrained' — 제약 조건 없음

  • 'boundconstraints' — 범위 제약 조건만

  • 'linearconstraints' — 범위 제약 조건이 있거나 없는 선형 제약 조건

  • 'nonlinearconstr' — 다른 유형의 제약 조건이 있거나 없는 비선형 제약 조건

rngstate

알고리즘이 시작되기 직전 MATLAB 난수 생성기의 상태입니다. rngstate의 값을 사용하여 gamultiobj의 출력값을 재현할 수 있습니다. Reproduce Results 항목을 참조하십시오.

generationsHybridFcn 반복 횟수를 제외한 총 세대 수입니다.
funccount총 함수 실행 횟수입니다.
messagegamultiobj 종료 메시지입니다.
averagedistance평균 “거리”는 기본적으로 파레토 경계 구성원과 평균 간 차이 노름의 표준편차입니다.
spread“거리”와 마지막 두 반복 간 파레토 경계상의 점들의 이동 측정값을 결합한 값입니다.
maxconstraint최종 파레토 집합에서의 최대 제약 조건 위반입니다.

최종 모집단으로, n×nvars 배열로 반환됩니다. 여기서 n은 모집단의 구성원 개수입니다.

최종 모집단의 점수로, n×nf 배열로 반환됩니다. 여기서 n은 모집단의 구성원 개수이고 nf는 적합도 함수의 개수입니다.

비선형 제약 조건이 있는 경우 gamultiobj는 실현 불가능한 모집단 구성원의 scoresInf로 설정합니다.

세부 정보

모두 축소

알고리즘

gamultiobj는 제어된 엘리트 유전 알고리즘(NSGA-II [1]의 변형)을 사용합니다. 엘리트 GA(유전 알고리즘)는 항상 더 나은 적합도 값(랭크)을 갖는 개체를 우선시합니다. 또한, 제어된 엘리트 GA는 적합도 값이 낮아도 모집단의 다양성을 높이는 데 도움이 되는 개체를 우선시합니다. 최적의 파레토 경계로 수렴하려면 모집단의 다양성을 유지하는 것이 중요합니다. 알고리즘이 진행됨에 따라 모집단의 엘리트 구성원을 제어하여 다양성을 유지합니다. 두 개의 옵션 ParetoFractionDistanceMeasureFcn은 엘리티주의(elitism)를 제어합니다. ParetoFraction은 파레토 경계에 있는 개체(엘리트 구성원)의 개수를 제한합니다. DistanceMeasureFcn에 의해 선택된 거리 함수는 경계에서 비교적 멀리 떨어져 있는 개체를 우선시하여 경계의 다양성을 유지하는 데 도움이 됩니다. 파레토 경계상의 이동에 대한 측정값인 산포값이 작으면 알고리즘이 중지됩니다. 자세한 내용은 gamultiobj Algorithm 항목을 참조하십시오.

대체 기능

최적화 라이브 편집기 작업은 gamultiobj에 대한 시각적 인터페이스를 제공합니다.

참고 문헌

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

확장 기능

모두 확장

버전 내역

R2007b에 개발됨