[계획 최적화 OR] 단순형법 사상과 코드 실현Simplex Method
더 많은 운기획학 관련:https://github.com/Amoiensis/Operational-Research
계획 최적화 - Operational Research - Github
주의: 허락 없이 전재하지 마십시오!
전재 출처를 밝혀주세요~
적용 과정: 운기획학
코드1: 호출 부분
(파일 이름: Simplex method main.m)
% Simplex_Method
%%
% Author: Amoiensis
% Email: [email protected]
% Data: 2019.10.01
clear;clc;
%%
% Import Data %
% %
% A = [...
% 1 1 1 1 0 0 0;
% -2 1 -1 0 -1 1 0;
% 0 3 1 0 0 0 1;...
% ];
% b = [4 1 9]';
% C = [-3 0 1 0 0 -100 -1];
A = [...
1 1 1 1 0 0 0
1 0 0 0 1 0 0
0 0 1 0 0 1 0
0 3 1 0 0 0 1;...
];
b = [4 2 3 6]';
C = [1 14 6 0 0 0 0];
% % %
% A = [...
% 4 0 1....
% ];
% b = [16]';
% C = [2 3 0];
[~,~,RESULT] = Simplex_method_f(A,b,C);
코드 2: 바디 구현 섹션(함수 파일)
(파일 이름: Simplex method f.m)
function [max_value,result,PRINT] = Simplex_method_f(A,b,C)
% Simplex Method
% A、b、C / /
%%
% Author: Amoiensis
% Email: [email protected]
% Data: 2019.10.01
%%
% Structure(Program Simplex_Method)%
% max CX
% s.t. AX = b
% X >= 0
% Program to solve the liner-program atomatically
%%
% %
Size_A = size(A);
deta = zeros(1,Size_A(2)); %
sita_arry = zeros(1,Size_A(1));
sita = 0; %sita
Coef = zeros(1,Size_A(1)); %
Base = zeros(1,Size_A(1)); %
Decsion = b;%zeros(1,Size_A(1));%
END_deta = ones(1,Size_A(2)); % deta
ZEROS_ceofA = zeros(Size_A(1),1); % ,
FLAG = 0; % ;0- //1- (11)or (12)//2- //3-
Step = 1;
PUTOUT_R = "<>C_B // // b // x_1~x_n";
PUTOUT_C = " <> x_1~x_m // deta";
%%
%Operation
%STEP 1 %
while 1
%
if Size_A(1) == 1
Position(find(A == 1)) = 1;
else
Position = ((sum(A) == 1)&(min(A) == 0));
end
index_I = zeros(1,Size_A(1));
for i=1:Size_A(2)
if Position(i)
[~,temp] = max(A(:,i));
index_I(temp) = i;
end
end
Base = index_I;
Coef = C(index_I);
% , /deta sita
% deta , sita ? ?
%deta
for i=1:Size_A(2)
deta(i) = C(i) - (Coef)*A(:,i);
end
[temp_deta,Position_in] = max(deta); %
%%%%%%%%%%%%%%
% %
PRINT = zeros(1+Size_A(1),3+Size_A(2));
PRINT(1,1:3+Size_A(2)) = [nan(1,3),C];
PRINT(2:end,1) = Coef';
PRINT(2:end,2) = Base';
PRINT(2:end,3) = Decsion;
PRINT(2:end,4:3+Size_A(2)) = A;
PRINT(end+1,4:3+Size_A(2)) = deta;
PRINT(end,1:3) = [nan nan nan];
disp(strcat(" :",num2str(Step)));
disp(PUTOUT_C);
disp(PUTOUT_R);
disp(PRINT);
%%%%%%%%%%%%%%
Step = Step+1;
%%%%%%%%%%%%%%
%sita
sita_arry = Decsion./A(:,Position_in);
Size_sita_arry = size(sita_arry);
for i=1:Size_sita_arry(1)
if sita_arry(i)<=0
sita_arry(i) = nan;
end
end
% , ;
[sita,Position_out] = min(sita_arry);
for i=1:Size_sita_arry(1)
if sita_arry(i) == sita
Base(Position_out) < Base(i);
Position_out = i;
end
end
% %
%
if sita == inf
FLAG = 2;
break;
end
% - or %
if isequal(deta<=0,END_deta)
FLAG = 1;
break;
end
%
Decsion(Position_out) = Decsion(Position_out)/temp_num;
A(Position_out,:) = A(Position_out,:)/temp_num;
for i=1:Size_A(1)
if i~=Position_out
Decsion(i) = Decsion(i)- A(i,Position_in)*Decsion(Position_out);
A(i,:) = A(i,:)- A(i,Position_in)*A(Position_out,:);
end
end
end
%STEP 2 %
% : 、 、 、
Result = zeros(1,Size_A(2));
Result(Base) = Coef;
if FLAG == 1
temp_tell = deta == 0;
for i=1:Size_A(2)
if deta(i)==0 && sum((sita>0))
FLAG = 12; %
break;
end
end
if FLAG ==12
disp(" , “ ” .");
disp(" , :(x1~xn)");
disp(Result);
disp(" :");
disp(Coef*Decsion);
else
disp(" , .");
disp(" :(x1~xn)");
disp(Result);
disp(" :");
disp(Coef*Decsion);
end
else
if FLAG == 2
disp(" , ( ).");
else
if FLAG == 3
disp(" , .");
end
end
end
%%
% %
result = Result;
max_value = Coef*Decsion;
end
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
쓰레기 중의 최고급 HTML 편집기(IE OR FF 호 환)텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.