
Problema optimizando, no encuentra solver
Publicado por Cristian (1 intervención) el 09/05/2017 19:02:14
Estoy intentado resolver un problema ocupando yalmip y glpk, pero el programa no corre, arroja solo resultados NaN.
Este es el código
Este es el código
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
%% Parametros del problema
n=3; % gasolina a producir
m=3; % barriles a usar
%% Definicion de variables
x = sdpvar(n,m); % Cantidad e barriles del cruso utilizados para producir gasolina
y= sdpvar(m); % Cantidad de publicidad
costos=4*(sum(sum(x))); % costos de produccion
prima= 45*(sum(x(1,:)))+35*(sum(x(2,:)))+25*(sum(x(3,:))); % Costo de crudo
v= 70*(sum(x(:,1)))+60*(sum(x(:,2)))+50*(sum(x(:,3))); % venta de gasolina
publi=sum(m,1); % publicidad
%% Funcion objetivo
z=v-publi-prima-costos; % funcion objetivo
%% Formulacion_Restricciones
R=[]; % _guardar_restricciones
% Restricciones produccion
R= [R,sum(sum (x(:,1)))<=14000];
R= [R,sum(sum (x(:,2)))<=14000];
R= [R,sum(sum (x(:,3)))<=14000];
% Restricciones_compra
R= [R, sum(x(1,:))<=5000];
R= [R, sum(x(2,:))<=5000];
R= [R, sum(x(3,:))<=5000];
% Restriccion de publicidad
R= [R, sum(x(1,1))==3000+10*y(1)];
R= [R, sum(x(1,2))==2000+10*y(2)];
R= [R, sum(x(1,3))==1000+10*y(3)];
R= [R, sum(x(2,1))==3000+10*y(1)];
R= [R, sum(x(2,2))==2000+10*y(2)];
R= [R, sum(x(2,3))==1000+10*y(3)];
R= [R, sum(x(3,1))==3000+10*y(1)];
R= [R, sum(x(3,2))==2000+10*y(2)];
R= [R, sum(x(3,3))==1000+10*y(3)];
%restriccion de azufre
R= [R, 0.5*(x(1,1))+2*(x(2,1))+2*(x(3,1))<=sum(x(1,1))];
R= [R, 0.5*(x(1,2))+2*(x(2,2))+2*(x(3,2))<=2*(sum(x(1,2)))];
R= [R, 0.5*(x(1,3))+2*(x(2,3))+2*(x(3,3))<=sum(x(1,3))];
R= [R, 0.5*(x(1,1))+2*(x(2,1))+2*(x(3,1))<=sum(x(2,1))];
R= [R, 0.5*(x(1,2))+2*(x(2,2))+2*(x(3,2))<=2*(sum(x(2,2)))];
R= [R, 0.5*(x(1,3))+2*(x(2,3))+2*(x(3,3))<=sum(x(2,3))];
R= [R, 0.5*(x(1,1))+2*(x(2,1))+2*(x(3,1))<=sum(x(3,1))];
R= [R, 0.5*(x(1,2))+2*(x(2,2))+2*(x(3,2))<=2*(sum(x(3,2)))];
R= [R, 0.5*(x(1,3))+2*(x(2,3))+2*(x(3,3))<=sum(x(3,3))];
% restriccion de octanaje
R = [R 12*(x(1,1))+6*(x(2,1))+8*(x(3,1))>=10*(sum(x(1,1)))];
R = [R 12*(x(1,2))+6*(x(2,2))+8*(x(3,2))>=8*(sum(x(1,2)))];
R = [R 12*(x(1,3))+6*(x(2,3))+8*(x(3,3))>=6*(sum(x(1,3)))];
R = [R 12*(x(1,1))+6*(x(2,1))+8*(x(3,1))>=10*(sum(x(2,1)))];
R = [R 12*(x(1,2))+6*(x(2,2))+8*(x(3,2))>=8*(sum(x(2,2)))];
R = [R 12*(x(1,3))+6*(x(2,3))+8*(x(3,3))>=6*(sum(x(2,3)))];
R = [R 12*(x(1,1))+6*(x(2,1))+8*(x(3,1))>=10*(sum(x(3,1)))];
R = [R 12*(x(1,2))+6*(x(2,2))+8*(x(3,2))>=8*(sum(x(3,2)))];
R = [R 12*(x(1,3))+6*(x(2,3))+8*(x(3,3))>=6*(sum(x(3,3)))];
R=[R x>=0]; % Restriccion_de_no_negatividad
R=[R y>=0];
%% llamada_solvers
option = sdpsettings('solver','GLPK');
solucion = optimize (R,-z,option);
%% mostrar_solucion
disp('la cantidad que se debe ocupar es:')
value(x)
disp('Ganancia maxima:')
value(z)
disp('cantidad de publicidad:')
value(y)
Valora esta pregunta


0