Cómo usar todos los tipos de restricciones
Este ejemplo es un problema de minimización no lineal con todos los tipos de restricciones posibles. El ejemplo no usa gradientes.
El problema tiene cinco variables, de x(1)
a x(5)
. La función objetivo es un polinomio en las variables.
.
La función objetivo está en la función local myobj(x)
, que está anidada dentro de la función fullexample
. El código para fullexample
aparece al final de este ejemplo.
Las restricciones no lineales son también expresiones polinómicas.
.
Las restricciones no lineales están en la función local myconstr(x)
, que está anidada dentro de la función fullexample
.
El problema tiene límites en y .
, .
El problema tiene una restricción de igualdad lineal , que puede escribir como .
El problema también tiene tres restricciones de desigualdad lineales:
Represente los límites y las restricciones lineales como matrices y vectores. El código que crea estos arreglos está en la función fullexample
. Como se describe en la sección fmincon
Argumentos de entrada, los vectores lb
y ub
representan las restricciones
lb
ub
.
La matriz A
y el vector b
representan las restricciones de desigualdad lineales
A*x
b
,
y la matriz Aeq
y el vector beq
representan las restricciones de igualdad lineales
Aeq*x = b
.
Llame a fullexample
para resolver el problema de minimización sujeto a todos los tipos de restricciones.
[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
El valor del indicador de salida 1
indica que fmincon
converge en un mínimo local que cumple todas las restricciones.
Este código crea la función fullexample
, que contiene las funciones anidadas myobj
y 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