Método Simplex
Método Simplex
Método Simplex
Por:
Karina Vásquez
Maria Belén Novillo
Verónica Soto
Prof.:
Módulo:
Octavo“B”
% ******** MÉTODO SIMPLEX ********
% ********
[x,map]=imread('tux.png','png');
%image(x),colormap(map),axis off,hold off
function IOSimplex_OpeningFcn(hObject, eventdata, handles,
varargin)
%handles-->
handles.output=hObject;
handles.numVar=2; %variables a utilizar
handles.numRest=2; %restricciones del ejercicio
handles.tipo=1; % 1=max 2=min
guidata(hObject, handles);
% ********
function varargout = IOSimplex_OutputFcn(hObject, eventdata,
handles)
varargout{1} = handles.output;
% ********
function pmTipo_Callback(hObject, eventdata, handles)
handles.tipo=get(hObject,'Value');
guidata(hObject,handles);
% ********
function pmTipo_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
set(hObject,'String',{'MAX','MIN'});
% ********
function botResolver_Callback(hObject, eventdata, handles)
simplex=get(handles.tablaDatos,'Data');
%se inserta las variables de holgura-exceso
simplex=[[simplex(:,1:handles.numVar),[eye(handles.numRest);z
eros(1,handles.numRest)]],simplex(:,handles.numVar+1)];
orden=size(simplex);
base=(zeros(1,handles.numVar)); %se guardan los indices de
las variables
signo=1; %cambia los signos de la funcion objetivo
if handles.tipo==2
signo=-1;
end
while mean((simplex(orden(1),:)*signo)>=0)~=1
disp(simplex);
if handles.tipo==1
[~,y]=min(simplex(orden(1),1:orden(2)-1)); %se
obtiene el indice del más negativo de la f. objetivo en 'y'
else
[~,y]=max(simplex(orden(1),1:orden(2)-1)); %se
obtiene el indice del más positivo de la f. objetivo en 'y'
end
x=1; %guarda el indice de la fila pivote;
pivote=simplex(1,orden(2))/simplex(1,y); %se busca la
fila pivote, se divide var. sol. para columna 'y'
for i=2:(orden(1)-1)
if simplex(i,y)>0
aux=simplex(i,orden(2))/simplex(i,y); %se divide
var. sol. para columna pivote 'y'
if pivote<0 || aux<pivote %se busca el valor
menos positivo
pivote=aux;
x=i;
end
end
end
base(y)=x; %se guarda el indice en donde x entra a la
base
simplex(x,:)=simplex(x,:)/simplex(x,y); %se divide la
fila pivote para el elemento pivote
%se calculan los nuevos valores para las filas
for i=1:orden(1)
if i~=x %no se toma en cuenta la fila pivote
aux=(0); %se reemplaza toda la fila en simplex,
no elemento a elemento
for j=1:orden(2);
aux(j)=simplex(i,j)-
simplex(i,y)*simplex(x,j);
end
simplex(i,:)=aux; %se reemplaza toda la fila en
simplex
end
end
end
disp(simplex);
disp(base);
aux='SOLUCIÓN FACTIBLE:';
for i=1:handles.numVar
if base(i)~=0
aux=sprintf('%s\n x%d =
%.f',aux,i,simplex(base(i),orden(2)));
else
aux=sprintf('%s\n x%d = %.f',aux,i,0);
end
end
aux=sprintf('%s\n Z =
%.f',aux,abs(simplex(orden(1),orden(2))));
msgbox(aux,'Info');
% ********
function tablaDatos_CreateFcn(hObject,eventdata,handles)
set(hObject,'ColumnName',{});
set(hObject,'RowName',{});
set(hObject,'Data',[]);
% ********
function botCrear_Callback(hObject, eventdata, handles)
columnas={''};
filas={''};
for i=1:handles.numVar
columnas(i)={sprintf('x%d',i)};
end
orden=size(columnas);
columnas(orden(2)+1)={'Variable de solución'};
letra='a';
for i=1:handles.numRest
filas(i)={sprintf('%c',letra)};
letra=letra+1;
end
orden=size(filas);
filas(orden(2)+1)={'Z'};
%************************************************************
************
%se ajusta el ancho de las celdas de acuerdo al numero de
variables
ancho=get(handles.tablaDatos,'Position');
ancho=(ancho(3)-35)/length(columnas); %35 es el ancho
set(handles.tablaDatos,'ColumnWidth',{ancho});
% ********
function pmVariables_CreateFcn(hObject, eventdata, handles)
set(hObject,'String',{2,3});
% ********
function pmVariables_Callback(hObject, eventdata, handles)
handles.numVar=get(hObject,'Value')+1;
guidata(hObject,handles);
% ********
function pmRest_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','blue');
end
set(hObject,'String',{2,3,4,5,6,7,8,9,10});
% ********
function pmVar_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
set(hObject,'String',{2,3,4,5,6,7,8,9,10});
%*********
function pmRest_Callback(hObject, eventdata, handles)
handles.numRest=get(hObject,'Value')+1;
guidata(hObject,handles);
%*********
function pmVar_Callback(hObject, eventdata, handles)
handles.numVar=get(hObject,'Value')+1;
guidata(hObject,handles);
%*********
function tablaDatos_CellEditCallback(hObject, eventdata,
handles)
i=get(hObject,'Data');
if isnan(i(eventdata.Indices(1),eventdata.Indices(2)))
i(eventdata.Indices(1),eventdata.Indices(2))=0;
set(hObject,'Data',i);
end
INTERFÁZ GRÁFICA