资源简介
用单纯形法解线性等式、不等式约束。目标函数为线性。程序用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
相关资源
- 车牌号识别程序,基于matlab可直接运
- 基于dft的图像压缩matlab实现
- 粒子群SVM.rar
- MATLAB实现SVPWM
- matlab-朴素贝叶斯-鸢尾花数据集
- LSTM-regression-master.zip
- LSTM算法推导及代码.zip
- 一维高斯随机粗糙面建模.zip
- 贝叶斯分类Matlab代码
- Matlab差分阈值法标记小波变换软阈值
- l利用matlab进行图像纹理特征提取
- 平面钢架问题求解MATLAB
-
Matlab下Simuli
nk搭建单轮四分之一车辆 - matlab-m语言-编程实现随机树算法实现
-
simuli
nk电弧模型 - 电力系统可靠性评估matlab编程
- 加注释完整CEEMD程序的matlab代码
- Sigma Delta ADC matlab全系统仿真.zip
- 基于椭圆雷达定位的matlab仿真
- 车辆ABS系统滑移率Bang-Bang、PID控制模
- 列车追踪间隔距离仿真
- MATLAB多种改进直方图均衡化
- 双边滤波图像处理方法MATLAB程序
- MATLAB:图像旋转与插值
- 模糊C均值聚类算法
- matlab整流电路
- matlab画雷达图
- matlab心电信号滤波R波提取
- FBG反射谱透射率的MATlab仿真,基于耦
- matlab2016
评论
共有 条评论