Académique Documents
Professionnel Documents
Culture Documents
Investigación de Operaciones
Ejercicio 1
Método Grafico
Ejercicio
la empresa Whitt Windows tiene solo tres empleados que hacen dos tipos de
ventanas: con marco de madera y con marco de aluminio, la ganancia es de $60 por cada
ventana con marco de madera y de $30 por cada una con marco de aluminio. Doug hace
marcos de madera, y puede terminar 6 al día, Linda hace 4 marcos de aluminio al día, Bob
forma y corta el vidrio y puede hacer 48 pies cuadrados de vidrio por día, cada ventana
con marco de madera usa 6 pies cuadrados de vidrio y cada de aluminio usa 8 pies
cuadrados de vidrio.
La compañía desea determinar cuántas ventanas de cada tipo producir al día para
Solución
P1 = (6,1.5)
P2 = (2.666666666666667,4)
De P1
Codigo MathLab
x = -8:8;
y = -8:-8;
y = 4 - 0*x; %primera restriccion
plot(x,y,'LineWidt',3,'Color','r') %grafica1
hold on; %Dejamos los gráficos anteriores
y = ((+48 - 6*x)/8); %segunda restriccion
plot (x,y,'LineWidt',3,'Color','g') %grafica2
hold on; %Dejamos los gráficos anteriores
x= (6+0*y); %Tercera restriccion
plot(x,y,'LineWidt',3,'Color','r') %grafica1
hold on; %Dejamos los gráficos anteriores
axis([-1 8 0 10]) %redimensionamiento de la presentación del gráfico
grid on % le ponemos rejilla, para poder apreciar los límites
Ejercicio 2
Método Simplex
carne con papas es el plato favorito de Ralph Edmund. Por eso decidió hacer una dieta continua de solo estos dos
alimentos (más algunos líquidos y suplementos de vitaminas) en todas sus comidas. Ralph sabe que no es la dieta más
sana y quiere asegurarse de que toma las cantidades adecuadas de los dos alimentos para satisfacer los requerimientos
nutricionales. Cuenta con la siguiente información nutricional y de costo: Ralph quiere determinar el número de
porciones diarias (pueden ser fraccionales) de res y papas que cumplirían con estos requerimientos a un costo mínimo.
La Solucion sera:
X=3,72
Y = 2,09
Código Matlab
fin=Xsol(end,1:end-1)<0;
if fin==0
end
[a,c]=min(Xsol(end,:)); %Columna pivote
Variable_Entrada1= Xsol(:,c) %Variable de entrada
Variable_Salida1=Xsol(c,:) %Variable de salida
Xre= Xsol(:,end)./ Xsol(:,c); %Divide los recursos en la columna pivote
i=Xre<=0; %Encuentra negativos o ceros en los recursos
d=Xre; %Guarda los recursos en d
d(i)=inf; %Donde es cero o negativo pone un infinito
[b,f]=min(d); %Encuentra en la columna pivote el positivo menor
Xsol(f,1:end)=Xsol(f,1:end)/Xsol(f,c); %Divide la fila pivote en el elemento pivote
for i=1:1:size(Xsol,1) %Hace el gauss
if i~=f %No realiza el gauss en la fila pivote
Xsol(i,:)=Xsol(i,:)-(Xsol(i,c)*Xsol(f,:)); %nueva_ecua = anterior_ecua -
(coef_columna enterante) x (nueva_ecuac_pivote)
end
end
Tabla_Iteracion1=Xsol %Iteracion 1
fin=Tabla_Iteracion1(end,1:end-1)<0;
if fin==0
end
[a,c]=min(Tabla_Iteracion1(end,:)); %Columna pivote
Variable_Entrada2= Xsol(:,c) %Variable de entrada
Variable_Salida2=Xsol(c,:) %Variable de salida
Xre= Tabla_Iteracion1(:,end)./ Tabla_Iteracion1(:,c); %Divide los recursos en la
columna pivote
i=Xre<=0; %Encuentra negativos o ceros en los recursos
d=Xre; %Guarda los recursos en d
d(i)=inf; %Donde es cero o negativo pone un infinito
[b,f]=min(d); %Encuentra en la columna pivote el positivo menor
Tabla_Iteracion1(f,1:end)=Tabla_Iteracion1(f,1:end)/Tabla_Iteracion1(f,c); %Divide
la fila pivote en el elemento pivote
for i=1:1:size(Tabla_Iteracion1,1) %Hace el gauss
if i~=f %No realiza el gauss en la fila pivote
Tabla_Iteracion1(i,:)=Tabla_Iteracion1(i,:)-
(Tabla_Iteracion1(i,c)*Tabla_Iteracion1(f,:)); %nueva_ecua = anterior_ecua -
(coef_columna enterante) x (nueva_ecuac_pivote)
end
end
Así Si hacemos el desarrollo, hallamos que el problema no tiene una solución factible, ya que los valores generan
inconsistencia.
fin=Xsol(end,1:end-1)<0;
if fin==0
end
[a,c]=min(Xsol(end,:)); %Columna pivote
Variable_Entrada1= Xsol(:,c) %Variable de entrada
Variable_Salida1=Xsol(c,:) %Variable de salida
Xre= Xsol(:,end)./ Xsol(:,c); %Divide los recursos en la columna pivote
i=Xre<=0; %Encuentra negativos o ceros en los recursos
d=Xre; %Guarda los recursos en d
d(i)=inf; %Donde es cero o negativo pone un infinito
[b,f]=min(d); %Encuentra en la columna pivote el positivo menor
Xsol(f,1:end)=Xsol(f,1:end)/Xsol(f,c); %Divide la fila pivote en el elemento pivote
for i=1:1:size(Xsol,1) %Hace el gauss
if i~=f %No realiza el gauss en la fila pivote
Xsol(i,:)=Xsol(i,:)-(Xsol(i,c)*Xsol(f,:)); %nueva_ecua = anterior_ecua -
(coef_columna enterante) x (nueva_ecuac_pivote)
end
end
Tabla_Iteracion1=Xsol %Iteracion 1
fin=Tabla_Iteracion1(end,1:end-1)<0;
if fin==0
end
[a,c]=min(Tabla_Iteracion1(end,:)); %Columna pivote
Variable_Entrada2= Xsol(:,c) %Variable de entrada
Variable_Salida2=Xsol(c,:) %Variable de salida
Xre= Tabla_Iteracion1(:,end)./ Tabla_Iteracion1(:,c); %Divide los recursos en la
columna pivote
i=Xre<=0; %Encuentra negativos o ceros en los recursos
d=Xre; %Guarda los recursos en d
d(i)=inf; %Donde es cero o negativo pone un infinito
[b,f]=min(d); %Encuentra en la columna pivote el positivo menor
Tabla_Iteracion1(f,1:end)=Tabla_Iteracion1(f,1:end)/Tabla_Iteracion1(f,c); %Divide
la fila pivote en el elemento pivote
for i=1:1:size(Tabla_Iteracion1,1) %Hace el gauss
if i~=f %No realiza el gauss en la fila pivote
Tabla_Iteracion1(i,:)=Tabla_Iteracion1(i,:)-
(Tabla_Iteracion1(i,c)*Tabla_Iteracion1(f,:)); %nueva_ecua = anterior_ecua -
(coef_columna enterante) x (nueva_ecuac_pivote)
end
end
Ejercicio 4
Dwight es un maestro de primaria que también cría puercos para tener ingresos adicionales. Intenta decir que alimento
darles. Piensa que debe usar una combinación de los alimentos que venden los proveedores locales. Dwight Desea que
tenga un costo mínimo al mismo tiempo que cada puerco reciba una cantidad adecuada de calorías y vitaminas. El costo
y los contenidos de cada alimento se muestran en la tabla, Cada puerco requiere al menos $ 8 000 calorías por día y 700
unidades de vitaminas.
function simplex()
clc;
clear all;
case '>='
v_e=[v_e 0];
sc1(j,length(v_e))=-1;
v_ari=[v_ari second(i)];
sc2(j,length(v_ari))=1;
v_b=[v_b,second(i)];
case'='
v_ari=[v_ari second(i)];
sc2(j,length(v_ari))=1;
sc1(j,length(v_ari))=0;
v_b=[v_b,second(i)];
end
j=j+1;
end
%=======================================
sc =[sc,sc1,sc2]; %Nueva Matriz de restricciones con variables artificiales y de
holgura añadidads
vari =[];
vari_a =[];
vari_e =[];
vari_ar =[];
for i=1:size(sc,2)
str1(1,i).vari=['x',num2str(i)];
vari=[vari,str1(1,i).vari,' '];
if i<length(v_a)
vari_a=[vari_a,str1(1,i).vari,' '];
elseif i<=length(v_a)+length(v_e)
vari_e=[vari_e,str1(1,i).vari,' '];
else
vari_ar=[vari_ar,str1(1,i).vari,' '];
end
end
%Primera iteracion
x=[v_a,v_e,v_ari];
if length(v_ari~=0)
v_ar = ones(1,length(v_ari));
if type==1
v_ar=-M*length(v_ari).*v_ar;
else
v_ar=M*length(v_ari).*v_ar;
end
else v_ar=[];
end
Cj=[cout,0.*v_e,v_ar];
Vb=[];
Q=v_b;
Ci=[];
tabl=[];
for i=1:length(Q)
tabl=[tabl; ' | '];
str2(1,i).valeur=Q(i);
ind=find(x==Q(i));
str2(1,i).var_base=str1(1,ind).vari;
Vb=[Vb,str2(1,i).var_base,' '];
Ci=[Ci,Cj(ind)];
end
Z=sum(Ci.*Q);
for i=1:length(Cj)
Zj(i)=sum(Ci'.*sc(:,i));
end
Cj_Zj=Cj-Zj;
l=[];
for i=1:nbr
if length(str2(1,i).var_base)==2
l=[l;str2(1,i).var_base,' '];
else
l=[l;str2(1,i).var_base];
end
end
fprintf('\n');
disp('======================== Problema en forma estandar ========================');
disp(['Variables : ',vari]);
disp([' -Variables No Basicas : ',vari_a]);
disp([' -Variables Basicas : ',vari_e]);
disp([' -Variables Artificiales : ',vari_ar]);
disp('============================================================================');
disp(' ');
disp('=============================== Tabulado 0 ===============================');
disp(['Iniciazlizacion de variables : ',vari]);
disp([' -Variables No Basicas : ',num2str(v_a)]);
disp([' -Variables Basicas : ',num2str(v_e)]);
disp([' -Variables Artificiales : ',num2str(v_ar)]);
disp('============================================================================');
disp(' ');
disp(['Cj : ',num2str(Cj)]);
disp('_______________________________________________________________________');
disp([tabl,num2str(Ci'),tabl,l,tabl,num2str(Q'),tabl,num2str(sc),tabl]);
disp('_______________________________________________________________________');
disp(['Zj : ',num2str(Zj)]);
disp(['Cj-Zj : ',num2str(Cj-Zj)]);
disp(['Z : ',num2str(Z)]);
disp('_______________________________________________________________________');
disp(' ');
end
end
Z=sum(Ci.*Q);
for i=1:size(sc,2)
Zj(i)=sum(Ci'.*sc(:,i));
end
Cj_Zj=Cj-Zj;
l=[];V=[];
for i=1:nbr
if length(str2(1,i).var_base)==2
l=[l;str2(1,i).var_base,' '];
V=[V,l(i,:),' '];
else
l=[l;str2(1,i).var_base];
V=[V,l(i,:),' '];
end
end
Vb = V;
disp(['=============================== Tabulado ',num2str(t),'
===============================']);
disp(['Variable de entrada : ',num2str(V_ent)]);
disp(['Variable de salida : ',num2str(V_sort)]);
disp(['Pivote : ',num2str(pivot)]);
disp(['Variables Basicas : ',num2str(Vb)]);
disp('============================================================================');
disp(' ');
disp(['Cj : ',num2str(Cj)]);
disp('_______________________________________________________________________');
disp([tabl,num2str(Ci'),tabl,l,tabl,num2str(Q'),tabl,num2str(sc),tabl]);
disp('_______________________________________________________________________');
disp(['Zj : ',num2str(Zj)]);
disp(['Cj-Zj : ',num2str(Cj-Zj)]);
disp(['Z : ',num2str(Z)]);
disp('_______________________________________________________________________');
disp(' ');
disp(' ');
t = t+1;
if type==1
a=max(Cj_Zj);a=a(1);
if a<=0
break;
end
else
a = min(Cj_Zj);a=a(1);
if a>=0 break;
end
end
end
p = num2str(Z);
k = msgbox( p,'RESULTADO F.O. OPTIMO :')