exponenta event banner

fgoalattain

Решение многообъективных задач достижения целей

Описание

fgoalattain решает задачу достижения цели, формулируя для минимизации задачи многообъективной оптимизации.

fgoalattain находит минимум проблемы, указанный в

minimizex,  γ  γ , так что {F (x) −weight⋅γ≤goalc (x) ≤0ceq (x) =0A⋅x≤bAeq⋅x=beqlb≤x≤ub.

weight, goal, b и beq являются векторами, A и Aeq являются матрицами, а F (x), c (x) и ceq (x) являются функциями, которые возвращают векторы. F (x), c (x) и ceq (x) могут быть нелинейными функциями.

x, lb и ub могут быть переданы в виде векторов или матриц; см. Аргументы матрицы.

пример

x = fgoalattain(fun,x0,goal,weight) пытается сделать объективные функции, предоставляемые fun достичь целей, указанных в goal путем изменения x, начиная с x0, с весом, указанным weight.

Примечание

В разделе Передача дополнительных параметров (Passing Extra Parameters) объясняется, как при необходимости передавать дополнительные параметры целевым функциям и функциям нелинейных ограничений.

пример

x = fgoalattain(fun,x0,goal,weight,A,b) решает проблему достижения цели с учетом неравенства A*x ≤ b.

x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq) решает задачу достижения цели при условии равенства Aeq*x = beq. Если неравенства не существует, установите A = [] и b = [].

пример

x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub) решает задачу достижения цели, подчиняясь границам lb  x  ub. Если равенства отсутствуют, установите Aeq = [] и beq = []. Если x(i) не ограничен ниже, набор lb(i) = -Inf; если x(i) не ограничен выше, набор ub(i) = Inf.

Примечание

Если указанные входные границы для проблемы противоречивы, вывод x является x0 и выходные данные fval является [].

пример

x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon) решает задачу достижения цели с учетом нелинейных неравенств c(x) или равенства ceq(x) определено в nonlcon. fgoalattain оптимизирует так, что c(x) ≤ 0 и ceq(x) = 0. Если границ не существует, установите lb = [] или ub = []или и то и другое.

пример

x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options) решает задачу достижения цели с помощью опций оптимизации, указанных в options. Использовать optimoptions для установки этих параметров.

x = fgoalattain(problem) решает задачу достижения цели для problem, структура, описанная в problem.

пример

[x,fval] = fgoalattain(___)для любого синтаксиса возвращает значения целевых функций, вычисленных в fun на решении x.

пример

[x,fval,attainfactor,exitflag,output] = fgoalattain(___) дополнительно возвращает коэффициент достижения в решении x, значение exitflag который описывает условие выхода fgoalattainи структура output с информацией о процессе оптимизации.

пример

[x,fval,attainfactor,exitflag,output,lambda] = fgoalattain(___) дополнительно возвращает структуру lambda чьи поля содержат множители Лагранжа в решении x.

Примеры

свернуть все

Рассмотрим функцию с двумя целями

F (x) = [2 + (x-3) 25 + x2/4].

Эта функция четко минимизирует F1 (x) при x = 3, достигая значения 2, и минимизирует F2 (x) при x = 0, достигая значения 5.

Установите цель [3,6] и вес [1,1] и решите задачу достижения цели, начиная с x0 = 1.

fun = @(x)[2+(x-3)^2;5+x^2/4];
goal = [3,6];
weight = [1,1];
x0 = 1;
x = fgoalattain(fun,x0,goal,weight)
Local minimum possible. Constraints satisfied.

fgoalattain stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 2.0000

Найдите значение F (x) в решении.

fun(x)
ans = 2×1

    3.0000
    6.0000

fgoalattain точно достигает поставленных целей.

Целевая функция:

F (x) =[2+‖x-p1‖25+‖x-p2‖2/4].

Вот, p_1 = [2,3] и p_2 = [4,1]. Цель - [3,6], вес - [1,1], линейное ограничение - x1+x2≤4.

Создайте целевую функцию, цель и вес.

p_1 = [2,3];
p_2 = [4,1];
fun = @(x)[2 + norm(x-p_1)^2;5 + norm(x-p_2)^2/4];
goal = [3,6];
weight = [1,1];

Создание матриц линейных ограничений A и b представление A*x <= b.

A = [1,1];
b = 4;

Установите начальную точку [1,1] и решите задачу достижения цели.

x0 = [1,1];
x = fgoalattain(fun,x0,goal,weight,A,b)
Local minimum possible. Constraints satisfied.

fgoalattain stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 1×2

    2.0694    1.9306

