Решите многообъективные задачи достижения цели
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
)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
,fval
,attainfactor
,exitflag
,output
]
= fgoalattain(___)x
, значение exitflag
который описывает условие fgoalattain
, и структуру output
с информацией о процессе оптимизации.
Рассмотрим двухцелевую функцию
Эта функция явно минимизирует в , достигая значения 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_<reservedrangesplaceholder0 >
= [2,3] и p_<reservedrangesplaceholder0 >
= [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_<reservedrangesplaceholder0 >
= [2,3] и p_<reservedrangesplaceholder0 >
= [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_<reservedrangesplaceholder0 >
= [2,3] и p_<reservedrangesplaceholder0 >
= [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_<reservedrangesplaceholder0 >
= [2,3] и p_<reservedrangesplaceholder0 >
= [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 -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
не находит решение, удовлетворяющее целям.
Целевая функция является
Здесь, p_<reservedrangesplaceholder0 >
= [2,3] и p_<reservedrangesplaceholder0 >
= [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_<reservedrangesplaceholder0 >
= [2,3] и p_<reservedrangesplaceholder0 >
= [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] и решите задачу достижения цели. Запросите значение целевой функции, коэффициент достижения, выходной флаг, структуру output и множители Лагранжа.
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
.
The lambda.ineqlin
значение ненулевое, что указывает на то, что линейное неравенство ограничивает решение.
Целевая функция является
Здесь, p_<reservedrangesplaceholder0 >
= [2,3] и p_<reservedrangesplaceholder0 >
= [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)
. Меньший вес, скорее всего, сделает его компонент почти удовлетворенным, когда цели не могут быть достигнуты, но делает степень перехвата меньше, когда цель может быть достигнута.
Измените веса равными. The 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
преобразует их в векторы с помощью линейной индексации (см. «Массив»).
Чтобы сделать целевую функцию как можно ближе к значению цели (то есть ни больше, ни меньше, чем), используйте 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
1-й столбец G
- градиент j
Вторая целевая функция 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
элементы.
Для примера, чтобы задать
<reservedrangesplaceholder1> 1 + 2 <reservedrangesplaceholder0> 2 10
3 <reservedrangesplaceholder1> 1 + 4 <reservedrangesplaceholder0> 2 20
5 <reservedrangesplaceholder1> 1 + 6 <reservedrangesplaceholder0> 2 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
.
Для примера рассмотрим эти неравенства:
<reservedrangesplaceholder1> 1 + 2 <reservedrangesplaceholder0> 2 10
3 <reservedrangesplaceholder1> 1 + 4 <reservedrangesplaceholder0> 2 20
5 <reservedrangesplaceholder1> 1 + 6 <reservedrangesplaceholder0> 2 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
элементы.
Для примера, чтобы задать
<reservedrangesplaceholder2> 1 + 2 <reservedrangesplaceholder1> 2 + 3 <reservedrangesplaceholder0> 3 = 10
2 <reservedrangesplaceholder2> 1 + 4 <reservedrangesplaceholder1> 2 + <reservedrangesplaceholder0> 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
.
Для примера рассмотрим эти равенства:
<reservedrangesplaceholder2> 1 + 2 <reservedrangesplaceholder1> 2 + 3 <reservedrangesplaceholder0> 3 = 10
2 <reservedrangesplaceholder2> 1 + 4 <reservedrangesplaceholder1> 2 + <reservedrangesplaceholder0> 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)
. См. нелинейные ограничения для объяснения того, как «обусловить» градиенты для использования в решателях, которые не принимают поставленные градиенты.
Если nonlcon
возвращает вектор c
от m
компоненты и x
имеет длину n
, где n
- длина x0
, затем градиент GC
от c(x)
является n
-by- m
матрица, где GC(i,j)
- частная производная c(j)
относительно x(i)
(то есть j
1-й столбец GC
- градиент j
ограничение неравенства c(j)
). Точно так же, если ceq
имеет p
компоненты, градиент GCeq
от ceq(x)
является n
-by- p
матрица, где GCeq(i,j)
- частная производная ceq(j)
относительно x(i)
(то есть j
1-й столбец GCeq
- градиент j
th-е ограничение равенства ceq(j)
).
Примечание
Настройка SpecifyConstraintGradient
на true
эффективно только тогда, когда SpecifyObjectiveGradient
установлено в true
. Внутренне цель складывается в ограничение, поэтому решателю нужны оба градиента (цель и ограничение), предоставленные в порядок, чтобы избежать оценки градиента.
Примечание
Потому что функции Optimization Toolbox™ принимают только входы типа double
, поставляемые пользователем целевые и нелинейные функции ограничения должны возвращать выходы типа double
.
Смотрите «Передачу дополнительных параметров» для объяснения того, как параметризовать нелинейную функцию ограничения nonlcon
, при необходимости.
Типы данных: char
| function_handle
| string
options
- Опции оптимизацииoptimoptions
| структуру, такую как optimset
возвратыОпции оптимизации, заданные как выход optimoptions
или структуру, такую как optimset
возвращает.
Некоторые опции отсутствуют в optimoptions
отображение. Эти опции выделены курсивом в следующей таблице. Для получения дополнительной информации см. раздел «Опции представления».
Для получения дополнительной информации об опциях, которые имеют различные имена для optimset
, см. «Текущие и устаревшие имена опций».
Опция | Описание |
---|---|
ConstraintTolerance | Допуск завершения на нарушение ограничений, положительную скалярную величину. Значение по умолчанию является Для |
Диагностика | Отображение диагностической информации о функции, которая будет минимизирована или решена. Выбор следующий |
DiffMaxChange | Максимальное изменение переменных для градиентов конечных различий (a положительной скалярной величины). Значение по умолчанию является |
DiffMinChange | Минимальное изменение переменных для градиентов с конечной разностью (a положительной скалярной величины). Значение по умолчанию является |
| Level of display (см. Итеративное отображение):
|
EqualityGoalCount | Количество целей, необходимых для достижения цели Для |
FiniteDifferenceStepSize |
Скаляр или векторный коэффициент размера для конечных различий. Когда вы задаете
sign′(x) = sign(x) кроме sign′(0) = 1 . Центральные конечные различия
FiniteDifferenceStepSize расширяется до вектора. Значение по умолчанию является sqrt(eps) для прямых конечных различий и eps^(1/3) для центральных конечных различий.
Для |
FiniteDifferenceType | Тип конечных различий, используемых для оценки градиентов, либо Алгоритм осторожен, чтобы подчиниться границам при оценке обоих типов конечных различий. Например, это может сделать шаг назад, а не вперед, чтобы избежать оценки в точке за пределами границ. Для |
FunctionTolerance | Допуск завершения функции (a положительной скалярной величины). Значение по умолчанию является Для |
FunValCheck | Проверяйте, что означает, действительны ли целевая функция и значения ограничений. |
MaxFunctionEvaluations | Максимально допустимое количество вычислений функции (положительное целое число). Значение по умолчанию является Для |
MaxIterations | Максимально допустимое количество итераций (положительное целое число). Значение по умолчанию является Для |
MaxSQPIter | Максимально допустимое количество итераций SQP (положительное целое число). Значение по умолчанию является |
MeritFunction | Если для этой опции задано значение |
OptimalityTolerance |
Допуск завершения по оптимальности первого порядка (a положительной скалярной величины). Значение по умолчанию является Для |
OutputFcn | Одна или несколько пользовательских функций, которые вызываются оптимизационными функциями при каждой итерации. Передайте указатель на функцию или cell-массив указателей на функцию. Значением по умолчанию является none ( |
PlotFcn | Графики, показывающие различные показатели прогресса во время выполнения алгоритма. Выберите из предопределенных графиков или напишите свои собственные. Передайте имя, указатель на функцию или массив ячеек из имен или указателей на функцию. Для пользовательских функций построения графика передайте указатели на функцию. Значением по умолчанию является none (
Пользовательские функции построения графика используют тот же синтаксис, что и выходные функции. Смотрите Выходные функции для Optimization Toolbox™ и синтаксиса выходной функции и функции построения графика. Для |
RelLineSrchBnd | Относительная граница (действительное неотрицательное скалярное значение) в длине шага поиска линии такой, что общее перемещение в |
RelLineSrchBndDuration | Количество итераций, для которых граница задана в |
SpecifyConstraintGradient | Градиент для нелинейных функций ограничений, заданный пользователем. Когда для этой опции задано значение Для |
SpecifyObjectiveGradient | Градиент для целевой функции, заданный пользователем. См. описание Для |
StepTolerance | Допуск завершения на Для |
TolConSQP | Допуск завершения на внутренней итерации SQP нарушения ограничений (a положительной скалярной величины). Значение по умолчанию является |
TypicalX | Типичные |
UseParallel | Индикация параллельных вычислений. Когда |
Пример: optimoptions('fgoalattain','PlotFcn','optimplotfval')
problem
- Структура задачиСтруктура задачи, заданная как структура с полями в этой таблице.
Имя поля | Вход |
---|---|
| Целевая функция fun |
| Начальная точка для x |
| Цели для достижения |
| Относительные факторы важности целей |
| Матрица для линейных ограничений неравенства |
| Вектор для линейных ограничений неравенства |
| Матрица для линейных ограничений равенства |
| Вектор для линейных ограничений равенства |
lb | Вектор нижних границ |
ub | Вектор верхних границ |
| Нелинейная функция ограничения |
| 'fgoalattain' |
| Опции, созданные с optimoptions |
Вы должны поставить по крайней мере objective
, x0
, goal
, weight
, solver
, и options
поля в problem
структура.
Типы данных: struct
x
- РешениеРешение, возвращенное как вектор действительных чисел или действительный массив. Размер x
совпадает с размером x0
. Как правило, x
является локальным решением проблемы, когда exitflag
положительно. Для получения информации о качестве решения см., Когда решатель преуспевает.
fval
- Значения целевой функции в решенииЗначения целевой функции в решении, возвращенные как действительный массив. Обычно fval
= fun(x)
.
attainfactor
- Коэффициент достиженияКоэффициент достижения, возвращенный как действительное число. attainfactor
содержит значение γ в решении. Если attainfactor
отрицательно, цели были пересмотрены; если attainfactor
положительно, цели недостаточно изучены. См. goal
.
exitflag
- Причины fgoalattain
остановленныйПричина fgoalattain
stop, возвращается как целое число.
| Функция сходится к решению |
| Величина направления поиска была меньше заданного допуска, а нарушение ограничений меньше |
| Величина производной по направлению была меньше заданного допуска, и нарушение ограничений было меньше |
| Превышено количество итераций |
| Остановлен выходной функцией или функцией построения графика |
| Допустимая точка не найдена. |
output
- Информация о процессе оптимизацииИнформация о процессе оптимизации, возвращенная как структура с полями в этой таблице.
iterations | Количество проделанных итераций |
funcCount | Количество вычислений функции |
lssteplength | Размер шага поиска линии относительно направления поиска |
constrviolation | Максимум функций ограничения |
stepsize | Длина последнего перемещения в |
algorithm | Используемый алгоритм оптимизации |
firstorderopt | Мера оптимальности первого порядка |
message | Выходное сообщение |
lambda
- множители Лагранжа в решенииМножители Лагранжа в решении, возвращенные как структура с полями в этой таблице.
Описание fgoalattain
алгоритм и обсуждение концепций достижения цели, см. Алгоритмы.
Задача Optimize Live Editor обеспечивает визуальный интерфейс для fgoalattain
.
Чтобы запустить параллельно, установите 'UseParallel'
опция для true
.
опции = optimoptions (
'solvername
',' UseParallel ', true)
Для получения дополнительной информации смотрите Использование параллельных вычислений в Optimization Toolbox.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.