Método Simplex

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 7

UNIVERSIDAD NACIONAL DE LOJA

Por:
Karina Vásquez
Maria Belén Novillo
Verónica Soto

Prof.:

Ing. Luis Chamba.

Módulo:

Octavo“B”
% ******** MÉTODO SIMPLEX ********

function varargout = IOSimplex(varargin)


gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @IOSimplex_OpeningFcn,
...
'gui_OutputFcn', @IOSimplex_OutputFcn,
...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State,
varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end

% ********
[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});

%se rellena la tabla


set(handles.tablaDatos,'RowName',filas);
set(handles.tablaDatos,'ColumnName',columnas);
set(handles.tablaDatos,'ColumnEditable',true);
set(handles.tablaDatos,'ColumnFormat',{'numeric'});
set(handles.tablaDatos,'Data',zeros(handles.numRest+1,handles
.numVar+1));

% ********
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

También podría gustarte