Найдите значение F (x) в решении.

fun(x)
ans = 2×1

    3.1484
    6.1484

fgoalattain не отвечает поставленным целям. Поскольку веса равны, решатель недостигает каждую цель на одну и ту же величину.

Целевая функция:

F (x) =[2+‖x-p1‖25+‖x-p2‖2/4].

Вот, p_1 = [2,3] и p_2 = [4,1]. Цель - [3,6], вес - [1,1], границы - 0≤x1≤3, 2≤x2≤5.

Создайте целевую функцию, цель и вес.

p_1 = [2,3];
p_2 = [4,1];
fun = @(x)[2 + norm(x-p_1)^2;5 + norm(x-p_2)^2/4];
goal = [3,6];
weight = [1,1];

Создайте границы.

lb = [0,2];
ub = [3,5];

Установите начальную точку на [1,4] и решите задачу достижения цели.

x0 = [1,4];
A = []; % no linear constraints
b = [];
Aeq = [];
beq = [];
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub)
Local minimum possible. Constraints satisfied.

fgoalattain stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 1×2

    2.6667    2.3333

Найдите значение F (x) в решении.

fun(x)
ans = 2×1

    2.8889
    5.8889

fgoalattain более чем отвечает поставленным целям. Поскольку веса равны, решатель достигает каждой цели на одну и ту же величину.

Целевая функция:

F (x) =[2+‖x-p1‖25+‖x-p2‖2/4].

Вот, p_1 = [2,3] и p_2 = [4,1]. Цель - [3,6], вес - [1,1], нелинейное ограничение - x‖2≤4.

Создайте целевую функцию, цель и вес.

p_1 = [2,3];
p_2 = [4,1];
fun = @(x)[2 + norm(x-p_1)^2;5 + norm(x-p_2)^2/4];
goal = [3,6];
weight = [1,1];

Нелинейная функция ограничения находится в norm4.m файл.

type norm4
function [c,ceq] = norm4(x)
ceq = [];
c = norm(x)^2 - 4;

Создайте пустые входные аргументы для линейных ограничений и границ.

A = [];
Aeq = [];
b = [];
beq = [];
lb = [];
ub = [];

Установите начальную точку на [1,1] и решите задачу достижения цели.

x0 = [1,1];
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,@norm4)
Local minimum possible. Constraints satisfied.

fgoalattain stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 1×2

    1.1094    1.6641

Найдите значение F (x) в решении.

fun(x)
ans = 2×1

    4.5778
    7.1991

fgoalattain не отвечает поставленным целям. Несмотря на равные веса, F1 (x) находится около 1,58 от своей цели 3, а F2 (x) - около 1,2 от своей цели 6. Нелинейное ограничение предотвращает решениеx от достижения целей в равной степени.

Мониторинг процесса решения достижения цели путем установки параметров для возврата итеративного отображения.

options = optimoptions('fgoalattain','Display','iter');

Целевая функция:

F (x) =[2+‖x-p1‖25+‖x-p2‖2/4].

Вот, p_1 = [2,3] и p_2 = [4,1]. Цель - [3,6], вес - [1,1], линейное ограничение - x1+x2≤4.

Создайте целевую функцию, цель и вес.

p_1 = [2,3];
p_2 = [4,1];
fun = @(x)[2 + norm(x-p_1)^2;5 + norm(x-p_2)^2/4];
goal = [3,6];
weight = [1,1];

Создание матриц линейных ограничений A и b представление A*x <= b.

A = [1,1];
b = 4;

Создайте пустые входные аргументы для линейных ограничений равенства, границ и нелинейных ограничений.

Aeq = [];
beq = [];
lb = [];
ub = [];
nonlcon = [];

Установите начальную точку [1,1] и решите задачу достижения цели.

x0 = [1,1];
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options)
                 Attainment        Max     Line search     Directional 
 Iter F-count        factor    constraint   steplength      derivative   Procedure 
    0      4              0             4                                            
    1      9             -1           2.5            1          -0.535     
    2     14     -5.194e-09        0.2813            1           0.883     
    3     19         0.1452      0.005926            1           0.883     
    4     24         0.1484     2.868e-06            1           0.883     
    5     29         0.1484     6.839e-13            1           0.883    Hessian modified  

Local minimum possible. Constraints satisfied.

fgoalattain stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 1×2

    2.0694    1.9306

Положительное значение сообщенного коэффициента достижения указывает на то, что fgoalattain не находит решения, удовлетворяющего поставленным целям.

Целевая функция:

