单纯形算法MATLAB编程报告.docx

上传人:b****6 文档编号:8939338 上传时间:2023-02-02 格式:DOCX 页数:17 大小:1.70MB
下载 相关 举报
单纯形算法MATLAB编程报告.docx_第1页
第1页 / 共17页
单纯形算法MATLAB编程报告.docx_第2页
第2页 / 共17页
单纯形算法MATLAB编程报告.docx_第3页
第3页 / 共17页
单纯形算法MATLAB编程报告.docx_第4页
第4页 / 共17页
单纯形算法MATLAB编程报告.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

单纯形算法MATLAB编程报告.docx

《单纯形算法MATLAB编程报告.docx》由会员分享,可在线阅读,更多相关《单纯形算法MATLAB编程报告.docx(17页珍藏版)》请在冰豆网上搜索。

单纯形算法MATLAB编程报告.docx

单纯形算法MATLAB编程报告

机械优化设计

课程作业

 

题目:

单纯形程序算法

学院:

机电工程学院

专业:

机械工程

******

学号:

**********

********

 

2016年4月24日

基于MATLAB的单纯形算法实现

一.算法简述

为求解下面线性规划问题:

其中初始可行基为松弛变量对应的列组成.

对于一般标准线性规划问题:

1.求解上述一般标准线性规划的单纯形算法步骤如下:

对于一般的标准形式线性规划问题(求极小问题),首先给定一个初始基本可行解。

设初始基为B,然后执行如下步骤:

(1).解

求得

(2).计算单纯形乘子w,

得到

对于非基变量,计算判别数

可直接计算

R为非基变量集合

若判别数

则得到一个最优基本可行解,运算结束;否则,转到下一步

(3).解

得到

;若

的每个分量均非正数,

则停止计算,问题不存在有限最优解,否则,进行步骤(4).确定下标r,使

 

二.

算法框图

初始化

初始可行基B

输出结果,得到最优解

不存在有限最优解

确定下标r,使得

 

三.计算程序

Clear%清空工作区

Clc%清空命令输入框

A=input('A=');

b=input('b=');

c=input('c=');

formatrat%可以让结果用分数输出

[m,n]=size(A);%取维数

E=1:

m;E=E';

F=n-m+1:

n;F=F';

D=[E,F];%创建一个一一映射,为了结果能够标准输出

X=zeros(1,n);%初始化X

if(n

fprintf('不符合标准形式需引入松弛变量')

flag=0;

else

flag=1;

B=A(:

n-m+1:

n);%找基矩阵

cB=c(n-m+1:

n);%基矩阵对应目标值的c

whileflag

w=cB/B%计算单纯形乘子,cB/B=cB*inv(B),左除相当于求逆

panbieshu=w*A-c%计算判别数,后面没有加分号,就是为了计算后能够显示出来

[z,k]=max(panbieshu)%k作为进基变量下标

fprintf('确定下标并选择进基变量和离基变量为\n',k);

b'./(B\A(:

k))%这个式子是为了确定进基变量和离基变量的下标

if(z<0.00000000001)%为了使判别数尽可能趋近于零

flag=0;%所有判别数都小于0时达到最优解

fprintf('已找到最优解!

\n');

xB=(B\b')';

f=cB*xB';

fori=1:

n

mark=0;

forj=1:

m

if(D(j,2)==i)

mark=1;

X(i)=xB(D(j,1))%利用D找出xB与X之间的关系

end

end

ifmark==0

X(i)=0;%如果D中没有X(i),则X(i)为非基变量,所以X(i)=0

end

end

fprintf('基向量为:

');X

fprintf('目标函数值为:

');f

else

if(B\A(:

k)<=0)%如果B\A(;,k)中的每一个分量都小于零

flag=0;

fprintf('\n此问题不存在最优解!

\n');%若B\A(:

k)的第k列均不大于0,则该问题不存在最优解

else

b1=B\b';

temp=inf;

fori=1:

m

if((A(i,k)>0)&&(b1(i)/(A(i,k)+eps))

temp=b1(i)/A(i,k);%找离基变量

r=i;

end

end

fprintf('x(%d)进基,x(%d)离基\n',k,D(r,2));%显示进基变量和离基变量

B(:

r)=A(:

k)

cB(r)=c(k)%确定进基离基变量后,相应的基矩阵及新基对应的目标值的c也相应改变

D(r,2)=k;%改变D中的映射关系

end

end

end

end

【备注:

文件名字为danchunxing11zly.m】

四.使用方法以及运算实例

在命令窗口中输入rundanchunxing11zly,然后依次按照提示完成约束以及目标函数的矩阵。

例1:

min

S.t

窗口输入rundanchunxing11zly

A=[11-2100;2-14010;-12-4001];

b=[1084];

c=[1-21000]

运行结果为:

w=

000

 

panbieshu=

-12-1000

 

z=

2

 

k=

2

确定下标并选择进基变量和离基变量为

ans=

10

-8

2

x

(2)进基,x(6)离基

B=

101

01-1

002

 

cB=

00-2

 

w=

00-1

 

panbieshu=

00300-1

 

z=

3

 

k=

3

确定下标并选择进基变量和离基变量为

ans=

1/0

4

-2

x(3)进基,x(5)离基

B=

1-21

04-1

0-42

 

cB=

01-2

 

w=

0-3/2-7/4

 

panbieshu=

-9/4000-3/2-7/4

 

z=

0

 

k=

2

确定下标并选择进基变量和离基变量为

ans=

1/0

1/0

4

已找到最优解!

xB=

8512

 

f=

-19

 

X=

0120000

 

X=

0125000

 

X=

0125800

基向量为:

X=

0125800

目标函数值为:

f=

-19

例2:

max

S.t

命令窗口中输入:

rundanchunxing11zly

A=[11210;14-101]

b=[64]

c=[-2-1100]

运行结果为:

w=

00

 

panbieshu=

21-100

 

z=

2

 

k=

1

确定下标并选择进基变量和离基变量为

ans=

6

4

x

(1)进基,x(5)离基

B=

11

01

 

cB=

0-2

 

w=

0-2

 

panbieshu=

0-710-2

 

z=

1

 

k=

3

确定下标并选择进基变量和离基变量为

ans=

2

-4

x(3)进基,x(4)离基

B=

21

-11

 

cB=

1-2

 

w=

-1/3-5/3

 

panbieshu=

0-60-1/3-5/3

 

z=

0

 

k=

1

确定下标并选择进基变量和离基变量为

ans=

1/0

4

已找到最优解!

X=

14/30000

 

X=

14/302/300

基向量为:

X=

14/302/300

目标函数值为:

f=

-26/3

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1