Professional 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
maximizar la ganancia total.
Solución
Con estos Datos Vamos a Graficar las Restricciones
P1 = (6,1.5)
P2 = (2.666666666666667,4)
De P1
Codigo MathLab
%Debemos Realzar la Grafica
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
return
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
return
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
fin=Xsol(end,1:end-1)<0;
if fin==0
return
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
return
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.
Código En Matlab
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
%=======================================
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 iteración
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('=============================== Tableau 0 ===============================');
disp(['Inicializacion 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(['=============================== Tabla ',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 :')