F (x) =[2+‖x-p1‖25+‖x-p2‖2/4].

Вот, p_1 = [2,3] и p_2 = [4,1]. Цель - [3,6], вес - [1,1], линейное ограничение - x1+x2≤4.

Создайте целевую функцию, цель и вес.

p_1 = [2,3];
p_2 = [4,1];
fun = @(x)[2 + norm(x-p_1)^2;5 + norm(x-p_2)^2/4];
goal = [3,6];
weight = [1,1];

Создание матриц линейных ограничений A и b представление A*x <= b.

A = [1,1];
b = 4;

Установите начальную точку [1,1] и решите задачу достижения цели. Запросить значение целевой функции.

x0 = [1,1];
[x,fval] = fgoalattain(fun,x0,goal,weight,A,b)
Local minimum possible. Constraints satisfied.

fgoalattain stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 1×2

    2.0694    1.9306

fval = 2×1

    3.1484
    6.1484

Значения целевой функции выше цели, т.е. fgoalattain не удовлетворяет поставленной цели.

Целевая функция:

F (x) =[2+‖x-p1‖25+‖x-p2‖2/4].

Вот, p_1 = [2,3] и p_2 = [4,1]. Цель - [3,6], вес - [1,1], линейное ограничение - x1+x2≤4.

Создайте целевую функцию, цель и вес.

p_1 = [2,3];
p_2 = [4,1];
fun = @(x)[2 + norm(x-p_1)^2;5 + norm(x-p_2)^2/4];
goal = [3,6];
weight = [1,1];

Создание матриц линейных ограничений A и b представление A*x <= b.

A = [1,1];
b = 4;

Установите начальную точку [1,1] и решите задачу достижения цели. Запрос значения целевой функции, коэффициента достижения, флага выхода, структуры вывода и множителей Лагранжа.

x0 = [1,1];
[x,fval,attainfactor,exitflag,output,lambda] = fgoalattain(fun,x0,goal,weight,A,b)
Local minimum possible. Constraints satisfied.

fgoalattain stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 1×2

    2.0694    1.9306

fval = 2×1

    3.1484
    6.1484

attainfactor = 0.1484
exitflag = 4
output = struct with fields:
         iterations: 6
          funcCount: 29
       lssteplength: 1
           stepsize: 4.1263e-13
          algorithm: 'active-set'
      firstorderopt: []
    constrviolation: 6.8393e-13
            message: '...'

lambda = struct with fields:
         lower: [2x1 double]
         upper: [2x1 double]
         eqlin: [0x1 double]
      eqnonlin: [0x1 double]
       ineqlin: 0.5394
    ineqnonlin: [0x1 double]

Положительное значение attainfactor указывает, что цели не достигнуты; вы также можете увидеть это, сравнивая fval с goal.

lambda.ineqlin значение ненулевое, что указывает на то, что линейное неравенство ограничивает решение.

Целевая функция:

F (x) =[2+‖x-p1‖25+‖x-p2‖2/4].

Вот, p_1 = [2,3] и p_2 = [4,1]. Цель - [3,6], а начальный вес - [1,1].

Создайте целевую функцию, цель и начальный вес.

p_1 = [2,3];
p_2 = [4,1];
fun = @(x)[2 + norm(x-p_1)^2;5 + norm(x-p_2)^2/4];
goal = [3,6];
weight = [1,1];

Задайте x1+x2≤4 линейной зависимости.

A = [1 1];
b = 4;

Решение задачи достижения цели начиная с момента x0 = [1 1].

x0 = [1 1];
[x,fval] = fgoalattain(fun,x0,goal,weight,A,b)
Local minimum possible. Constraints satisfied.

fgoalattain stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 1×2

    2.0694    1.9306

fval = 2×1

    3.1484
    6.1484

Каждый компонент fval выше соответствующего компонента goal, указывая, что цели не достигнуты.

Повышение важности достижения первой цели путем установления weight(1) до меньшего значения.

weight(1) = 1/10;
[x,fval] = fgoalattain(fun,x0,goal,weight,A,b)
Local minimum possible. Constraints satisfied.

fgoalattain stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 1×2

    2.0115    1.9885

fval = 2×1

    3.0233
    6.2328

Теперь значение fval(1) гораздо ближе к goal(1), тогда как fval(2) находится дальше от goal(2).

Изменение goal(2) 7, что выше текущего решения. Решение изменяется.

goal(2) = 7;
[x,fval] = fgoalattain(fun,x0,goal,weight,A,b)
Local minimum possible. Constraints satisfied.

fgoalattain stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 1×2

    1.9639    2.0361

