最近在上《运筹与优化》这门课,讲到了单纯形法这部分,老师让我们上机用Matlab实现单纯形法,数学公式实现过程看不懂的我就暴力模拟了单纯形法的整个过程,包含无界解等情况。
1. 确定初始基矩阵
2. 更新 s i g m a sigma sigma,确定换入基
3. 更新 c h i _ d a chi\_da chi_da,确定换出基
4. 判断此时解的情况(最优解、无界解),是否结束计算过程
5. 初等行变换,更新矩阵系数
A=[2,-3,2,1,0;
1/3,1,5,0,1];
b=[15,20]';
c=[1,2,1,0,0];
m=2;
n=5;
format rat;%结果以分数形式显示
[x_opt,fx_opt,iter]=Simplex_eye(A,b,c,n,m)
%x_opt为最求解,fx_opt为最优函数值,iter为迭代次数
function [x_opt,fx_opt,iter]=Simplex_eye(A,b,c,n,m)
%先选出初始单位阵
iter=0;
init_eye_pos=nchoosek(1:1:n,m);
[row,col]=size(init_eye_pos);
for i = 1:row
tmp_init_eye=init_eye_pos(i,:);
init_eye=A(:,tmp_init_eye);
flag=is_ones(init_eye);
if flag==1
ji_x=tmp_init_eye;
break;
end
end
%循环迭代求解
sigma=zeros(n);
chi_da=(zeros(m))';
CB=(zeros(m))';
tmp_A=A;
flag=1;
while flag
iter=iter+1;
%更新sigma,确定换入基
for pos_c = 1:n
sigma(pos_c,1)=c(pos_c);
for pos_tmp = 1:m