用单纯形法求解线性规划问题_第1页
用单纯形法求解线性规划问题_第2页
用单纯形法求解线性规划问题_第3页
用单纯形法求解线性规划问题_第4页
用单纯形法求解线性规划问题_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录一摘要 2二实验目的 2三实验内容 2四建立数学模型 3五实验原理 5六MALTAB程序代码及注释 7七结果运行测试 13八心得与感悟 15 一摘要:线性规划是运筹学中研究较早、发展较快、应用广泛、方法较成熟的一个重要分支,它是辅助人们进行科学管理的一种数学方法.研究线性约束条件下线性目标函数的极值问题的数学理论和方法,英文缩写LP。自1946年G.B.Dantizig提出单纯形法以来,它一直是求解线性规划问题的最有效的数学方法之一。单纯形法的理论根据是:线性规划问题的可行域是 n维向量空间Rn中的多面凸集,其最优值如果存在必在该凸集的某顶点处达到。顶点所对应的可行解称为基本可行解。通过引

2、入普通单纯形法,依次迭代并判断,逐步逼近,最后得到最优解。若不是,则按照一定法则转换到另一改进的基本可行解,再鉴别;若仍不是,则再转换,按此重复进行。因基本可行解的个数有限,故经有限次转换必能得出问题的最优解。如果问题无最优解也可用此法判别。关键字:线性规划,单纯形法,最优值,最优解二实验目的:1.加强学生分析问题能力,锻炼数学建模能力。2.了解并掌握MATLAB软件中的线性规划问题的编程、求解和分析。3.利用所学的MALTAB语言,完成对单纯形法问题的编程设计。三实验内容:某商场决定,营业员每周连续工作5天后连续休息2天,轮流休息,据统计,商场每天需要营业员如下:星期一:300,二:300;

3、三:350,四:400,五:480,六:600;日:500;(1)商场人力资源部应如何安排每天上班的人数才能使商场总的营业员最少(2)若商场可以雇佣临时工,上班时间同正式工,若正式工每天工资80,临时工每天100,问商场是否应雇佣临时工及雇佣多少名?四建立数学模型:从实际问题中建立数学模型一般有以下三个步骤: 1.根据影响所要达到目的的因素找到决策变量; 2.由决策变量和所在达到目的之间的函数关系确定目标函数; 3.由决策变量所受的限制条件确定决策变量所要满足的约束条件。 当我们得到的数学模型的目标函数为线性函数,约束条件为线性等式或不等式时称此数学模型为线性规划模型。 线性规划问题的标准形式

4、:由题可知,可设每天上班人数分别应为x1,x2,x3,x4,x5,x6,x7;建立下列数学模型将其转化为标准形式为:即价值向量约束矩阵右端向量五实验原理:根据单纯形法的原理,在线性规划问题中,决策变量(控制变量)x1,x2,x n的值称为一个解,满足所有的约束条件的解称为可行解。使目标函数达到最大值(或最小值)的可行解称为最优解。这样,一个或多个最优解能在整个由约束条件所确定的可行区域内使目标函数达到最大值(或最小值)。求解线性规划问题的目的就是要找出最优解。最优解可能出现下列情况之一:存在着一个最优解;存在着无穷多个最优解;不存在最优解,这只在三种情况下发生,即没有可行解或各项约束条件不阻止

5、目标函数的值无限增大(或向负的方向无限增大)。单纯形法的一般解题步骤可归纳如下: 把线性规划问题的约束方程组表达成典范型方程组,找出基本可行解作为初始基本可行解。 若基本可行解不存在,即约束条件有矛盾,则问题无解。 若基本可行解存在,从初始基本可行解作为起点,根据最优性条件和可行性条件,引入非基变量取代某一基变量,找出目标函数值更优的另一基本可行解。 按步骤3进行迭代,直到对应检验数满足最优性条件(这时目标函数值不能再改善),即得到问题的最优解。 若迭代过程中发现问题的目标函数值无界,则终止迭代。流程图如下:対原问题增加m个人工变量构造辅助问题判断辅助问题最优值g=0无解,停止人工变量xj是否

6、为非基变量把人工变量对应的列从单纯形表中去掉进行换基迭代得到新矩阵BB中是否有人工变量得到初始可行基B求对应典式和检验数判断k0得到最优解进行换基迭代得到新基判断Ak0问题无界否是否否是是否是六MALTAB程序代码及注释:function x,minf,flag,cpt=dcxsf(A,b,c)format rat %使数据可以以分数形式输出c=-c; %将目标函数系数向量加负号得到单纯形表第0行m,n=size(A); %求约束矩阵的行数和列数m1=m; %保存下原来的行数s=eye(m); %生成秩为m的单位矩阵A=A s; %将s矩阵添加到A矩阵右侧A=A b; %将b向量添加到A矩阵右

7、侧g1=zeros(1,n); %生成一个1行n列的零矩阵g1x=ones(1,m); %生成一个1行m列元素全为1的矩阵g1=g1 -x; %将g1和-x合并,产生一个新的前n列为0后m列为-1的单行矩阵g=0; %初始化一个单元素零矩阵g1=g1 g;%将单元素零矩阵添加到g1右侧,生成人工向量的检验向量g1s1=n+m+1; %记录目前列数之和s2=zeros(1,m+1);%生成1行m+1列的零矩阵s2c=c s2;%将s2添加到c右侧A1=zeros(m,1);%生成一个m行1列的零矩阵A1for i1=1:m A1(i1,1)=i1+n;%基变量的数值存储区endfor i=1:m