fval = 2×1

    2.9305
    6.3047

Оба компонента fval меньше соответствующих компонентов goal. Но fval(1) гораздо ближе к goal(1) чем fval(2) является для goal(2). Меньший вес, скорее всего, сделает его компонент почти удовлетворенным, когда цели не могут быть достигнуты, но делает степень достижения меньше, когда цель может быть достигнута.

Измените веса на равные. fval результаты имеют равную дистанцию от своих целей.

weight(2) = 1/10;
[x,fval] = fgoalattain(fun,x0,goal,weight,A,b)
Local minimum possible. Constraints satisfied.

fgoalattain stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 1×2

    1.7613    2.2387

fval = 2×1

    2.6365
    6.6365

Зависимости могут сохранять результирующий fval от того, чтобы быть в равной степени близким к целям. Например, установите верхнее ограничение 2 на x(2).

ub = [Inf,2];
lb = [];
Aeq = [];
beq = [];
[x,fval] = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub)
Local minimum possible. Constraints satisfied.

fgoalattain stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 1×2

    2.0000    2.0000

fval = 2×1

    3.0000
    6.2500

В этом случае fval(1) точно отвечает своей цели, но fval(2) меньше своей цели.

Входные аргументы

свернуть все

Целевые функции, указанные как дескриптор функции или имя функции. fun - функция, принимающая вектор x и возвращает вектор F, объективные функции, оцененные на x. Можно указать функцию fun в качестве дескриптора функции для файла функции:

x = fgoalattain(@myfun,x0,goal,weight)

где myfun является функцией MATLAB ®, такой как

function F = myfun(x)
F = ...         % Compute function values at x.

fun также может быть дескриптором функции для анонимной функции:

x = fgoalattain(@(x)sin(x.*x),x0,goal,weight);

Если пользовательские значения для x и F являются массивами, fgoalattain преобразует их в векторы с помощью линейного индексирования (см. раздел Индексирование массива).

Чтобы сделать объективную функцию как можно ближе к целевому значению (то есть не больше или меньше), используйте optimoptions для установки EqualityGoalCount выбор количества целей, которые должны находиться в окрестности значений целей. Такие цели должны быть разделены на первые элементы вектора F возвращено fun.

Предположим, что градиент целевой функции также может быть вычислен и SpecifyObjectiveGradient опция - true, как установлено:

options = optimoptions('fgoalattain','SpecifyObjectiveGradient',true)

В этом случае функция fun должен возвращать во втором выходном аргументе значение градиента G (матрица) на x. Градиент состоит из частных производных dF/dx каждого F в точке x. Если F - вектор длины m и x имеет длину n, где n - длина x0, то градиент G из F(x) является nоколо-m матрица, где G(i,j) - частная производная F(j) в отношении x(i) (то есть, j4-я колонна G - градиент j3-я целевая функция F(j)).

Примечание

Настройка SpecifyObjectiveGradient кому true эффективен только в том случае, если у задачи нет нелинейных ограничений, или у задачи есть нелинейное ограничение с SpecifyConstraintGradient установить в значение true. Внутри объект складывается в зависимости, поэтому решателю требуются оба градиента (целевой и ограничительный), чтобы избежать оценки градиента.

Типы данных: char | string | function_handle

Начальная точка, заданная как вещественный вектор или вещественный массив. Решатели используют количество элементов в x0 и размер x0 для определения количества и размера переменных, которые fun принимает.

Пример: x0 = [1,2,3,4]

Типы данных: double

Цель достичь, указанная как реальный вектор. fgoalattain пытается найти наименьший множитель γ, который делает эти неравенства сохраняющимися для всех значений i в решении x:

Fi (x) −goali≤weighti γ.

Предполагая, что weight - положительный вектор:

  • Если решатель находит точку x что одновременно достигает всех целей, то коэффициент достижения γ отрицательный, и цели недостижимы.

  • Если решатель не может найти точку x что одновременно достигает всех целей, то коэффициент достижения γ является положительным, и цели недостигнуты.

Пример: [1 3 6]

Типы данных: double

Относительный коэффициент достижения, заданный как действительный вектор. fgoalattain пытается найти наименьший множитель γ, который делает эти неравенства сохраняющимися для всех значений i в решении x:

Fi (x) −goali≤weighti γ.

Когда значения goal все ненулевые, чтобы обеспечить одинаковый процент недостижения или недостижения активных целей, weight кому abs(goal). (Активные цели - это набор целей, которые являются барьерами для дальнейшего улучшения целей в решении.)

Примечание

