Hauptinhalt

Diese Seite wurde mithilfe maschineller Übersetzung übersetzt. Klicken Sie hier, um die neueste Version auf Englisch zu sehen.

gamultiobj

Finden Sie die Pareto-Front mehrerer Fitnessfunktionen mithilfe eines genetischen Algorithmus

Beschreibung

x = gamultiobj(fun,nvars) findet x auf der Pareto-Front der in fun definierten Zielfunktionen. nvars ist die Dimension des Optimierungsproblems (Anzahl der Entscheidungsvariablen). Die Lösung x ist lokal, was bedeutet, dass sie sich möglicherweise nicht auf der globalen Pareto-Front befindet.

Hinweis

Passing Extra Parameters erklärt, wie bei Bedarf zusätzliche Parameter an die Zielfunktion und nichtlinearen Einschränkungsfunktionen übergeben werden.

Beispiel

x = gamultiobj(fun,nvars,A,b) findet eine lokale Pareto-Menge x, die den linearen Ungleichungen Axb unterliegt. Siehe Linear Inequality Constraints. gamultiobj unterstützt lineare Einschränkungen nur für die Standardoption PopulationType ('doubleVector').

Beispiel

x = gamultiobj(fun,nvars,A,b,Aeq,beq) findet eine lokale Pareto-Menge x, die den linearen Gleichungen Aeqx=beq und den linearen Ungleichungen Axb unterliegt, siehe Linear Equality Constraints. (Setzen Sie A = [] und b = [], wenn keine Ungleichheiten vorhanden sind.) gamultiobj unterstützt lineare Einschränkungen nur für die Standardoption PopulationType ('doubleVector').

x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub) definiert eine Reihe von Unter- und Obergrenzen für die Entwurfsvariablen x, sodass eine lokale Pareto-Menge im Bereich lb x ub gefunden wird, siehe Bound Constraints. Verwenden Sie leere Matrizen für Aeq und beq, wenn keine linearen Gleichheitsbeschränkungen vorhanden sind. gamultiobj unterstützt gebundene Beschränkungen nur für die Standardoption PopulationType ('doubleVector').

Beispiel

x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon) findet eine Pareto-Menge, die den in nonlcon definierten Einschränkungen unterliegt. Die Funktion nonlcon akzeptiert x und gibt die Vektoren c und ceq zurück, die die nichtlinearen Ungleichungen bzw. Gleichheiten darstellen. gamultiobj minimiert fun, sodass c(x) 0 und ceq(x) = 0. (Legen Sie lb = [] und ub = [] fest, wenn keine Grenzen vorhanden sind.) gamultiobj unterstützt nichtlineare Einschränkungen nur für die Standardoption PopulationType ('doubleVector').

x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,options) oder x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,options) findet eine Pareto-Menge x, bei der die Standardoptimierungsparameter durch Werte in options ersetzt wurden. Erstellen Sie options mit optimoptions (empfohlen) oder einer Struktur.

Beispiel

x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,intcon) oder x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,intcon,options) erfordert, dass die in intcon aufgelisteten Variablen ganzzahlige Werte annehmen.

Hinweis

Bei ganzzahligen Einschränkungen akzeptiert gamultiobj keine nichtlinearen Gleichheitsbeschränkungen, sondern nur nichtlineare Ungleichheitsbeschränkungen.

Beispiel

x = gamultiobj(problem) findet die Pareto-Menge für problem, wobei problem eine in problem beschriebene Struktur ist.

[x,fval] = gamultiobj(___) gibt für alle Eingabevariablen eine Matrix fval zurück, den Wert aller in fun definierten Fitnessfunktionen für alle Lösungen in x. fval hat nf Spalten, wobei nf die Anzahl der Ziele ist, und hat die gleiche Anzahl Zeilen wie x.

[x,fval,exitflag,output] = gamultiobj(___) gibt exitflag zurück, eine Ganzzahl, die den Grund angibt, warum der Algorithmus gestoppt wurde, und output, eine Struktur, die Informationen zum Optimierungsprozess enthält.

[x,fval,exitflag,output,population,scores] = gamultiobj(___) gibt population zurück, dessen Zeilen die endgültige Population darstellen, und scores, die Werte der endgültigen Population.

Beispiel

Beispiele

alle reduzieren

Finden Sie die Pareto-Front für ein einfaches Problem mit mehreren Zielen. Es gibt zwei Ziele und zwei Entscheidungsvariablen x.

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

Finden Sie die Pareto-Front für diese Zielfunktion.

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.

Zeichnen Sie die Lösungspunkte auf.

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

