Решите многоцелевые целевые проблемы достижения
fgoalattain
решает целевую проблему достижения, формулировку для минимизации многоцелевой задачи оптимизации.
fgoalattain
находит минимум проблемы заданным
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)
x = fgoalattain(fun,x0,goal,weight,A,b)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options)
x = fgoalattain(problem)
[x,fval]
= fgoalattain(___)
[x,fval,attainfactor,exitflag,output]
= fgoalattain(___)
[x,fval,attainfactor,exitflag,output,lambda]
= fgoalattain(___)
попытки сделать целевые функции предоставленными x
= fgoalattain(fun
,x0
,goal
,weight
)fun
достигают целей, заданных goal
переменным x
, начиная в x0
, с весом, заданным weight
.
Передача Дополнительных Параметров объясняет, как передать дополнительные параметры целевым функциям и нелинейным ограничительным функциям при необходимости.
решает целевую проблему достижения, подвергающуюся границам 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(problem
)problem
, где problem
является структурой, описанной в problem
. Создайте структуру problem
путем экспорта проблемы из приложения Оптимизации, как описано в Экспорте работы.
[
дополнительно возвращает фактор достижения в решении x
,fval
,attainfactor
,exitflag
,output
]
= fgoalattain(___)x
, значение exitflag
, который описывает выходное условие fgoalattain
и структуру output
с информацией о процессе оптимизации.
Рассмотрите 2D целевую функцию
Эта функция ясно минимизирует в , достижение значения 2, и минимизирует в , достижение значения 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
Найдите значение в решении.
fun(x)
ans = 2×1
3.0000
6.0000
fgoalattain
достигает целей точно.
Целевая функция
Здесь, 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];
Создайте линейные ограничительные матрицы 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
Найдите значение в решении.
fun(x)
ans = 2×1
3.1484
6.1484
fgoalattain
не удовлетворяет целям. Поскольку веса равны, решатель отстает каждую цель той же суммой.
Целевая функция
Здесь, 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];
Создайте границы.
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
Найдите значение в решении.
fun(x)
ans = 2×1
2.8889
5.8889
fgoalattain
больше, чем удовлетворяет целям. Поскольку веса равны, решатель сверхдостигает каждой цели той же суммой.
Целевая функция
Здесь, 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];
Нелинейная ограничительная функция находится в файле 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
Найдите значение в решении.
fun(x)
ans = 2×1
4.5778
7.1991
fgoalattain
не удовлетворяет целям. Несмотря на равные веса, приблизительно 1,58 от его цели 3, и приблизительно 1,2 от его цели 6. Нелинейное ограничение предотвращает решение x
от достижения целей одинаково.
Контролируйте целевой процесс решения для достижения, устанавливая опции возвратить итеративное отображение.
options = optimoptions('fgoalattain','Display','iter');
Целевая функция
Здесь, 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];
Создайте линейные ограничительные матрицы 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 -1.115e-08 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.748e-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
не находит решение, удовлетворяющее цели.
Целевая функция
Здесь, 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];
Создайте линейные ограничительные матрицы 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
не удовлетворяет цель.
Целевая функция
Здесь, 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];
Создайте линейные ограничительные матрицы 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.1454e-13
algorithm: 'active-set'
firstorderopt: []
constrviolation: 6.7482e-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
является ненулевым, указывая, что линейное неравенство ограничивает решение.
Целевая функция
Здесь, 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];
Установите линейное ограничение .
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
— Целевые функцииЦелевые функции, заданные как указатель на функцию или имя функции. 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
преобразовывает их в векторы, использующие линейную индексацию (см. Индексацию массива (MATLAB)).
Сделать целевую функцию почти возможной к целевому значению (то есть, ни больше, чем, ни меньше, чем), 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
-by-m
матрица, где G(i,j)
является частной производной F(j)
относительно x(i)
(то есть, j
th столбец G
является градиентом j
th целевая функция F(j)
).
Установка SpecifyObjectiveGradient
к true
является эффективной только, когда проблема не имеет никаких нелинейных ограничений, или проблема имеет нелинейное ограничение с набором SpecifyConstraintGradient
к true
. Внутренне, цель свернута в ограничения, таким образом, решателю нужны оба градиента (цель и ограничение) предоставленный во избежание оценки градиента.
Типы данных: char
| string
| function_handle
x0
Начальная точкаНачальная точка, заданная как вектор действительных чисел или действительный массив. Решатели используют число элементов в x0
и размере x0
, чтобы определить номер и размер переменных, которые принимает fun
.
Пример: x0 = [1,2,3,4]
Типы данных: double
goal
— Цель достигнутьЦель достигнуть, заданный как вектор действительных чисел. fgoalattain
пытается найти самый маленький множитель γ, который заставляет эти неравенства содержать для всех значений i в решении x:
Предположение, что weight
является положительным вектором:
Если решатель находит точку x
, который одновременно достигает всех целей, то фактор достижения, γ отрицателен, и цели, сверхдостигается.
Если решатель не может найти точку x
, который одновременно достигает всех целей, то фактор достижения, γ положителен, и цели, отстается.
Пример: [1 3 6]
Типы данных: double
weight
— Относительный фактор достиженияОтносительный фактор достижения, заданный как вектор действительных чисел. fgoalattain
пытается найти самый маленький множитель γ, который заставляет эти неравенства содержать для всех значений i в решении x:
Когда значения goal
будут все ненулевыми, чтобы гарантировать тот же процент низкой успеваемости или сверхдостижение активных целей, установите weight
на abs(goal)
. (Активные цели являются набором целей, которые являются барьерами для дальнейшего совершенствования целей в решении.)
Установка компонента вектора weight
обнулить заставляет соответствующее целевое ограничение быть обработанным как трудное ограничение, а не целевое ограничение. Альтернативный метод к установке трудного ограничения должен использовать входной параметр nonlcon
.
Когда weight
положителен, fgoalattain
пытается сделать целевые функции меньше, чем целевые значения. Чтобы сделать целевые функции больше, чем целевые значения, установите weight
быть отрицательным, а не положительным. Чтобы видеть некоторые эффекты весов на решении, смотрите Эффекты Весов, Целей и Ограничений в Целевом Достижении.
Чтобы сделать целевую функцию почти возможной к целевому значению, используйте опцию EqualityGoalCount
и задайте цель как первый элемент вектора, возвращенного fun
(см. fun
и options
). Для примера смотрите Многоцелевую Целевую Оптимизацию Достижения.
Пример: abs(goal)
Типы данных: double
A
Линейные ограничения неравенстваЛинейные ограничения неравенства, заданные как действительная матрица. A
является M
-by-N
матрица, где M
является количеством неравенств, и N
является количеством переменных (число элементов в x0
). Для больших проблем передайте A
как разреженную матрицу.
A
кодирует M
линейные неравенства
A*x <= b
,
где x
является вектор-столбцом переменных N
x(:)
, и b
является вектор-столбцом с элементами M
.
Например, чтобы задать
x 1 + 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
Линейные ограничения неравенстваЛинейные ограничения неравенства, заданные как вектор действительных чисел. b
является M
- вектор элемента, связанный с матрицей A
. Если вы передаете b
как вектор - строку, решатели внутренне преобразовывают b
в вектор-столбец b(:)
. Для больших проблем передайте b
как разреженный вектор.
b
кодирует M
линейные неравенства
A*x <= b
,
где x
является вектор-столбцом переменных N
x(:)
, и A
является матрицей размера M
-by-N
.
Например, чтобы задать
x 1 + 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
— Линейные ограничения равенстваЛинейные ограничения равенства, заданные как действительная матрица. Aeq
является Me
-by-N
матрица, где Me
является количеством равенств, и N
является количеством переменных (число элементов в x0
). Для больших проблем передайте Aeq
как разреженную матрицу.
Aeq
кодирует Me
линейные равенства
Aeq*x = beq
,
где x
является вектор-столбцом переменных N
x(:)
, и beq
является вектор-столбцом с элементами Me
.
Например, чтобы задать
x 1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x 3 = 20,
введите эти ограничения:
Aeq = [1,2,3;2,4,1]; beq = [10;20];
Пример: Чтобы указать что x сумма компонентов к 1, используйте Aeq = ones(1,N)
и beq = 1
.
Типы данных: double
beq
— Линейные ограничения равенстваЛинейные ограничения равенства, заданные как вектор действительных чисел. beq
является Me
- вектор элемента, связанный с матрицей Aeq
. Если вы передаете beq
как вектор - строку, решатели внутренне преобразовывают beq
в вектор-столбец beq(:)
. Для больших проблем передайте beq
как разреженный вектор.
beq
кодирует Me
линейные равенства
Aeq*x = beq
,
где x
является вектор-столбцом переменных N
x(:)
, и Aeq
является матрицей размера Me
-by-N
.
Например, чтобы задать
x 1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x 3 = 20,
введите эти ограничения:
Aeq = [1,2,3;2,4,1]; beq = [10;20];
Пример: Чтобы указать что x сумма компонентов к 1, используйте Aeq = ones(1,N)
и beq = 1
.
Типы данных: double
lb
— Нижние границыНижние границы, заданные как вектор действительных чисел или действительный массив. Если число элементов в 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
ub
— Верхние границыВерхние границы, заданные как вектор действительных чисел или действительный массив. Если число элементов в 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
— Нелинейные ограниченияНелинейные ограничения, заданные как указатель на функцию или имя функции. 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)
. Смотрите Нелинейные Ограничения для объяснения того, как к “conditionalize” градиенты для использования в решателях, которые не принимают предоставленные градиенты.
Если nonlcon
возвращает векторный c
компонентов m
, и x
имеет длину n
, где n
является длиной x0
, то градиент, GC
c(x)
является n
-by-m
матрица, где GC(i,j)
является частной производной c(j)
относительно x(i)
(то есть, j
th столбец GC
является градиентом j
th ограничение неравенства c(j)
). Аналогично, если ceq
имеет компоненты p
, градиент, GCeq
ceq(x)
является n
-by-p
матрица, где GCeq(i,j)
является частной производной ceq(j)
относительно x(i)
(то есть, j
th столбец GCeq
является градиентом j
th ограничение равенства ceq(j)
).
Установка SpecifyConstraintGradient
к true
является эффективной только, когда SpecifyObjectiveGradient
установлен в true
. Внутренне, цель свернута в ограничение, таким образом, решателю нужны оба градиента (цель и ограничение) предоставленный во избежание оценки градиента.
Поскольку функции Optimization Toolbox™ принимают только входные параметры типа double
, предоставленные пользователями объективные и нелинейные ограничительные функции должны возвратить выходные параметры типа double
.
Смотрите Передающие Дополнительные Параметры для объяснения того, как параметризовать нелинейную ограничительную функцию nonlcon
при необходимости.
Типы данных: char
| function_handle
| string
опции
Опции оптимизацииoptimoptions
| структура, такая как optimset
возвращаетсяОпции оптимизации, заданные как вывод optimoptions
или структуры, такие как optimset
, возвращаются.
Некоторые опции отсутствуют в отображении optimoptions
. Эти опции появляются курсивом в следующей таблице. Для получения дополнительной информации, Опции вида на море.
Для получения дополнительной информации об опциях, которые имеют различные имена для optimset
, см. Текущие и Устаревшие Таблицы Имени Опции.
Опция | Описание |
---|---|
ConstraintTolerance | Допуск завершения на ограничительном нарушении, положительной скалярной величине. Значением по умолчанию является Для |
Диагностика | Отображение диагностической информации о функции, которая будет минимизирована или решена. Выбором является |
DiffMaxChange | Максимальное изменение в переменных для градиентов конечной разности (положительная скалярная величина). Значением по умолчанию является |
DiffMinChange | Минимальное изменение в переменных для градиентов конечной разности (положительная скалярная величина). Значением по умолчанию является |
| Уровень отображения (см. Итеративное Отображение):
|
EqualityGoalCount | Количество целей, требуемых для объективного Для |
FiniteDifferenceStepSize |
Скалярный или векторный фактор размера шага для конечных разностей. Когда вы устанавливаете
sign′(x) = sign(x) кроме sign′(0) = 1 . Центральные конечные разности
FiniteDifferenceStepSize расширяется до вектора. Значением по умолчанию является sqrt(eps) для прямых конечных разностей и eps^(1/3) для центральных конечных разностей.
Для |
FiniteDifferenceType | Тип конечных разностей раньше оценивал градиенты, или Алгоритм старается повиноваться границам при оценке обоих типов конечных разностей. Например, это может сделать обратный шаг, а не прямой шаг, чтобы не оценивать в точке вне границ. Для |
FunctionTolerance | Допуск завершения на значении функции (положительная скалярная величина). Значением по умолчанию является Для |
FunValCheck | Проверяйте, что это имеет значение, допустимы ли целевая функция и ограничительные значения. |
MaxFunctionEvaluations | Максимальное количество функциональных оценок позволено (положительное целое число). Значением по умолчанию является Для |
MaxIterations | Максимальное количество итераций позволено (положительное целое число). Значением по умолчанию является Для |
MaxSQPIter | Максимальное количество итераций SQP позволено (положительное целое число). Значением по умолчанию является |
MeritFunction | Если эта опция установлена в |
OptimalityTolerance |
Допуск завершения на оптимальности первого порядка (положительная скалярная величина). Значением по умолчанию является Для |
OutputFcn | Одна или несколько пользовательских функций, что оптимизация вызовы функции в каждой итерации. Передайте указатель на функцию или cell-массив указателей на функцию. Значение по умолчанию не ни один ( |
PlotFcn | Графики, показывающие различные меры прогресса, в то время как алгоритм выполняется. Выберите из предопределенных графиков или запишите свое собственное. Передайте имя, указатель на функцию или массив ячеек имен или указателей на функцию. Для пользовательских функций построения графика передайте указатели на функцию. Значение по умолчанию не ни один (
Для получения информации о записи пользовательской функции построения графика смотрите Синтаксис Функции построения графика. Для |
RelLineSrchBnd | Родственник связал (действительное неотрицательное скалярное значение) на длине шага поиска строки, таким образом, что общее смещение в |
RelLineSrchBndDuration | Количество итераций, для которых связанное, заданное в |
SpecifyConstraintGradient | Градиент для нелинейных ограничительных функций, определяемых пользователем. Когда эта опция будет установлена в Для |
SpecifyObjectiveGradient | Градиент для целевой функции задан пользователем. Обратитесь к описанию Для |
StepTolerance | Допуск завершения на Для |
TolConSQP | Допуск завершения на внутренней итерации ограничительное нарушение SQP (положительная скалярная величина). Значением по умолчанию является |
TypicalX | Типичные значения |
UseParallel | Индикация относительно параллельных вычислений. Когда |
Пример: optimoptions('fgoalattain','PlotFcn','optimplotfval')
problem
— Структура задачиСтруктура задачи, заданная как структура с полями в этой таблице.
Имя поля | Запись |
---|---|
| Целевая функция fun |
| Начальная точка для x |
| Цели достигнуть |
| Относительные факторы важности целей |
| Матрица для линейных ограничений неравенства |
| Вектор для линейных ограничений неравенства |
| Матрица для линейных ограничений равенства |
| Вектор для линейных ограничений равенства |
lb | Вектор нижних границ |
ub | Вектор верхних границ |
| Нелинейная ограничительная функция |
| 'fgoalattain' |
| Опции создаются с optimoptions |
Необходимо предоставить, по крайней мере, objective
, x0
, goal
, weight
, solver
и поля options
в структуре problem
.
Самым простым способом получить структуру problem является экспорт задачи из Optimization app.
Типы данных: struct
x
РешениеРешение, возвращенное как вектор действительных чисел или действительный массив. Размер x
совпадает с размером x0
. Как правило, x
является локальным решением проблемы, когда exitflag
положителен. Для получения информации о качестве решения смотрите, Когда Решатель Успешно выполнится.
fval
Значения целевой функции в решенииЗначения целевой функции в решении, возвращенном как действительный массив. Обычно fval
= fun(x)
.
attainfactor
— Фактор достиженияФактор достижения, возвращенный как вещественное число. attainfactor
содержит значение γ в решении. Если attainfactor
отрицателен, цели были сверхдостигнуты; если attainfactor
положителен, цели отстались. Смотрите goal
.
exitflag
Обоснуйте остановленный fgoalattain
Обоснуйте, что остановленный fgoalattain
, возвратился как целое число.
1 | Функция сходилась к решению |
4 | Значение поискового направления было меньше, чем заданный допуск, и ограничительное нарушение было меньше, чем |
5 | Значение косой производной было меньше, чем заданный допуск, и ограничительное нарушение было меньше, чем |
0 | Количество итераций превысило |
-1 | Зашедший выходная функция или функция построения графика |
-2 | Никакая допустимая точка не была найдена. |
вывод
Информация о процессе оптимизацииИнформация о процессе оптимизации, возвращенном как структура с полями в этой таблице.
iterations | Количество проделанных итераций |
funcCount | Количество функциональных оценок |
lssteplength | Размер строки ищет шаг относительно поискового направления |
constrviolation | Максимум ограничительных функций |
stepsize | Длина последнего смещения в |
algorithm | Алгоритм оптимизации используется |
firstorderopt | Мера оптимальности первого порядка |
message | Выходное сообщение |
\lambda
Множители Лагранжа в решенииМножители Лагранжа в решении, возвращенном как структура с полями в этой таблице.
Для описания алгоритма fgoalattain
и обсуждения целевых концепций достижения, см. Алгоритмы.
Чтобы запуститься параллельно, установите опцию 'UseParallel'
на true
.
options = optimoptions('solvername','UseParallel',true)
Для получения дополнительной информации смотрите Используя Параллельные вычисления в Optimization Toolbox.
fmincon
| fminimax
| optimoptions
| optimtool
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.