Установка компонента weight вектор на ноль приводит к тому, что соответствующее ограничение цели рассматривается как жесткое ограничение, а не как ограничение цели. Альтернативным методом установки жесткого ограничения является использование входного аргумента nonlcon.

Когда weight является положительным, fgoalattain пытается сделать целевые функции меньше, чем целевые значения. Чтобы сделать целевые функции больше целевых значений, установите weight быть отрицательным, а не положительным. Сведения о влиянии весов на решение см. в разделе Влияние весов, целей и ограничений при достижении целей.

Чтобы сделать целевую функцию как можно ближе к целевому значению, используйте EqualityGoalCount и укажите цель в качестве первого элемента вектора, возвращаемого fun (см. fun и options). Пример см. в разделе Оптимизация достижения многоцелевых целей.

Пример: abs(goal)

Типы данных: double

Линейные ограничения неравенства, заданные как вещественная матрица. A является Mоколо-N матрица, где M - количество неравенств, и N - количество переменных (количество элементов в x0). По большим проблемам проходите A в виде разреженной матрицы.

A кодирует M линейные неравенства

A*x <= b,

где x - вектор столбца N переменные x(:), и b - вектор столбца с M элементы.

Например, для указания

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

введите следующие ограничения:

A = [1,2;3,4;5,6];
b = [10;20;30];

Пример: Чтобы указать, что компоненты x суммируются до 1 или менее, используйте A = ones(1,N) и b = 1.

Типы данных: double

Линейные ограничения неравенства, заданные как действительный вектор. b является M-элементный вектор, связанный с A матрица. Если вы проходите b как вектор строки, решатели внутренне преобразуют b к вектору столбца b(:). По большим проблемам проходите b как разреженный вектор.

b кодирует M линейные неравенства

A*x <= b,

где x - вектор столбца N переменные x(:), и A является матрицей размера Mоколо-N.

Например, рассмотрим эти неравенства:

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

Задайте неравенства, введя следующие ограничения.

A = [1,2;3,4;5,6];
b = [10;20;30];

Пример: Чтобы указать, что компоненты x суммируются до 1 или менее, используйте A = ones(1,N) и b = 1.

Типы данных: double

Линейные ограничения равенства, заданные как вещественная матрица. Aeq является Meоколо-N матрица, где Me - количество уравнений, и N - количество переменных (количество элементов в x0). По большим проблемам проходите Aeq в виде разреженной матрицы.

Aeq кодирует Me линейные равенства

Aeq*x = beq,

где x - вектор столбца N переменные x(:), и beq - вектор столбца с Me элементы.

Например, для указания

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

введите следующие ограничения:

Aeq = [1,2,3;2,4,1];
beq = [10;20];

Пример: Чтобы указать, что компоненты x суммируются до 1, используйте Aeq = ones(1,N) и beq = 1.

Типы данных: double

Линейные ограничения равенства, заданные как действительный вектор. beq является Me-элементный вектор, связанный с Aeq матрица. Если вы проходите beq как вектор строки, решатели внутренне преобразуют beq к вектору столбца beq(:). По большим проблемам проходите beq как разреженный вектор.

beq кодирует Me линейные равенства

Aeq*x = beq,

где x - вектор столбца N переменные x(:), и Aeq является матрицей размера Meоколо-N.

Например, рассмотрим следующие равенства:

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

Задайте равенства, введя следующие ограничения.

Aeq = [1,2,3;2,4,1];
beq = [10;20];

Пример: Чтобы указать, что компоненты x суммируются до 1, используйте Aeq = ones(1,N) и beq = 1.

Типы данных: double

Нижние границы, определяемые как вещественный вектор или вещественный массив. Если количество элементов в x0 равно количеству элементов в lb, то lb указывает, что

x(i) >= lb(i) для всех i.

Если numel(lb) < numel(x0), то lb указывает, что

x(i) >= lb(i) для 1 <= i <= numel(lb).

Если элементов в меньше lb чем в x0решатели выдают предупреждение.

Пример: Чтобы указать, что все компоненты x являются положительными, используйте lb = zeros(size(x0)).

Типы данных: double

Верхние границы, заданные как вещественный вектор или вещественный массив. Если количество элементов в x0 равно количеству элементов в ub, то ub указывает, что

x(i) <= ub(i) для всех i.

Если numel(ub) < numel(x0), то ub указывает, что

x(i) <= ub(i) для 1 <= i <= numel(ub).

Если элементов в меньше ub чем в x0решатели выдают предупреждение.

Пример: Чтобы указать, что все компоненты x меньше 1, используйте ub = ones(size(x0)).

