用单纯形法求解线性规划问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

一.摘要 (2)

二.实验目的 (2)

三.实验内容 (2)

四.建立数学模型 (3)

五.实验原理 (5)

六.MALTAB程序代码及注释 (7)

七.结果运行测试 (13)

八.心得与感悟 (15)

一.摘要:

线性规划是运筹学中研究较早、发展较快、应用广泛、方法较成熟的一个重要分支,它是辅助人们进行科学管理的一种数学方法.研究线性约束条件下线性目标函数的极值问题的数学理论和方法,英文缩写LP。

自1946年G.B.Dantizig提出单纯形法以来,它一直是求解线性规划问题的最有效的数学方法之一。单纯形法的理论根据是:线性规划问题的可行域是 n 维向量空间Rn中的多面凸集,其最优值如果存在必在该凸集的某顶点处达到。顶点所对应的可行解称为基本可行解。通过引入普通单纯形法,依次迭代并判断,逐步逼近,最后得到最优解。若不是,则按照一定法则转换到另一改进的基本可行解,再鉴别;若仍不是,则再转换,按此重复进行。因基本可行解的个数有限,故经有限次转换必能得出问题的最优解。如果问题无最优解也可用此法判别。

关键字:线性规划,单纯形法,最优值,最优解

二.实验目的:

1.加强学生分析问题能力,锻炼数学建模能力。

2.了解并掌握MATLAB软件中的线性规划问题的编程、求解和分析。

3.利用所学的MALTAB语言,完成对单纯形法问题的编程设计。

三.实验内容:

某商场决定,营业员每周连续工作5天后连续休息2天,轮流休息,据统计,商场每天需要营业员如下:星期一:300,二:300;三:350,四:400,五:480,六:600;日:500;

(1)商场人力资源部应如何安排每天上班的人数才能使商场总的营业员最少

(2)若商场可以雇佣临时工,上班时间同正式工,若正式工每天工资80,临时工每天100,问商场是否应雇佣临时工及雇佣多少名?

四.建立数学模型:

从实际问题中建立数学模型一般有以下三个步骤:

1.根据影响所要达到目的的因素找到决策变量;

2.由决策变量和所在达到目的之间的函数关系确定目标函数;

3.由决策变量所受的限制条件确定决策变量所要满足的约束条件。

当我们得到的数学模型的目标函数为线性函数,约束条件为线性等式或不等式时称此数学模型为线性规划模型。

线性规划问题的标准形式:

由题可知,可设每天上班人数分别应为x1,x2,x3,x4,x5,x6,x7;

建立下列数学模型

将其转化为标准形式为:即

价值向量

约束矩阵

右端向量

五.实验原理:

根据单纯形法的原理,在线性规划问题中,决策变量(控制变量)x1,x2, (x)

n的值称为一个解,满足所有的约束条件的解称为可行解。使目标函数达到最大值(或最小值)的可行解称为最优解。这样,一个或多个最优解能在整个由约束条件所确定的可行区域内使目标函数达到最大值(或最小值)。求解线性规划问题的目的就是要找出最优解。

最优解可能出现下列情况之一:①存在着一个最优解;②存在着无穷多个最优解;③不存在最优解,这只在三种情况下发生,即没有可行解或各项约束条件不阻止目标函数的值无限增大(或向负的方向无限增大)。

单纯形法的一般解题步骤可归纳如下:

①把线性规划问题的约束方程组表达成典范型方程组,找出基本可行解作

为初始基本可行解。

②若基本可行解不存在,即约束条件有矛盾,则问题无解。

③若基本可行解存在,从初始基本可行解作为起点,根据最优性条件和可

行性条件,引入非基变量取代某一基变量,找出目标函数值更优的另一

基本可行解。

④按步骤3进行迭代,直到对应检验数满足最优性条件(这时目标函数值不

能再改善),即得到问题的最优解。

⑤若迭代过程中发现问题的目标函数值无界,则终止迭代。

流程图如下:

六.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矩阵右侧

g1=zeros(1,n); %生成一个1行n列的零矩阵g1

x=ones(1,m); %生成一个1行m列元素全为1的矩阵

g1=[g1 -x]; %将g1和-x合并,产生一个新的前n列为0后m列为-1的单行矩

g=[0]; %初始化一个单元素零矩阵

g1=[g1 g];%将单元素零矩阵添加到g1右侧,生成人工向量的检验向量g1 s1=n+m+1; %记录目前列数之和

s2=zeros(1,m+1);%生成1行m+1列的零矩阵s2

c=[c s2];%将s2添加到c右侧

A1=zeros(m,1);%生成一个m行1列的零矩阵A1

for i1=1:m

A1(i1,1)=i1+n;%基变量的数值存储区

end

for i=1:m

g1(1,:)= g1(1,:)+A(i,:);

end

decide=find(g1(1,1:m+n)>0); %寻找g1中大于零的数值列数存于decide

相关文档
最新文档