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

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

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

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

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

单纯形算法MATLAB编程报告

单纯形算法MATLAB编程报告

 

 

————————————————————————————————作者:

————————————————————————————————日期:

 

机械优化设计

课程作业

 

题目:

  单纯形程序算法

 学 院:

   机电工程学院

   专业:

 机械工程  

    姓名:

    郑璐颖     

 学号:

 2015020287  

指导老师:

    王玉林    

 

2016年4月24日

基于MATLAB的单纯形算法实现

1.算法简述

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

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

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

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

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

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

(1).解

求得

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

得到

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

可直接计算

R为非基变量集合

若判别数

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

(3).解

得到

;若

的每个分量均非正数,

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

 

2.算法框图

初始化

 

初始可行基B

 

           

 

        

      否

                   输出结果,得到最优解

                 不存在有限最优解

确定下标r,使得

高斯迭代

     

 

3.计算程序

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

while flag

 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.) %为了使判别数尽可能趋近于零

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

    fprintf('已找到最优解!

\n');   

     xB=(B\b')';

f=cB*xB';

 fori=1:

   mark=0;

 forj=1:

m

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

     mark=1;

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

   end

 end

   if mark==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 )

      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】

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

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

例1:

min

  S.t 

窗口输入 rundanchunxing11zly

  A=[11-2100;2-14010;-12-4 001];

 b=[108 4];

  c=[1-210 0 0]

运行结果为:

w=

  0  0 0  

 

panbieshu=

 -1    2       -1    0     0   0   

 

z =

  2 

 

k=

    2  

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

ans =

 10 

-8   

 2 

x

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

B=

 1     0  1 

0       1  -1    

0  0 2  

 

cB=

  0      0   -2 

 

w=

0   0      -1   

 

panbieshu=

  0   0       3  0     0     -1 

 

z=

   3   

 

k=

 3

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

ans =

   1/0 

    4

 -2

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

B =

1    -2   1  

  0    4  -1  

  0  -4    2    

 

cB=

  0  1   -2    

 

w =

  0 -3/2    -7/4   

 

panbieshu=

   -9/4 0     0   0    -3/2  -7/4

 

z=

   0 

 

k=

    2 

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

ans=

 1/0 

  1/0 

    4

 已找到最优解!

xB=

8    5   12 

 

f=

  -19   

 

X=

     0     12   0     0     0      0  

 

X=

    0     12     5  0   0    0 

 

X=

  0  12    5     8      0   0 

基向量为:

X=

 0    125 8  0 0  

目标函数值为:

f =

  -19     

例2:

max  

   S.t 

命令窗口中输入:

 rundanchunxing11zly

A=[1 1 21 0;14-10 1]

b=[64]

c=[-2 -11 00]

运行结果为:

w=

0   0  

 

panbieshu=

  2    1  -1    0  0 

 

z=

 2  

 

k =

1  

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

ans=

  6 

4   

x

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

B=

  1   1 

   01  

 

cB =

    0  -2  

 

w=

  0   -2 

 

panbieshu=

  0  -7   1 0   -2    

 

z=

  1    

 

k =

   3

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

ans=

    2    

-4 

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

B =

   2     1

  -1     1 

 

cB=

1     -2  

 

w =

-1/3   -5/3 

 

panbieshu=

 0   -6   0  -1/3   -5/3

 

z =

  0  

 

k=

 1   

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

ans=

    1/0 

 4  

已找到最优解!

X=

  14/3   0  0    0    0    

 

X=

14/3  0   2/3  0  0

基向量为:

X=

    14/3    0      2/3    0     0 

目标函数值为:

f =

  -26/3

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

当前位置:首页 > 经管营销 > 公共行政管理

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

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