Типы данных: double

Нелинейные ограничения, указанные как дескриптор функции или имя функции. nonlcon - функция, принимающая вектор или массив; x и возвращает два массива, c(x) и ceq(x).

  • c(x) - массив нелинейных ограничений неравенства в x. fgoalattain попытки удовлетворить

    c(x) <= 0 для всех записей c.

  • ceq(x) - массив нелинейных ограничений равенства в x. fgoalattain попытки удовлетворить

    ceq(x) = 0 для всех записей ceq.

Например,

x = fgoalattain(@myfun,x0,...,@mycon)

где mycon является функцией MATLAB, например:

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

Предположим, что градиенты ограничений также могут быть вычислены, и SpecifyConstraintGradient опция - true, как установлено:

options = optimoptions('fgoalattain','SpecifyConstraintGradient',true)

В этом случае функция nonlcon должен также возвращать в третьем и четвертом выходных аргументах, GC, градиент c(x), и GCeq, градиент ceq(x). См. раздел Нелинейные ограничения (Nonlinear Constraints), в котором объясняется, как «обусловить» градиенты для использования в решателях, которые не принимают заданные градиенты.

Если nonlcon возвращает вектор c из m компоненты и x имеет длину n, где n - длина x0, то градиент GC из c(x) является nоколо-m матрица, где GC(i,j) - частная производная c(j) в отношении x(i) (то есть, j4-я колонна GC - градиент jОграничение неравенства c(j)). Аналогично, если ceq имеет p компоненты, градиент GCeq из ceq(x) является nоколо-p матрица, где GCeq(i,j) - частная производная ceq(j) в отношении x(i) (то есть, j4-я колонна GCeq - градиент jОграничение равенства th ceq(j)).

Примечание

Настройка SpecifyConstraintGradient кому true действует только тогда, когда SpecifyObjectiveGradient имеет значение true. Внутри объект сворачивается в ограничение, поэтому решателю требуются оба градиента (целевой и ограничительный), чтобы избежать оценки градиента.

Примечание

Поскольку функции Optimization Toolbox™ принимают только входные данные типа double, поставляемые пользователем функции объектива и нелинейных ограничений должны возвращать выходы типа double.

Описание параметризации функции нелинейных ограничений см. в разделе Передача дополнительных параметров nonlcon, при необходимости.

Типы данных: char | function_handle | string

Опции оптимизации, указанные как выходные данные optimoptions или структура, такая как optimset возвращает.

Некоторые опции отсутствуют в optimoptions дисплей. Эти параметры выделены курсивом в следующей таблице. Дополнительные сведения см. в разделе Параметры просмотра.

Дополнительные сведения о параметрах с различными именами для optimset, см. Текущие и устаревшие имена опций.

ВыборОписание
ConstraintTolerance

Допуск окончания для нарушения ограничения, положительный скаляр. Значение по умолчанию: 1e-6. См. раздел Допуски и критерии остановки.

Для optimset, имя: TolCon.

Диагностика

Отображение диагностической информации о функции, которая должна быть минимизирована или решена. Выбор: 'on' или 'off' (значение по умолчанию).

DiffMaxChange

Максимальное изменение переменных для градиентов конечных разностей (положительный скаляр). Значение по умолчанию: Inf.

DiffMinChange

Минимальное изменение переменных для градиентов конечных разностей (положительный скаляр). Значение по умолчанию: 0.

Display

Уровень отображения (см. Итерационный просмотр):

  • 'off' или 'none' не отображает выходные данные.

  • 'iter' отображает выходные данные в каждой итерации и выдает сообщение о выходе по умолчанию.

  • 'iter-detailed' отображает выходные данные в каждой итерации и выдает сообщение о техническом выходе.

  • 'notify' отображает выходные данные только в том случае, если функция не сходится, и выдает сообщение о выходе по умолчанию.

  • 'notify-detailed' отображает выходные данные только в том случае, если функция не сходится, и выдает сообщение о техническом выходе.

  • 'final' (по умолчанию) отображает только окончательный вывод и выдает сообщение о выходе по умолчанию.

  • 'final-detailed' отображает только окончательный вывод и выдает сообщение о техническом выходе.

EqualityGoalCount

Количество целей, необходимых для достижения цели fun чтобы равняться цели goal (неотрицательное целое число). Цели должны быть разделены на первые несколько элементов F. Значение по умолчанию: 0. Пример см. в разделе Оптимизация достижения многоцелевых целей.

Для optimset, имя: GoalsExactAchieve.

FiniteDifferenceStepSize