Um die Auswirkung einer linearen Einschränkung auf dieses Problem zu sehen, siehe Mehrzielproblem mit linearer Einschränkung.

Dieses Beispiel zeigt, wie die Pareto-Front für ein Problem mit mehreren Zielen und einer linearen Einschränkung ermittelt wird.

Es gibt zwei Zielfunktionen und zwei Entscheidungsvariablen x.

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

Die lineare Einschränkung ist x(1)+x(2)1/2.

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

Finden Sie die Pareto-Front.

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.

Zeichnen Sie die beschränkte Lösung und die lineare Beschränkung auf.

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

Um die Auswirkungen des Entfernens der linearen Einschränkung auf dieses Problem zu sehen, siehe Einfaches Mehrzielproblem.

Finden Sie die Pareto-Front für die beiden Fitnessfunktionen sin(x) und cos(x) im Intervall 0x2π.

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
      ⋮

Zeichnen Sie die Lösung auf. gamultiobj findet Punkte entlang der gesamten Pareto-Front.

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

Ermitteln und zeichnen Sie die Pareto-Front für die zweite Schaffer-Funktion mit zwei Zielen. Diese Funktion hat eine getrennte Pareto-Front.

Kopieren Sie diesen Code in eine Funktionsdatei in Ihrem MATLAB ®-Pfad.

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;

Zeichnen Sie die beiden Ziele auf.

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

Die beiden Zielfunktionen konkurrieren um x in den Bereichen [1,3] und [4,5]. Die Pareto-optimale Front besteht jedoch nur aus zwei getrennten Regionen, die den x in den Bereichen [1,2] und [4,5] entsprechen. Es gibt getrennte Regionen, da die Region [2,3] unterlegen ist gegenüber [4,5]. In diesem Bereich hat Ziel 1 die gleichen Werte, aber Ziel 2 ist kleiner.

Legen Sie Grenzen fest, um die Populationsmitglieder im Bereich $-5\le x\le 10$ zu halten.

lb = -5;
ub = 10;

Legen Sie Optionen fest, um die Pareto-Front während der Ausführung von gamultiobj anzuzeigen.

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

Rufen Sie gamultiobj auf.

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

Erstellen Sie eine Funktion mit zwei Zielen in zwei Problemvariablen.

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

Geben Sie an, dass die zweite Variable eine Ganzzahl sein muss.

intcon = 2;

Geben Sie Problemgrenzen, die Plotfunktion gaplotpareto und eine Populationsgröße von 100 an.

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

Finden Sie die Pareto-Menge für das Problem.

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.

Listen Sie zehn der Lösungen auf und beachten Sie, dass die zweite Variable einen ganzzahligen Wert hat.

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

Führen Sie ein einfaches Problem mit mehreren Zielen aus und erhalten Sie alle verfügbaren Ausgaben.

Stellen Sie den Zufallszahlengenerator auf Reproduzierbarkeit ein.

rng default

Stellen Sie die Fitnessfunktionen auf kur_multiobjective ein, eine Funktion mit drei Kontrollvariablen, die zwei Fitnessfunktionswerte zurückgibt.

fitnessfcn = @kur_multiobjective;
nvars = 3;

Die Funktion kur_multiobjective hat den folgenden Code.

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

Legen Sie für alle Variablen Unter- und Obergrenzen fest.

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

Finden Sie die Pareto-Front und alle anderen Ausgaben für dieses Problem.

