资源简介
用单纯形法解线性等式、不等式约束。目标函数为线性。程序用matlab的m函数编写,请用matlab打开。

代码片段和文件信息
function [xofvalueexitflag]=simplex_method(nfAbigbbigAsmallbsmallAeqbeq)
%作者aeh
%最后编辑时间2018/10/22
% 该单纯形法解决以下问题
% min ofvalue=f*x
% s.t. Abig*x>=bbig
% Asmall*x<=bsmall
% Aeq*x=beq
% x>=0
% n=length(x)
% f x bbig bsmall beq are vector and Abig Asmall Aeq are matrix.
%--------------------1.1 Standardization------------------
%该部分将加入松弛变量和剩余变量进行标准化
%使之变成如下形式
% min ofvalue=f*x‘
% s.t. AEq*x=BEq
% x‘>=0
%-------------案例-------------
% Asmall=[1-21];bsmall=[11];
% Abig=[-412];bbig=[3];
% Aeq=[-201];beq=[1];n=3;
% f=[-311];
%-----------------------------
m1=length(bbig);
m2=length(bsmall);
m3=length(beq);
BEq=[bbig;bsmall;beq];AEq=[];
a1=eye(m1+m2+m3m1+m2);
for i=1:m1
AEq(i:)=[Abig(i:)-1*a1(i:)];
end
for i=1:m2
AEq(i+m1:)=[Asmall(i:)a1(i+m1:)];
end
for i=1:m3
AEq(i+m1+m2:)=[Aeq(i:)a1(i+m1+m2:)];
end
for i=1:(m1+m2+m3) %使BEq元素均为正值
if(BEq(i)<0)
BEQ(i)=-BEq(i);
AEq(i:)=-AEq(i:);
else
BEq(i)=BEq(i);
AEq(i:)=AEq(i:);
end
end
%-----------1.2 判断AEq矩阵是否具备初始基--------------
a2=eye(m1+m2+m3);
for i=1:(m1+m2+m3)
for j=1:(n+m1+m2)
if isequal(AEq(:j)a2(:i))
flag2(i)=1;position2(i)=j;
end
end
end
if (length(position2) position2(m1+m2+m3)=0;
end
%-------1.3 如果不具备初始基,添加人工变量-----
if sum(flag2)~=(m1+m2+m3)
j=1;
for i=1:m1+m2+m3
if position2(i)==0
arbase2(j)=i;j=j+1; %在arbase2中存放的i表示需要添加的人工变量在单位矩阵的第i列。
end
end
lea=length(arbase2);
for i=1:lea %按顺序在AEq的末端添加人工列
aux=zeros(m1+m2+m31);
j=arbase2(i);
aux(j)=1;
AEq(:n+m1+m2+i)=aux;
end
end
%-----------1.4 记录初始基的列数-----------------------
j=1;
for i=1:m1+m2+m3 %Col按顺序存放单位矩阵的列数,i表示单位矩阵的第几列而Col(i)表示在AEq中的列数
if (position2(i)~=0)
Col(i)=position2(i);
else
Col(i)=n+m1+m2+j;j=j+1;
end
end
%-------------------------1.5基变换-------------------------
C=zeros(1n+m1+m2+lea);
for i=1:lea
C(n+m1+m2+i)=1;
end
%--------选主元------
B=Col;
for i=1:m1+m2+m3
cI(i)=C(B(i));
end
[exitnumsigma]=judgeopt(AEqCB);
while(exitnum==2)
[AEQBEQBnewpcLpc]=exbase(AEqBEqCB);
B=Bnew;AEq=AEQ;BEq=BEQ;
[exitnumsigma]=judgeopt(AEqCB);
end
%----------------------------------------第二阶段---------------------------------------
%去掉人工变量,还原目标函数系数,作初始单纯形表
C=zeros(1n+m1+m2);
for i=1:length(f)
C(i)=f(i);
end
AEQ=[];
for i=1:n+m1+m2
AEQ(:i)=AEq(:i);
end
AEq=AEQ;
%二阶段单纯形法的换基运算
[exitnumsigma]=judgeopt(AEqCB);
while(exitnum
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5766 2019-04-23 09:25 simplex_method.m
相关资源
- 高灵敏度GPS接收机MATLAB仿真,附捕获
- 基于MATLAB的质点弹道计算与外弹道优
- 阵列天线的matlab仿真
- MATLAB 经典程序源代码大全
- MATLAB小波软阈值去噪代码33473
- 天线阵的波束形成在MATLAB仿真程序及
- 非线性SVM算法-matlab实现
- 《MATLAB 智能算法超级学习手册》-程序
- 组合导航matlab程序
- 读取txt文件内容matlab代码实现
- Matlab实现基于相关的模板匹配程序
- matlab优化工具箱讲解
- 基于MATLAB的快速傅里叶变换
- 光纤传输中的分布傅立叶算法matlab实
- 基于matlab的图像处理源程序
- matlab 椭圆拟合程序
- 算术编码解码matlab源代码
- optical_flow 光流法 matlab 实现程序
- 引导图像滤波器 Matlab实现
- 分形几何中一些经典图形的Matlab画法
- OFDM系统MATLAB仿真代码
- SVM工具箱(matlab中运行)
- 图像小波变换MatLab源代码
- LU分解的MATLAB实现
- 冈萨雷斯数字图像处理matlab版(第三
- 替代数据法的matlab程序
- 用matlab实现的多站定位系统性能仿真
- 通过不同方法进行粗糙集属性约简m
- k近邻算法matlab实现
- matlab识别系统
评论
共有 条评论