8、 g1(1,:)= g1(1,:)+A(i,:); end decide=find(g1(1,1:m+n)0); %寻找g1中大于零的数值列数存于decide数组中while isempty(decide) %当decide不为空 i=decide(1); %将列数赋给i text=find(A(1:m,i)0); %text存放该列中所有数值大于零的行数 if isempty(text) %如果text为空则无解 flag=0; break; end min=inf;%min初始化为无穷大 for i1=1:m % 当该列存在大于零的数值时 if A(i1,i)0&A(i1,s1)/A(i1

9、,i)0); % 再进行查找endif g1(1,s1)0 % 无解情况 flag=-1; endif g1(1,s1)=0 %置空矩阵 g1(1,:)=; for i6=1:m A(:,n+1)=; end for i6=1:m c(n+1)=; end decide=find(A1(1:m,1)n); % 查找是否有人工变量 if isempty(decide) while isempty(decide) x1=decide(1); % 存放的是人工变量的行数 text=find(A(x1,1:n)=0); % 该行的所有元素都不为零的列坐标 if isempty(text) %如果tex

10、t为空 decide(1)=; A1(x1,:)=; A(x1,:)=; m=m-1; else i=text(1); % i保存列数 A(x1,:)=A(x1,:)/A(x1,i);%进行单位化 A1(x1,1)=i; c(1,:)=c(1,:)+(-1*c(1,i)*A(x1,:); for i1=1:m if i1=x1 A(i1,:)=A(i1,:)+(-1*A(i1,i)*A(x1,:);%进行换基迭代 end end decide(1)=;%赋值为空 text(1)=; end end end decide=find(c(1,1:n)0); %decide存放c中该行中所有数值大于

11、零的列数 while isempty(decide) i=decide(1); % 将列数赋给i text=find(A(:,i)0); % 保存大于零的项的行数 if isempty(text) % 为空的时候,则无解 flag=0; %有可行解但无最优值,flag记为0 c=c;A; %将c添加到A矩阵上方的到对应解的单纯形表 cpt=c; x=zeros(n,1); for o=1:n for o1=1:m if o=A1(o1,1) x(o,1)=A(o1,n+1); end end end disp(该问题有可行解但没有最优解!) minf=-inf;%无最优值,将minf赋值为无穷

12、小 x=;%解向量为空 return; end min=inf; %min初始化为无穷大 for i1=1:m if A(i1,i)0&A(i1,n+1)/A(i1,i)0); % 再进行查找 end c=c;A;%得到对应解的单纯形表cpt=c;x=zeros(n,1); for o=1:n for o1=1:m if o=A1(o1,1) x(o,1)=A(o1,n+1); end endendminf=c(1,n+1);%得到最优值flag=1 ; %有最优值 记录flag为1end if flag=0 %有可行解但没有最优值情况 disp(该问题有可行解但没有最优解!) x=; %赋值

13、为空 minf=-inf;%最优值输出为无穷小 end if flag=1 %有可行解有最优值情况 disp(该问题存在最优解!) x=x; minf=minf; end; if flag=-1 %没有可行解情况 disp(该问题没有可行解!) x=;%赋值为空 cpt=; minf=; endend七结果运行测试:输入测试数据: A=1 1 1 1 1 0 0 -1 0 0 0 0 0 0;0 1 1 1 1 1 0 0 -1 0 0 0 0 0;0 0 1 1 1 1 1 0 0 -1 0 0 0 0;1 0 0 1 1 1 1 0 0 0 -1 0 0 0;1 1 0 0 1 1 1 0

14、 0 0 0 -1 0 0;1 1 1 0 0 1 1 0 0 0 0 0 -1 0;1 1 1 1 0 0 1 0 0 0 0 0 0 -1; b=300 300 350 400 480 600 550; c=1 1 1 1 1 1 1 0 0 0 0 0 0 0; x,minf,flag,cpt=dcxsf(A,b,c)运行结果为:该问题存在最优解!x = 170 290/3 120 50/3 0 200/3 440/3 310/3 0 0 0 0 0 0 minf = 1850/3 flag = 1 cpt = Columns 1 through 6 0 0 0 0 -1/3 0 1 0

15、 0 0 -1 0 0 0 1 0 -1 0 0 0 0 0 2/3 0 0 0 0 0 2/3 1 0 1 0 0 2/3 0 0 0 0 0 -5/3 0 0 0 0 1 2/3 0 Columns 7 through 12 0 0 -1/3 0 -1/3 0 0 0 0 1 -1 1 0 0 0 0 0 1 1 0 2/3 -1 2/3 -1 0 0 -1/3 0 -1/3 0 0 0 -1/3 0 2/3 -1 0 1 -2/3 1 -2/3 1 0 0 -1/3 0 -1/3 0 Columns 13 through 15 -1/3 -1/3 1850/3 -1 0 170 -1 0 120 2/3 -1/3 440/3 -1/3 2/3 200/3 2/3 -1/3 290/3 -2/3 -2/3 310/3 2/3 -1/3 50/3 解得最优解为(170 97 120 17 0 67 146)最优值为617八心得与感悟:通过本学期学习MALTAB软件,初步了解并掌握了MATLAB软件中的线性规划问题的编程求解的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论