Этот раздел содержит пример нелинейной проблемы минимизации со всеми возможными типами ограничений. Этот пример не использует градиенты.
Проблема имеет пять переменных, x(1)
через x(5)
. Целевая функция является полиномом в переменных.
.
Целевая функция находится в локальной функции myobj(x)
, который вкладывается в функциональном fullexample
. Код для fullexample
появляется в конце этого раздела.
Нелинейные ограничения являются аналогично многочленными выражениями.
.
Нелинейные ограничения находятся в локальной функции myconstr(x)
, который вкладывается в функциональном fullexample
.
Существуют границы на и .
, .
Существует линейное ограничение равенства , который можно записать как .
Существует три линейных ограничения неравенства:
.
Представляйте границы и линейные ограничения как матрицы и векторы. Код, который создает эти массивы, находится в fullexample
функция. Как описано в fmincon
Раздел Input Arguments, lb
и ub
векторы представляют ограничения
lb
ub
Матричный A
и векторный b
представляйте линейные ограничения неравенства
A*x
b
,
и матричный Aeq
и векторный beq
представляйте линейные ограничения равенства
Aeq*x = b
.
Вызовите fullexample
чтобы решить задачу минимизации подвергают всем типам ограничений.
[x,fval,exitflag] = fullexample
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
x = 5×1
0.6114
2.0380
1.3948
0.1572
1.5498
fval = 37.3806
exitflag = 1
Выходное флаговое значение 1
указывает на тот fmincon
сходится к локальному минимуму, который удовлетворяет всем ограничениям.
Этот код создает fullexample
функция, которая содержит вложенные функции myobj
и myconstr
.
function [x,fval,exitflag] = fullexample x0 = [1; 4; 5; 2; 5]; lb = [-Inf; -Inf; 0; -Inf; 1]; ub = [ Inf; Inf; 20; Inf; Inf]; Aeq = [1 -0.3 0 0 0]; beq = 0; A = [0 0 0 -1 0.1 0 0 0 1 -0.5 0 0 -1 0 0.9]; b = [0; 0; 0]; opts = optimoptions(@fmincon,'Algorithm','sqp'); [x,fval,exitflag] = fmincon(@myobj,x0,A,b,Aeq,beq,lb,ub,... @myconstr,opts); %--------------------------------------------------------- function f = myobj(x) f = 6*x(2)*x(5) + 7*x(1)*x(3) + 3*x(2)^2; end %--------------------------------------------------------- function [c, ceq] = myconstr(x) c = [x(1) - 0.2*x(2)*x(5) - 71 0.9*x(3) - x(4)^2 - 67]; ceq = 3*x(2)^2*x(5) + 3*x(1)^2*x(3) - 20.875; end end