[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.

Untersuchen Sie die Größen einiger der zurückgegebenen Variablen.

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

    18     3


sizepopulation =

    50     3


sizescores =

    50     2

Die zurückgegebene Pareto-Front enthält 18 Punkte. Die endgültige Population umfasst 50 Mitglieder. Jede population-Zeile hat drei Dimensionen, die den drei Entscheidungsvariablen entsprechen. Jede scores-Zeile hat zwei Dimensionen, die den beiden Fitnessfunktionen entsprechen.

Eingabeargumente

alle reduzieren

Zu optimierende Fitnessfunktionen, angegeben als Funktionshandle oder Funktionsname.

fun ist eine Funktion, die einen reellen Zeilenvektor von Doubles x der Länge nvars akzeptiert und einen reellen Vektor F(x) von Zielfunktionswerten zurückgibt. Einzelheiten zum Schreiben von fun finden Sie unter Compute Objective Functions.

Wenn Sie die Option UseVectorized auf true setzen, akzeptiert fun eine Matrix der Größe n-mal-nvars, wobei die Matrix n Individuen darstellt. fun gibt eine Matrix der Größe n-mal-m zurück, wobei m die Anzahl der Zielfunktionen ist. Siehe Vectorize the Fitness Function.

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

Datentypen: char | function_handle | string

Anzahl der Variablen, angegeben als positive Ganzzahl. Der Solver übergibt Zeilenvektoren der Länge nvars bis fun.

Beispiel: 4

Datentypen: double

Lineare Ungleichheitsbeschränkungen, angegeben als reelle Matrix. A ist eine M-mal-nvars-Matrix, wobei M die Anzahl der Ungleichungen ist.

A kodiert die M linearen Ungleichungen

A*x <= b,

wobei x der Spaltenvektor mit nvars-Variablen x(:) und b ein Spaltenvektor mit M-Elementen ist.

Geben Sie beispielsweise die Einschränkungen A = [1,2;3,4;5,6] und b = [10;20;30] an, um diese Summen anzugeben:

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

Beispiel: Um die Summe der x-Komponenten auf 1 oder weniger zu setzen, nehmen Sie A = ones(1,N) und b = 1.

Datentypen: double

Lineare Ungleichheitsbeschränkungen, angegeben als reeller Vektor. b ist ein M-Element-Vektor, der mit der A-Matrix in Beziehung steht. Wenn Sie b als Zeilenvektor übergeben, konvertieren Solver b intern in den Spaltenvektor b(:).

b kodiert die M linearen Ungleichungen

A*x <= b,

wobei x der Spaltenvektor der nvars Variablen x(:) und A eine Matrix der Größe M-mal-nvars ist.

Geben Sie beispielsweise die Einschränkungen A = [1,2;3,4;5,6] und b = [10;20;30] an, um diese Summen anzugeben:

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

Beispiel: Um die Summe der x-Komponenten auf 1 oder weniger zu setzen, nehmen Sie A = ones(1,N) und b = 1.

Datentypen: double

Lineare Gleichheitsbeschränkungen, angegeben als reelle Matrix. Aeq ist eine Me-mal-nvars-Matrix, wobei Me die Anzahl der Gleichheiten ist.

Aeq kodiert die Me linearen Gleichungen

Aeq*x = beq,

wobei x der Spaltenvektor mit nvars-Variablen x(:) und beq ein Spaltenvektor mit Me-Elementen ist.

Geben Sie beispielsweise die Einschränkungen Aeq = [1,2,3;2,4,1] und beq = [10;20] an, um diese Summen anzugeben:

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

Beispiel: Um die Summe der x-Komponenten auf 1 zu setzen, nehmen Sie Aeq = ones(1,N) und beq = 1.

Datentypen: double

Lineare Gleichheitsbeschränkungen, angegeben als reeller Vektor. beq ist ein Me-Element-Vektor, der mit der Aeq-Matrix in Beziehung steht. Wenn Sie beq als Zeilenvektor übergeben, konvertieren Solver beq intern in den Spaltenvektor beq(:).

beq kodiert die Me linearen Gleichungen

Aeq*x = beq,

wobei x der Spaltenvektor der nvars Variablen x(:) und Aeq eine Matrix der Größe Meq-mal-N ist.

Geben Sie beispielsweise die Einschränkungen Aeq = [1,2,3;2,4,1] und beq = [10;20] an, um diese Summen anzugeben:

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

Beispiel: Um die Summe der x-Komponenten auf 1 zu setzen, nehmen Sie Aeq = ones(1,N) und beq = 1.

Datentypen: double

Untergrenzen, angegeben als reeller Vektor oder reelles Array. Wenn numel(lb) = nvars, dann gibt lb an, dass x(i) >= lb(i) für alle i gilt.

Wenn numel(lb) < nvars, dann gibt lb an, dass x(i) >= lb(i) für 1 <= i <= numel(lb) gilt.

In diesem Fall geben die Löser eine Warnung aus.

Beispiel: Um alle x-Komponenten als positiv festzulegen, setzen Sie lb = zeros(nvars,1).

Datentypen: double

Obergrenzen, angegeben als reeller Vektor oder reelles Array. Wenn numel(ub) = nvars, dann gibt ub an, dass x(i) <= ub(i) für alle i gilt.

Wenn numel(ub) < nvars, dann gibt ub an, dass x(i) <= ub(i) für 1 <= i <= numel(ub) gilt.

In diesem Fall geben die Löser eine Warnung aus.

Beispiel: Um alle X-Komponenten als kleiner als eins festzulegen, setzen Sie ub = ones(nvars,1).

Datentypen: double

Nichtlineare Einschränkungen, angegeben als Funktionshandle oder Funktionsname. nonlcon ist eine Funktion, die einen Zeilenvektor x akzeptiert und zwei Zeilenvektoren zurückgibt, c(x) und ceq(x).

  • c(x) ist der Zeilenvektor der nichtlinearen Ungleichheitsbeschränkungen bei x. Die Funktion gamultiobj versucht, c(x) <= 0 für alle Einträge von c zu erfüllen.

  • ceq(x) ist der Zeilenvektor mit nichtlinearer Gleichheitsbeschränkung bei x. Die Funktion gamultiobj versucht, ceq(x) = 0 für alle Einträge von ceq zu erfüllen.

Wenn Sie die Option UseVectorized auf true setzen, akzeptiert nonlcon eine Matrix der Größe n-mal-nvars, wobei die Matrix n Individuen darstellt. nonlcon gibt im ersten Argument eine Matrix der Größe n-mal-mc zurück, wobei mc die Anzahl der nichtlinearen Ungleichheitsbeschränkungen ist. nonlcon gibt im zweiten Argument eine Matrix der Größe n-mal-mceq zurück, wobei mceq die Anzahl der nichtlinearen Gleichheitsbeschränkungen ist. Siehe Vectorize the Fitness Function.

Beispielsweise x = gamultiobj(@myfun,nvars,A,b,Aeq,beq,lb,ub,@mycon), wobei mycon eine MATLAB®-Funktion wie die folgende ist:

function [c,ceq] = mycon(x)
c = ...     % Compute nonlinear inequalities at x.
ceq = ...   % Compute nonlinear equalities at x.

Weitere Informationen finden Sie unter Nonlinear Constraints.

Datentypen: char | function_handle | string

Optimierungsoptionen, angegeben als Ausgabe von optimoptions oder einer Struktur. Siehe Optionsdetails in Genetic Algorithm Options.

optimoptions verbirgt die kursiv aufgeführten Optionen. Siehe Options that optimoptions Hides.

  • Werte in {} bezeichnen den Standardwert.

  • {}* stellt den Standard dar, wenn lineare Einschränkungen vorliegen, und für MutationFcn auch, wenn Grenzen vorhanden sind.

  • I* gibt an, dass der Solver Optionen für ganzzahlige Einschränkungen anders behandelt.

  • NM gibt an, dass die Option nicht für gamultiobj gilt.

Optionen für ga und gamultiobj

OptionBeschreibungWerte
ConstraintTolerance

Bestimmt die Machbarkeit im Hinblick auf nichtlineare Einschränkungen. Außerdem bestimmt max(sqrt(eps),ConstraintTolerance) die Machbarkeit im Hinblick auf lineare Einschränkungen.

Verwenden Sie für eine Optionsstruktur TolCon.

Nichtnegativer Skalar | {1e-3}

CreationFcn

Funktion, die die Anfangspopulation erstellt. Geben Sie den Namen einer integrierten Erstellungsfunktion oder einen Funktions-Handle an. Siehe Population Options.

{'gacreationuniform'} | {'gacreationlinearfeasible'}* | 'gacreationnonlinearfeasible' | {'gacreationuniformint'}I* für ga | {'gacreationsobol'}I* für gamultiobj | Funktion zur benutzerdefinierten Erstellung

CrossoverFcn

Funktion, die der Algorithmus zum Erstellen von Crossover-Kindern verwendet. Geben Sie den Namen einer integrierten Crossover-Funktion oder eines Funktions-Handles an. Siehe Crossover Options.

{'crossoverscattered'} für ga, {'crossoverintermediate'}* für gamultiobj | {'crossoverlaplace'}I* | 'crossoverheuristic' | 'crossoversinglepoint' | 'crossovertwopoint' | 'crossoverarithmetic' | Benutzerdefinierte Crossover-Funktion

CrossoverFraction

Der Anteil der Population der nächsten Generation (ohne Elitekinder), der durch die Crossover-Funktion entsteht.

Nichtnegativer Skalar | {0.8}

Display

Anzeigeebene.

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

DistanceMeasureFcn

Funktion, die das Distanzmaß von Einzelpersonen berechnet. Geben Sie als Namen eine integrierte Funktion zur Entfernungsmessung oder einen Funktions-Handle an. Der Wert bezieht sich auf die Entscheidungsvariable bzw. den Designraum (Genotyp) oder auf den Funktionenraum (Phänotyp). Der Standardwert 'distancecrowding' liegt im Funktionsraum (Phänotyp). Nur für gamultiobj. Siehe Multiobjective Options.

Verwenden Sie für eine Optionsstruktur einen Funktionshandle, keinen Namen.

{'distancecrowding'} bedeutet dasselbe wie {@distancecrowding,'phenotype'} | {@distancecrowding,'genotype'} | Benutzerdefinierte Distanzfunktion

EliteCount

NM Positive Ganzzahl, die angibt, wie viele Individuen der aktuellen Generation garantiert bis zur nächsten Generation überleben. Wird in gamultiobj nicht verwendet.

Nichtnegative ganze Zahl | {ceil(0.05*PopulationSize)} | {0.05*(default PopulationSize)} für gemischt-ganzzahlige Probleme

FitnessLimit

NM Wenn die Fitnessfunktion den Wert von FitnessLimit erreicht, wird der Algorithmus angehalten.

Skalar | {-Inf}

FitnessScalingFcn

Funktion, die die Werte der Fitnessfunktion skaliert. Geben Sie den Namen einer integrierten Skalierungsfunktion oder eines Funktionshandles an. Option für gamultiobj nicht verfügbar.

{'fitscalingrank'} | 'fitscalingshiftlinear' | 'fitscalingprop' | 'fitscalingtop' | Benutzerdefinierte Fitness-Skalierungsfunktion

FunctionTolerance

Der Algorithmus wird beendet, wenn die durchschnittliche relative Änderung des besten Fitnessfunktionswerts über MaxStallGenerations Generationen kleiner oder gleich FunctionTolerance ist. Wenn StallTest 'geometricWeighted' ist, wird der Algorithmus beendet, wenn die gewichtete durchschnittliche relative Änderung kleiner oder gleich FunctionTolerance ist.

Bei gamultiobj stoppt der Algorithmus, wenn der geometrische Durchschnitt der relativen Wertänderung der Streuung über options.MaxStallGenerations Generationen kleiner ist als options.FunctionTolerance und die endgültige Streuung kleiner ist als die durchschnittliche Streuung über die letzten options.MaxStallGenerations Generationen. Siehe gamultiobj Algorithm.

Verwenden Sie für eine Optionsstruktur TolFun.

Nichtnegativer Skalar | {1e-6} für ga, {1e-4} für gamultiobj

HybridFcn

I* Funktion, die die Optimierung fortsetzt, nachdem ga beendet wurde. Geben Sie es als Namen oder als Funktionshandle an.

Alternativ ein Zellenarray, das die Hybridfunktion und ihre Optionen angibt. Siehe ga Hybrid Function.

Für gamultiobj ist @fgoalattain die einzige Hybridfunktion. Siehe gamultiobj Hybrid Function.

Wenn das Problem ganzzahlige Einschränkungen aufweist, können Sie keine Hybridfunktion verwenden.

Siehe Wann wird eine Hybridfunktion verwendet?.

Funktionsname oder Handle | 'fminsearch' | 'patternsearch' | 'fminunc' | 'fmincon' | {[]}

oder

1 x 2 Zellen-Array | {@solver, hybridoptions}, wobei solver = fminsearch, patternsearch, fminunc oder fmincon {[]}

InitialPenalty

NM I* Anfangswert des Strafparameters

Positiver Skalar | {10}

InitialPopulationMatrix

Anfangspopulation, die zum Seeding des genetischen Algorithmus verwendet wird. Hat bis zu PopulationSize Zeilen und N Spalten, wobei N die Anzahl der Variablen ist. Sie können eine Teilpopulation übergeben, also eine mit weniger als PopulationSize Zeilen. In diesem Fall verwendet der genetische Algorithmus CreationFcn, um die verbleibenden Populationsmitglieder zu generieren. Siehe Population Options.

Verwenden Sie für eine Optionsstruktur InitialPopulation.

Matrix | {[]}

InitialPopulationRange

Matrix oder Vektor, der den Bereich der Individuen in der Ausgangspopulation angibt. Gilt für die gacreationuniform-Erstellungsfunktion. ga verschiebt und skaliert den standardmäßigen Anfangsbereich, um ihn an alle endlichen Grenzen anzupassen.

Verwenden Sie für eine Optionsstruktur PopInitRange.

Matrix oder Vektor | {[-10;10]} für unbegrenzte Komponenten, {[-1e4+1;1e4+1]} für unbegrenzte Komponenten von Problemen mit ganzzahligen Einschränkungen, {[lb;ub]} für begrenzte Komponenten, wobei der Standardbereich so geändert wird, dass er einseitigen Grenzen entspricht

InitialScoresMatrix

Erste Werte werden zur Bestimmung der Fitness verwendet. Hat bis zu PopulationSize Zeilen und Nf Spalten, wobei Nf die Anzahl der Fitnessfunktionen ist (1 für ga, größer als 1 für gamultiobj). Sie können eine Matrix mit Teilpunktzahlen übergeben, also eine mit weniger als PopulationSize Zeilen. In diesem Fall trägt der Löser die Werte ein, wenn er die Fitnessfunktionen auswertet.

Verwenden Sie für eine Optionsstruktur InitialScores.

Spaltenvektor für Einzelziel | Matrix für Mehrfachziel | {[]}

MaxGenerations

Maximale Anzahl von Iterationen, bevor der Algorithmus angehalten wird.

Verwenden Sie für eine Optionsstruktur Generations.

Nichtnegative ganze Zahl |{100*numberOfVariables} für ga, {200*numberOfVariables} für gamultiobj

MaxStallGenerations

Der Algorithmus wird beendet, wenn die durchschnittliche relative Änderung des besten Fitnessfunktionswerts über MaxStallGenerations Generationen kleiner oder gleich FunctionTolerance ist. Wenn StallTest 'geometricWeighted' ist, wird der Algorithmus beendet, wenn die gewichtete durchschnittliche relative Änderung kleiner oder gleich FunctionTolerance ist.

Bei gamultiobj stoppt der Algorithmus, wenn der geometrische Durchschnitt der relativen Wertänderung der Streuung über options.MaxStallGenerations Generationen kleiner ist als options.FunctionTolerance und die endgültige Streuung kleiner ist als die durchschnittliche Streuung über die letzten options.MaxStallGenerations Generationen. Siehe gamultiobj Algorithm.

Verwenden Sie für eine Optionsstruktur StallGenLimit.

Nichtnegative Ganzzahl | {50} für ga, {100} für gamultiobj

MaxStallTime

NM Der Algorithmus wird angehalten, wenn sich die Zielfunktion MaxStallTime Sekunden lang nicht verbessert (gemessen mit tic und toc).

Verwenden Sie für eine Optionsstruktur StallTimeLimit.

Positiver Skalar | {Inf}

MaxTime

Der Algorithmus wird nach MaxTime Sekunden gestoppt, gemessen mit tic und toc. Dieses Limit wird nach jeder Iteration erzwungen, sodass ga das Limit überschreiten kann, wenn eine Iteration sehr viel Zeit in Anspruch nimmt.

Verwenden Sie für eine Optionsstruktur TimeLimit.

Nichtnegativer Skalar | {Inf}

Migrationsrichtung

Richtung der Migration. Siehe Migration Options.

'both' | {'forward'}

Migrationsanteil

Skalar von 0 bis 1, der den Anteil der Individuen in jeder Subpopulation angibt, die in eine andere Subpopulation migrieren. Siehe Migration Options.

Skalar | {0.2}

Migrationsintervall

Positive Ganzzahl, die die Anzahl der Generationen angibt, die zwischen Migrationen von Individuen zwischen Subpopulationen stattfinden. Siehe Migration Options.

Positive Ganzzahl | {20}

MutationFcn

Funktion, die Mutationskinder erzeugt. Geben Sie den Namen einer integrierten Mutationsfunktion oder einen Funktionshandle an. Siehe Mutation Options.

{'mutationgaussian'} für ga ohne Einschränkungen | {'mutationadaptfeasible'}* für gamultiobj und für ga mit Einschränkungen | {'mutationpower'}I* | 'mutationpositivebasis' | 'mutationuniform' | Benutzerdefinierte Mutationsfunktion

NonlinearConstraintAlgorithm

Nichtlinearer Einschränkungsalgorithmus. Siehe Nichtlineare Constraint-Solver-Algorithmen für genetische Algorithmen. Option für gamultiobj nicht änderbar.

Verwenden Sie für eine Optionsstruktur NonlinConAlgorithm.

{'auglag'} für ga, {'penalty'} für gamultiobj

OutputFcn

Funktionen, die ga bei jeder Iteration aufruft. Geben Sie es als Funktionshandle oder als Zellenarray von Funktionshandles an. Siehe Output Function Options.

Verwenden Sie für eine Optionsstruktur OutputFcns.

Funktions-Handle oder Zellen-Array von Funktions-Handles | {[]}

ParetoFraction

Skalar von 0 bis 1, der den Anteil der Individuen angibt, der an der ersten Pareto-Front bleiben soll, während der Solver Individuen von höheren Fronten auswählt, nur für gamultiobj. Siehe Multiobjective Options.

Skalar | {0.35}

PenaltyFactor

NM I* Parameter zur Aktualisierung der Strafe.

Positiver Skalar | {100}

PlotFcn

Funktion, die vom Algorithmus berechnete Daten darstellt. Geben Sie als Namen einer integrierten Plotfunktion einen Funktionshandle oder ein Zellenarray aus integrierten Namen oder Funktionshandles an. Siehe Plot Options.

Verwenden Sie für eine Optionsstruktur PlotFcns.

ga oder gamultiobj: {[]} | 'gaplotdistance' | 'gaplotgenealogy' | 'gaplotselection' | 'gaplotscorediversity' |'gaplotscores' | 'gaplotstopping' | 'gaplotmaxconstr' | Benutzerdefinierte Plotfunktion

Nur ga: 'gaplotbestf' | 'gaplotbestindiv' | 'gaplotexpectation' | 'gaplotrange'

Nur gamultiobj: 'gaplotpareto' | 'gaplotparetodistance' | 'gaplotrankhist' | 'gaplotspread'

PlotIntervall

Positive Ganzzahl, die die Anzahl der Generationen zwischen aufeinanderfolgenden Aufrufen der Plotfunktionen angibt.

Positive Ganzzahl | {1}

PopulationSize

Größe der Population

Positive Ganzzahl | {50} wenn numberOfVariables <= 5, {200} andernfalls | {min(max(10*nvars,40),100)} für gemischt-ganzzahlige Probleme

PopulationType

Datentyp der Population. Muss für gemischt-ganzzahlige Probleme 'doubleVector' sein.

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

ga ignoriert alle Einschränkungen, wenn PopulationType auf 'bitString' oder 'custom' gesetzt ist. Siehe Population Options.

SelectionFcn

Funktion, die Eltern von Crossover- und Mutationskindern auswählt. Geben Sie den Namen einer integrierten Auswahlfunktion oder einen Funktions-Handle an.

gamultiobj verwendet nur 'selectiontournament'.

{'selectionstochunif'} für ga, {'selectiontournament'} für gamultiobj | 'selectionremainder' | 'selectionuniform' | 'selectionroulette' | Benutzerdefinierte Auswahlfunktion

StallTest

NM Testtyp wird gestoppt.

'geometricWeighted' | {'averageChange'}

UseParallel

Berechnen Sie Fitness- und nichtlineare Einschränkungsfunktionen parallel. Siehe Vectorize and Parallel Options (User Function Evaluation) und How to Use Parallel Processing in Global Optimization Toolbox.

true | {false}

UseVectorized

Gibt an, ob Funktionen vektorisiert sind. Siehe Vectorize and Parallel Options (User Function Evaluation) und Vectorize the Fitness Function.

Verwenden Sie für eine Optionsstruktur Vectorized mit den Werten 'on' oder 'off'.

true | {false}

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

Ganzzahlvariablen, angegeben als Vektor positiver Ganzzahlen mit Werten von 1 bis nvars. Jeder Wert in intcon stellt eine x-Komponente dar, die einen ganzzahligen Wert hat.

Hinweis

Wenn intcon nicht leer ist, muss nonlcon für ceq leer zurückgeben.

Beispiel: Um anzugeben, dass die geraden Einträge in x ganzzahlige Werte sind, setzen Sie intcon auf 2:2:nvars

Datentypen: double

Problembeschreibung, angegeben als Struktur, die diese Felder enthält.

fitnessfcn

Fitnessfunktionen

nvars

Anzahl der Entwurfsvariablen

Aineq

A-Matrix für lineare Ungleichheitsbeschränkungen

Bineq

b-Vektor für lineare Ungleichheitsbeschränkungen

Aeq

Aeq-Matrix für lineare Gleichheitsbeschränkungen

Beq

beq-Vektor für lineare Gleichheitsbeschränkungen

lb

Untergrenze für x

ub

Obergrenze für x

nonlcon

Nichtlineare Zwangsfunktionen

intconIndizes von Ganzzahl-Variablen
rngstate

Feld zum Zurücksetzen des Zustands des Zufallszahlengenerators

solver

'gamultiobj'

options

Mit optimoptions oder einer Optionsstruktur erstellte Optionen

Sie müssen die Felder fitnessfcn, nvars und options angeben. Der Rest ist für gamultiobj optional.

Datentypen: struct

Ausgabeargumente

alle reduzieren

Pareto-Punkte, zurückgegeben als m-mal-nvars-Array, wobei m die Anzahl der Punkte auf der Pareto-Front ist. Jede Zeile von x stellt einen Punkt auf der Pareto-Front dar.

Funktionswerte auf der Pareto-Front, zurückgegeben als m-mal-nf-Array. m ist die Anzahl der Punkte auf der Pareto-Front und nf ist die Anzahl der Fitnessfunktionen. Jede Zeile von fval stellt die Funktionswerte an einem Pareto-Punkt in x dar.

Grund: gamultiobj wurde gestoppt, als Ganzzahl zurückgegeben.

exitflag-WertAbbruchbedingung
1

Der geometrische Durchschnitt der relativen Wertänderung der Streuung über options.MaxStallGenerations Generationen ist kleiner als options.FunctionTolerance, und die endgültige Streuung ist kleiner als die durchschnittliche Streuung über die letzten options.MaxStallGenerations Generationen

0

Maximale Anzahl an Generationen überschritten

-1

Optimierung durch eine Ausgabefunktion oder Plotfunktion beendet

-2

Kein durchführbarer Punkt gefunden

-5

Zeitlimit überschritten

Informationen zum Optimierungsprozess, die als Struktur mit diesen Feldern zurückgegeben werden.

AusgabefeldBedeutung
problemtype

Art des Problems:

  • 'unconstrained' – Keine Einschränkungen

  • 'boundconstraints' – Nur gebundene Einschränkungen

  • 'linearconstraints' – Lineare Einschränkungen, mit oder ohne gebundene Einschränkungen

  • 'nonlinearconstr' – Nichtlineare Einschränkungen, mit oder ohne andere Arten von Einschränkungen

rngstate

Zustand des MATLAB-Zufallszahlengenerators, unmittelbar vor dem Start des Algorithmus. Sie können die Werte in rngstate verwenden, um die Ausgabe von gamultiobj zu reproduzieren. Siehe Reproduce Results.

generationsGesamtzahl der Generationen, ausgenommen HybridFcn-Iterationen.
funccountGesamtzahl der Funktionsauswertungen.
messagegamultiobj-Beendigungsmeldung.
averagedistanceDurchschnittliche „Distanz“, die standardmäßig die Standardabweichung der Norm der Differenz zwischen Pareto-Frontmitgliedern und ihrem Mittelwert ist.
spreadKombination aus der „Distanz“ und einem Maß für die Bewegung der Punkte auf der Pareto-Front zwischen den letzten beiden Iterationen.
maxconstraintMaximale Einschränkungsverletzung beim letzten Pareto-Satz.

Endgültige Population, zurückgegeben als n-mal-nvars-Array, wobei n die Anzahl der Mitglieder der Population ist.

Werte der endgültigen Population, zurückgegeben als n-mal-nf-Array. n ist die Anzahl der Mitglieder der Population und nf die Anzahl der Fitnessfunktionen.

Wenn nichtlineare Einschränkungen vorliegen, setzt gamultiobj den scores der nicht realisierbaren Populationsmitglieder auf Inf.

Mehr über

alle reduzieren

Algorithmen

gamultiobj verwendet einen kontrollierten, elitären genetischen Algorithmus (eine Variante von NSGA-II [1]). Ein elitärer GA bevorzugt immer Personen mit besserem Fitnesswert (Rang). Eine kontrollierte, elitäre GA bevorzugt zudem Individuen, die zur Erhöhung der Diversität der Population beitragen können, selbst wenn sie einen geringeren Fitnesswert aufweisen. Für die Konvergenz zu einer optimalen Pareto-Front ist es wichtig, die Vielfalt der Population aufrechtzuerhalten. Die Vielfalt wird durch die Kontrolle der Elitemitglieder der Population im Verlauf des Algorithmus aufrechterhalten. Zwei Optionen, ParetoFraction und DistanceMeasureFcn, steuern den Elitismus. ParetoFraction begrenzt die Anzahl der Personen an der Pareto-Front (Elitemitglieder). Die von DistanceMeasureFcn ausgewählte Distanzfunktion trägt dazu bei, die Vielfalt an einer Front aufrechtzuerhalten, indem sie Individuen bevorzugt, die an der Front relativ weit entfernt sind. Der Algorithmus stoppt, wenn die Spanne, ein Maß für die Bewegung der Pareto-Front, klein ist. Einzelheiten finden Sie unter gamultiobj Algorithm.

Alternative Funktionalität

App

Die Aufgabe Live-Editor optimieren bietet eine visuelle Schnittstelle für gamultiobj.

Referenzen

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

Erweiterte Fähigkeiten

alle erweitern

Versionsverlauf

Eingeführt in R2007b