01 programación lineal
Matlab求解线性规划命令:[x,fval]=linprog(c,A,b,Aeq,beq,LB,UB,X0,OPTIONS)
这里 fval 返回目标函数的值,LB 和 UB 分别是变量 x 的下界和上界,x0是x的初始值,OPTIONS 是控制参数。
Ejemplo ( e01 ) para resolver el siguiente problema de programación lineal
Matlab resuelve el problema de programación lineal, es necesario convertir uniformemente mayor o igual a menor o igual que
c=[2;3;-5];
a=[-2 5 -1;1 3 1];
b=[-10;12];
aeq=[1 1 1];
beq=7;
x=linprog(-c,a,b,aeq,beq,zeros(3,1));
value=c'*x;
fprintf('x1=%.4f,x2=%.4f,x3=%.4f\nz:%.4f\n',x,value);
resultado:
x1=6.4286,x2=0.5714,x3=0.0000
z:14.5714
02 programación de enteros
Solución
1. Método de ramificación y enlace : puede resolver programación lineal entera entera o mixta
2. Método de corte plano : puede resolver programación lineal entera entera o mixta
3. Método de enumeración implícito : resuelva la programación de enteros " 0-1 "
4. Método de Monte Carlo : puede resolver varios tipos de problemas de planificación
02.1 Rama y límite
Buscar de manera sistemática y adecuada todos los espacios de solución factible del problema de optimización con restricciones (la solución factible es un número finito) Este es el contenido de la ramificación y delimitación. Por lo general, todo el espacio de solución factible se divide repetidamente en subconjuntos cada vez más pequeños, llamados ramas; y se calcula un límite inferior objetivo (para el problema mínimo) para el conjunto de soluciones en cada subconjunto, lo que se denomina delimitación. Después de cada bifurcación, los subconjuntos cuyos límites exceden el valor objetivo del conjunto de soluciones factibles conocidas no se ramificarán más. De esta forma, se pueden ignorar muchos subconjuntos, lo que se denomina poda. Esta es la idea principal del método de bifurcación y vinculación.
Ejemplo ( e02 ) para resolver el siguiente problema de programación de enteros
1. Independientemente del límite de números enteros, se resuelve la programación lineal correspondiente y la solución óptima es:
x1 = 4.8092, x2 = 1.8168, z = 355.8779
La solución anterior no cumple la condición de número entero. En este momento, z es el límite superior del valor óptimo de la función objetivo del problema. Y x1 = 0, x2 = 0 lleva al límite inferior, por lo que el rango de solución real es: 0 <= z <= 356
2. Rama. Tome x1 <= [4.8092] = 4 ; x1> = [408092] + 1 = 5
El problema se desglosa además en:
En este momento , la solución de B1 es: x1 = 4, x2 = 2.1, z1 = 349 ; la solución de B2 es: x1 = 5; x2 = 1.57, z2 = 341.4 .
Puede verse que el rango de solución óptimo es 0 <= z <= 349
Solución por método de ramificación y enlace:
3. Resuelve el límite de B1 nuevamente
B11 : x1 = 4 ,x2 = 2 ,z11 = 340
B12 : x1 = 1,43 ,x2 = 3 ,z12 = 327,14
4. Se obtiene la solución de ramificación de B2
B21 : x1 = 5.44 ,x2 = 1 ,z21 = 308
B22 no hay solución factible
La poda B21 y B22 , la solución óptima al problema original:
x1 = 4 ,x2 = 2 ,z = 340
02.2 Enumeración implícita
Debido a que el espacio de solución del método exhaustivo es demasiado grande, a menudo es imposible lograr el agotamiento, por lo que algunos métodos a menudo están diseñados para verificar solo una parte de la combinación de valores variables para encontrar la solución óptima al problema. Este método se llama enumeración implícita.
Ejemplo (e04) : resuelva el siguiente problema de programación 0-1
método:
1. Primero encuentre una solución factible tentativamente, es fácil ver que (x1, x2, x3) = (1,0,0) satisface las restricciones, por lo que es una solución factible, yz = 3
2. Debido a que es un problema de valor máximo, cuando se busca una solución óptima, cualquier solución con un valor objetivo de 3 <z se puede eliminar sin verificar si satisface la condición de restricción, porque definitivamente no es la solución óptima, por lo que se debe agregar una condición de restricción ( Límite inferior del valor objetivo )
3. Mejorar las condiciones del filtro
4. Dado que el valor objetivo se calcula primero para cada combinación para verificar las condiciones del filtro, la combinación con un valor objetivo más grande z debe calcularse primero , de modo que el umbral del filtro se pueda elevar de antemano para reducir la cantidad de cálculo.
02.3 Montecarlo
Debido a que el espacio de solución del método de enumeración es demasiado grande, el método de probabilidad se puede utilizar para seleccionar al azar algunas soluciones para la verificación, de modo que cuando hay suficientes soluciones aleatorias, la solución óptima se puede obtener con una alta probabilidad. Esta es la idea de Monte Carlo.
Ejemplo (e05) : Resuelva el siguiente problema de programación no lineal
Análisis: calculado utilizando el método de enumeración, entonces el número de soluciones para el espacio 100 5 100 ^ 5 , una gran cantidad de cálculo, si el azar calculado utilizando el método de Monte Carlo 10 . 6 10 ^ 6 th puntos, puede utilizar métodos probabilísticos para obtener el máximo rendimiento demostrado La probabilidad de mérito es: 0.999954602 . Escriba el programa MATLAB para resolver
function [f,g]=mengte(x)
f=x(1)^2+x(2)^2+3*x(3)^2+4*x(4)^2+2*x(5)-8*x(1)-2*x(2)-3*x(3)-...
x(4)-2*x(5);
g=[sum(x)-400
x(1)+2*x(2)+2*x(3)+x(4)+6*x(5)-800
2*x(1)+x(2)+6*x(3)-200
x(3)+x(4)+5*x(5)-200];
rng(sum(clock));
p0=0;
tic
for i=1:10^6
x=99*rand(5,1);
x1=floor(x);x2=ceil(x);
[f,g]=mengte(x1);
if sum(g<=0)==4
if p0<=f
x0=x1;p0=f;
end
end
[f,g]=mengte(x2);
if sum(g<=0)==4
if p0<=f
x0=x2;p0=f;
end
end
end
fprintf('x1=%.0f\nx2=%.0f\nx3=%.0f\nx4=%.0f\nx5=%.0f\nz=%.0f\n',x0,p0);
toc
resultado:
>> e05
x1=4
x2=99
x3=14
x4=99
x5=6
z=49238
时间已过 1.861732 秒。
03 Programación no lineal
Definición: Si la función objetivo o la condición de restricción contiene una función no lineal, este tipo de problema de programación se denomina problema de programación no lineal.
Forma estándar de programación no lineal en Matlab :
Donde f (x) es una función escalar, A, B y Beq Aeq son matrices y vectores de dimensiones correspondientes, y C (x) y Ceq (x) son funciones vectoriales no lineales.
El comando de resolución en Matlab es: X = FMINCON (FUN, X0, A, B, Aeq, Beq, LB, UB, NONLCON, OPTIONS)
function f=fun1(x)
f=sum(x.^2)+8;
end
function [g,h]=fun2(x)
g=[-x(1)^2+x(2)-x(3)^2
x(1)+x(2)^2+x(3)^3-20];
h=[-x(1)-x(2)^2+2
x(2)+2*x(3)^2-3];
end
options=optimset('largescale','off');
[x,y]=fmincon('fun1',rand(3,1),[],[],[],[],zeros(3,1),[],'fun2', options);
fprintf('x1=%.4f\nx2=%.4f\nx3=%.4f\ny=%.4f\n',x,y);
resultado:
>> e06
Local minimum found that satisfies the constraints.
Optimization completed because the objective function is non-decreasing in
feasible directions, to within the default value of the optimality tolerance,
and constraints are satisfied to within the default value of the constraint tolerance.
<stopping criteria details>
x1=0.5522
x2=1.2033
x3=0.9478
y=10.6511
04 Planificación secundaria
Definición: La programación cuadrática es un tipo de programación no lineal.Si la función objetivo de una determinada programación no lineal es la función cuadrática de la variable independiente xy las restricciones son todas lineales, este tipo de programación se llama programación cuadrática.
La forma estándar de programación cuadrática en Matlab se expresa como:
Aquí H es una matriz simétrica real, f y b son vectores columna y A es una matriz de dimensiones correspondientes.
Solución de Matlab : quadprog ()
H, f son la matriz simétrica real y el vector columna obtenidos después de transformar la función objetivo en una forma estándar. Obviamente, H debería ser la matriz hessiana de la función original. Su valor de retorno es el vector x , X0 es el valor inicial de x ; A, B, Aeq y Beq definen restricciones lineales.
Ejemplo ( e07 ) para resolver el siguiente problema de programación cuadrática
Antes de resolver, la función cuadrática objetivo debe transformarse en una forma estándar:
h=[4,-4;-4,8];
f=[-6;-3];
a=[1,1;4,1];
b=[3;9];
[x,value]=quadprog(h,f,a,b,[],[],zeros(2,1));
fprintf('x1=%.4f\nx2=%.4f\nz=%.4f\n',x,value);
x1=0:0.01:3;x2=x1;
[x1,x2]=meshgrid(x1,x2);
f=2*x1.^2-4*x1.*x2+4*x2.^2-6*x1-3*x2;
f(x1+x2<=3 & 4*x1+x2<=9)=-15;
mesh(x1,x2,f);
resultado:
>> e07
Minimum found that satisfies the constraints.
Optimization completed because the objective function is non-decreasing in
feasible directions, to within the default value of the optimality tolerance,
and constraints are satisfied to within the default value of the constraint tolerance.
<stopping criteria details>
x1=1.9500
x2=1.0500
z=-11.0250