Коэффициент размера шага скаляра или вектора для конечных разностей. При установке FiniteDifferenceStepSize к вектору v, прямые конечные различия delta являются

delta = v.*sign′(x).*max(abs(x),TypicalX);

где sign′(x) = sign(x) кроме sign′(0) = 1. Центральными конечными различиями являются

delta = v.*max(abs(x),TypicalX);

Скаляр FiniteDifferenceStepSize расширяется до вектора. Значение по умолчанию: sqrt(eps) для прямых конечных разностей, и eps^(1/3) для центральных конечных разностей.

Для optimset, имя: FinDiffRelStep.

FiniteDifferenceType

Тип конечных разностей, используемых для оценки градиентов, либо 'forward' (по умолчанию), или 'central' (по центру). 'central' принимает в два раза больше оценок функций, но обычно является более точным.

Алгоритм тщательно соблюдает границы при оценке обоих типов конечных разностей. Например, это может быть обратный шаг, а не прямой шаг, чтобы избежать оценки в точке за пределами границ.

Для optimset, имя: FinDiffType.

FunctionTolerance

Допуск окончания для значения функции (положительный скаляр). Значение по умолчанию: 1e-6. См. раздел Допуски и критерии остановки.

Для optimset, имя: TolFun.

FunValCheck

Проверьте, являются ли действительными значения целевой функции и ограничения. 'on' отображает ошибку, когда целевая функция или ограничения возвращают сложное значение, Inf, или NaN. Дефолт 'off' не отображает ошибки.

MaxFunctionEvaluations

Максимально допустимое число оценок функций (положительное целое число). Значение по умолчанию: 100*numberOfVariables. См. раздел Допуски и критерии остановки, итерации и подсчеты функций.

Для optimset, имя: MaxFunEvals.

MaxIterations

Максимально допустимое число итераций (положительное целое число). Значение по умолчанию: 400. См. раздел Допуски и критерии остановки, итерации и подсчеты функций.

Для optimset, имя: MaxIter.

MaxSQPIter

Максимально допустимое число итераций SQP (положительное целое число). Значение по умолчанию: 10*max(numberOfVariables, numberOfInequalities + numberOfBounds).

MeritFunction

Если для этой опции установлено значение 'multiobj' (по умолчанию), используйте функцию заслуг достижения цели. Если для этой опции установлено значение 'singleobj', используйте fmincon функция заслуг.

OptimalityTolerance

Допуск окончания для оптимальности первого порядка (положительный скаляр). Значение по умолчанию: 1e-6. См. раздел Измерение оптимальности первого порядка.

Для optimset, имя: TolFun.

OutputFcn

Одна или несколько пользовательских функций, вызываемых функцией оптимизации в каждой итерации. Передача дескриптора функции или массива ячеек дескрипторов функции. Значение по умолчанию - нет ([]). См. раздел Функция вывода и синтаксис функции печати.

PlotFcn

Графики, показывающие различные показатели прогресса во время выполнения алгоритма. Выберите из предопределенных графиков или напишите собственные. Передача имени, дескриптора функции или массива ячеек имен или дескрипторов функций. Для пользовательских функций печати передайте дескрипторы функций. Значение по умолчанию - нет ([]).

  • 'optimplotx' строит график текущей точки.

  • 'optimplotfunccount' строит график подсчета функций.

  • 'optimplotfval' строит график значений целевой функции.

  • 'optimplotconstrviolation' отображает максимальное нарушение ограничения.

  • 'optimplotstepsize' строит график размера шага.

Пользовательские функции печати используют тот же синтаксис, что и функции вывода. См. раздел Функции вывода для оптимизации Toolbox™ и Функция вывода и синтаксис функции печати.

Для optimset, имя: PlotFcns.

RelLineSrchBnd

Относительная граница (действительное неотрицательное скалярное значение) на длине шага поиска строки, такая, что полное смещение в x удовлетворяет | Δx (i ) | ≤ relLineSrchBnd· max (| x (i) |, | typicalx (i) |). Эта опция обеспечивает управление величиной перемещений вx когда решатель выполняет слишком большие шаги. Значение по умолчанию - нет ([]).

RelLineSrchBndDuration

Число итераций, для которых граница указана в RelLineSrchBnd должен быть активным. Значение по умолчанию: 1.

SpecifyConstraintGradient

Градиент для функций нелинейных ограничений, определенных пользователем. Если для этой опции установлено значение true, fgoalattain ожидает, что функция ограничения будет иметь четыре выхода, как описано в nonlcon. Если для этой опции установлено значение false (по умолчанию), fgoalattain оценивает градиенты нелинейных ограничений с использованием конечных разностей.

