Notas de estudio: algoritmo de Matlab, algoritmo de planificación de artículos

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

 

 

Supongo que te gusta

Origin blog.csdn.net/seek97/article/details/108306927
Recomendado
Clasificación