Для optimset, имя: GradConstr и значения 'on' или 'off'.

SpecifyObjectiveGradient

Градиент для целевой функции, определенной пользователем. См. описание fun для просмотра способа определения градиента. Установите для этой опции значение true иметь fgoalattain использовать определяемый пользователем градиент целевой функции. Значение по умолчанию, false, причины fgoalattain для оценки градиентов с использованием конечных разностей.

Для optimset, имя: GradObj и значения 'on' или 'off'.

StepTolerance

Допуск окончания на x (положительный скаляр). Значение по умолчанию: 1e-6. См. раздел Допуски и критерии остановки.

Для optimset, имя: TolX.

TolConSQP

Допуск окончания для нарушения ограничения SQP внутренней итерации (положительный скаляр). Значение по умолчанию: 1e-6.

TypicalX

Типичный x значения. Количество элементов в TypicalX равно количеству элементов в x0, отправная точка. Значение по умолчанию: ones(numberofvariables,1). fgoalattain функции использует TypicalX для масштабирования конечных разностей для градиентной оценки.

UseParallel

Индикация параллельных вычислений. Когда true, fgoalattain оценивает градиенты параллельно. Значение по умолчанию: false. См. раздел Параллельные вычисления.

Пример: optimoptions('fgoalattain','PlotFcn','optimplotfval')

Структура проблемы, указанная как структура с полями в этой таблице.

Имя поляВход

objective

Целевая функция fun

x0

Начальная точка для x

goal

Цели для достижения

weight

Факторы относительной важности целей

Aineq

Матрица для линейных ограничений неравенства

bineq

Вектор для линейных ограничений неравенства

Aeq

Матрица для линейных ограничений равенства

beq

Вектор для линейных ограничений равенства
lbВектор нижних границ
ubВектор верхних границ

nonlcon

Функция нелинейных ограничений

solver

'fgoalattain'

options

Параметры, созданные с помощью optimoptions

Вы должны предоставить, по крайней мере, objective, x0, goal, weight, solver, и options поля в problem структура.

Типы данных: struct

Выходные аргументы

свернуть все

Решение, возвращаемое в виде вещественного вектора или вещественного массива. Размер x совпадает с размером x0. Как правило, x является локальным решением проблемы, когда exitflag является положительным. Сведения о качестве решения см. в разделе Когда решатель добьется успеха.

Значения целевой функции в решении, возвращаемые в виде вещественного массива. Как правило, fval = fun(x).

Коэффициент достижения, возвращаемый как действительное число. attainfactor содержит значение γ в растворе. Если attainfactor является отрицательным, цели были недостигнуты; если attainfactor является позитивным, цели были недостигнуты. Посмотрите goal.

Причина fgoalattain остановлено, возвращено как целое число.

1

Функция, сходящаяся к решению x

4

Величина направления поиска была меньше указанного допуска, а нарушение ограничения - меньше options.ConstraintTolerance

5

Величина направленной производной была меньше указанного допуска, а нарушение ограничения - меньше options.ConstraintTolerance

0

Превышено число итераций options.MaxIterations или превышено число оценок функций options.MaxFunctionEvaluations

-1

Останавливается функцией вывода или функцией графика

-2

Выполнимая точка не найдена.

Информация о процессе оптимизации, возвращенная в виде структуры с полями в этой таблице.

iterations

Количество выполненных итераций

funcCount

Количество оценок функций

lssteplength

Размер шага поиска строки относительно направления поиска

constrviolation

Максимум функций ограничения

stepsize

Длина последнего смещения в x

algorithm

Используемый алгоритм оптимизации

firstorderopt

Мера оптимальности первого порядка

message

Выйти из сообщения

Множители лагранжа в решении, возвращаемые как структура с полями в этой таблице.

lower

Нижние границы, соответствующие lb

upper

Верхние границы, соответствующие ub

ineqlin

Линейные неравенства, соответствующие A и b

eqlin

Линейные равенства, соответствующие Aeq и beq

ineqnonlin

Нелинейные неравенства, соответствующие c в nonlcon

eqnonlin

Нелинейные равенства, соответствующие ceq в nonlcon

Алгоритмы

Для описания fgoalattain алгоритм и обсуждение концепций достижения целей, см. Алгоритмы.

Альтернативная функциональность

Приложение

Задача «Оптимизировать интерактивный редактор» обеспечивает визуальный интерфейс для fgoalattain.

Расширенные возможности

Представлен до R2006a