运筹学课程设计.docx

上传人:b****4 文档编号:27335490 上传时间:2023-06-29 格式:DOCX 页数:30 大小:235.38KB
下载 相关 举报
运筹学课程设计.docx_第1页
第1页 / 共30页
运筹学课程设计.docx_第2页
第2页 / 共30页
运筹学课程设计.docx_第3页
第3页 / 共30页
运筹学课程设计.docx_第4页
第4页 / 共30页
运筹学课程设计.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

运筹学课程设计.docx

《运筹学课程设计.docx》由会员分享,可在线阅读,更多相关《运筹学课程设计.docx(30页珍藏版)》请在冰豆网上搜索。

运筹学课程设计.docx

运筹学课程设计

HUNANUNIVERSITY

 

运筹学课程设计

报告

 

课程题目整数线性规划及应用

学生姓名

学生学号

专业班级

指导老师

 

3.10-1规划隐枚举法---------------------------------------------5

3.2指派问题的匈牙利方法-----------------------------------------6

二、整数规划问题的LINGO求解----------------------------------------7

 

摘要

运筹学主要研究经济活动和军事活动中能用数量来表达的有关策划、管理方面的问题。

它以整体最优为目标,从系统的观点出发,力图以整个系统最佳的方式来解决该系统各部门之间的利害冲突。

对所研究的问题求出最优解,寻求最佳的行动方案,所以它也可看成是一门优化技术,提供的是解决各类问题的优化方法。

运筹学作为一门用来解决实际问题的学科,在处理千差万别的各种问题时,一般有以下几个步骤:

确定目标、制定方案、建立模型、制定解法。

其目的是根据实际问题的具体要求,通过定量的分析与运算,对资源运用、规划及其相关决策等问题作出综合最有的合理安排,以使有限的资源发挥更大的效益或作用。

LINGO可以用于求解非线性规划,也可以用于一些线性和非线性方程组的求解等,功能十分强大,是求解优化模型的最佳选择。

其特色在于内置建模语言,提供十几个内部函数,可以允许决策变量是整数(即整数规划,包括0-1整数规划),方便灵活,而且执行速度非常快。

在运筹学的研究中,LINGO如见扮演着重要的角色。

一般地,使用LINGO求解运筹学问题可以分为以下两个步骤来完成:

1)根据实际问题,建立数学模型,即使用数学建模的方法建立优化模型;

2)根据优化模型,利用LINGO来求解模型。

主要是根据LINGO软件,把数学模型转译成计算机语言,借助于计算机来求解。

本文主要研究整数规划,建立整数规划数学模型,运用LINGO软件求解整数规划的最优解,从而获得最优方案。

因此,整数规划的模型对研究运筹学问题有重要的意义。

关键词:

运筹学整数规划LINGO最优解0-1整数规划

一、整数规划概述

整数规划是指一类要求问题中的全部或一部分变量为整数的数学规划。

是近三十年来发展起来的、规划论的一个分支.。

整数规划问题是要求决策变量取整数值的线性规划或非线性规划问题。

一般认为非线性的整数规划可分成线性部分和整数部分,因此常常把整数规划作为线性规划的特殊部分。

在线性规划问题中,有些最优解可能是分数或小数,但对于某些具体问题,常要求解答必须是整数。

例如,所求解是机器的台数,工作的人数或装货的车数等。

为了满足整数的要求,初看起来似乎只要把已得的非整数解舍入化整就可以了。

实际上化整后的数不见得是可行解和最优解,所以应该有特殊的方法来求解整数规划。

整数规划是从1958年由R.E.戈莫里提出割平面法之后形成独立分支的,30多年来发展出很多方法解决各种问题。

解整数规划最典型的做法是逐步生成一个相关的问题,称它是原问题的衍生问题。

对每个衍生问题又伴随一个比它更易于求解的松弛问题(衍生问题称为松弛问题的源问题)。

通过松弛问题的解来确定它的源问题的归宿,即源问题应被舍弃,还是再生成一个或多个它本身的衍生问题来替代它。

随即,再选择一个尚未被舍弃的或替代的原问题的衍生问题,重复以上步骤直至不再剩有未解决的衍生问题为止。

目前比较成功又流行的方法是分枝定界法和割平面法,它们都是在上述框架下形成的。

整数线性规划中如果所有的变量都限制为非负整数,就称为纯整数线性规划或全整数线性规划;如果仅一部分变量限制为整数,则称为混合整数规划。

整数规划的一种特殊情形是0-1规划,它的变量的取值仅限于0和1。

整数规划的一个著名问题---指派问题就是0-1规划问题。

目前所流行的求解整数规划的方法,往往只适用于整数线性规划.本文我们主要讨论整数线性规划问题.

整数线性规划一般模型:

s.t

它的求解往往较为复杂,现在公认的几种解法有分支定界法、割平面法和完全枚举法。

但随着计算机技术的发展,求解整数规划问题已经不是难事,如Lingo和Lindo等软件都可以十分轻松的进行求解。

下面对部分解法进行介绍和探讨。

 

1.分支定解法

对有约束条件的最优化问题(其可行解为有限数)的可行解空间恰当地进行系统搜索,这就是分枝与定界内容.通常,把全部可行解空间反复地分割为越来越小的子集,称为分枝;并且对每个子集内的解集计算一个目标下界(对于最小值问题),这称为定界.在每次分枝后,凡是界限不优于已知可行解集目标值的那些子集不再进一步分枝,这样,许多子集可不予考虑,这称剪枝。

这就是分枝定界法的主要思路.。

分枝定界法可用于解纯整数或混合的整数规划问题。

在二十世纪六十年代初由LandDoig和Dakin等人提出.由于这方法灵活且便于用计算机求解,所以现在它已是解整数规划的重要方法。

目前已成功地应用于求解生产进度问题、旅行推销员问题、工厂选址问题、背包问题及分配问题等.设有最大化的整数规划问题A,与它相应的线性规划为问题B,从解问题B开始,若其最优解不符合A的整数条件,那么B的最优目标函数必是A的最优目标函数

的上界,记作

;而A的任意可行解的目标函数值将是

的一个下界

.分枝定界法就是将B的可行域分成子区域再求其最大值的方法.逐步减小

和和增大

,最终求到

用分枝定界法求解整数规划(最大化)问题的步骤为:

开始,将要求解的整数规划问题称为问题A,将与它相应的线性规划问题称为问题B。

A、解问题B可能得到以下情况之一:

(a).B没有可行解,这时A也没有可行解,则停止。

(b).B有最优解,并符合问题A的整数条件,B的最优解即为A的最优解,则停止。

(c).B有最优解,但不符合问题A的整数条件,记它的目标函数值为

.。

B、用观察法找问题A的一个整数可行解,一般可取

试探,求得其目标函数值,并记作

.以

表示问题A的最优目标函数值;这时有

C、进行迭代

第一步:

分枝,在B的最优解中任选一个不符合整数条件的变量

,其值为

,以[

示小于

的最大整数.构造两个约束条件

将这两个约束条件,分别加入问题B,求两个后继规划问题

.不考虑整数条件求解这两个后继问题.。

定界,以每个后继问题为一分枝标明求解的结果,与其它问题的解的结果中,找出最优目标函数值最大者作为新的上界

.从已符合整数条件的各分支中,找出目标函数值为最大者作为新的下界

,若无可行解,

=0。

第二步:

比较与剪枝,各分枝的最优目标函数中若有小于

者,则剪掉这枝,即以后不再考虑了.若大于

,且不符合整数条件,则重复第一步骤.一直到最后得到

为止。

得最优整数解

L

2.割平面法

用割平面法求解整数规划的基本思路是:

先不考虑整数约束条求松弛问题的最优解,如果获得整数最优解,即为所求,运算停止。

如果所得到最优解不满足整数约束条件,则在此非整数解的基础上增加新的约束条件重新求解。

这个新增加的约束条件的作用就是去切割相应松弛问题的可行域,即割去松弛问题的部分非整数解(包括原已得到的非整数最优解),而把所有的整数解都保留下来,故称新增加的约束条件为割平面。

当经过多次切割后,就会使被切割后保留下来的可行域上有一个坐标均为整数的顶点,它恰好就是所求问题的整数最优解。

即切割后所对应的松弛问题,与原整数规划问题具有相同的最优解。

割平面法的基本步骤:

A、先不考虑变量的取整约束,用单纯形法求解相应的线性规划问题,如果该问题没有可行解或最优解已是整数则停止,否则转下步。

在求解相应的线性规划时,首先要将原问题的数学模型进行标准化。

这里的“标准化”有两个含义:

第一是将所有的不等式约束全部转化成等式约束,这是因为要采用单纯形表进行计算的缘故。

第二是将整数规划中所有非整数系数全部转换成整数,这是出于构造“切割不等式”的需要。

B、求一个“切割不等式”及添加到整数规划的约束条件中去,即对上述线性规划问题的可行域进行“切割”,然后返回步骤1。

3.0-1整数规划的数学模型

如果整数规划中的所有决策变量

仅限于取0或1两个值,则称此问题为0-1整数规划,简称0-1规划。

其变量

称为0-1变量,或二进制变量。

相应的决策变量的取值约束变为

或1,等价于

,且为整数。

0-1线性规划的一般模型为:

s.t.

3.10-1规划隐枚举法

0-1整数规划模型的解法一般为显枚举法(穷举法)或隐枚举法。

穷举法指的是对决策变量

的的每一个0或1值,均比较其目标函数值的大小,以从中求出最优解。

这种方法一般适用于决策变量个数n较小的情况,当n较大时,由于n个0、1的可能组合数为

,故此时即便用计算机进行穷举来求最优解,也几乎是不可能的。

求解0-1整数规划问题的解法均是隐枚举法或称为部分枚举法.隐枚举法是增加了过滤条件的一类穷举法。

个可能的变量组合中,往往只有一部分是可行解.。

只要发现某个变量组合不满足其中的某一约束条件时,就不必要检验其它的约束条件是否可行。

若发现一个可行解,则根据它的目标函数值可以产生一个过滤条件(Filteringconstraint),对于目标函数值比它差的的变量组合就不必再去检验它的可行性(类似分支定界法中的定界。

实际上,隐枚举法是一种特殊的分支定界法)。

在以后求解过程中,每当发现比原来更好的可行解,则依次替代原来的过滤条件(可减少运算次数,较快地发现最优解)。

例求解下述0-1整数规划问题:

 

 

求解过程如下:

 

 

所以,最优解为(x1,x2,x3)=(1,0,1),最优值为8。

3.2指派问题的匈牙利方法

指派问题的模型:

一般地,有n项任务n个完成人,第i人完成第j项任务的代价为

,为了求得总代价最小的指派方案,引入0-1型变量

,并令

则,问题数学模型为

s.t.

可见指派问题是0-1型整数规划的特例。

匈牙利算法的基本步骤为:

步骤1对效益矩阵进行变换,使每行每列都出现0元素。

(1)从效益矩阵c中每一行减去该行的最小元素;

(2)再在所得矩阵中每一列减去该列的最小元素,所得矩阵记为D一(d.)..

步骤2将矩阵D中0元素置为1元素,非零元素置为0元素,记此矩阵为E。

步骤3确定独立1元素组。

(1)在矩阵E含有1元素的各行中选择1元素最少的行,比较该行中各1元素所在的列中1元素的个数,选择1元素的个数最少的一列的那个1元素;

(2)将所选的1元素所在的行和列清0;

(3)重复第2步和第3步,直到没有1元素为止,即得到一个独立1元素组。

步骤4判断是否为最大独立1元素组。

(1)如果所得独立1元素组是原效益矩阵的最大独立1元素组(即1元素的个数等于矩阵的阶数),则已得到最优解,停止计算。

(2)如果所得独立1元素组还不是原效益矩阵的最大独立1元素组,那么利用寻找可扩路的方法对其进行扩张,进行下一步。

步骤5利用寻找可扩路方法确定最大独立1元素组。

(1)做最少的直线覆盖矩阵D的所有0元素;

(2)在没有被直线覆盖的部分找出最小元素,在没有被直线覆盖的各行减去此最小元素,在没被直线覆盖的各列加上此最小元素,得到一个新的矩阵,返回第2步。

二、整数规划问题的LINGO求解方法

LINDO是一种专门用于求解数学规划问题的软件包。

它是一套设计用来帮助快速,方便和有效的构建和求解线性,非线性,和整数最优化模型的功能全面的工具。

包括功能强大的建模语言,建立和编辑问题的全功能环境,读取和写入Excel和数据库的功能,和一系列完全内置的求解程序。

LINDO中包含的一种建模语言和许多常用的数学函数(包括大量概率函数),可供使用者建立数学规划问题模型时调用。

是求解优化模型的最佳选择。

1.一般整数规划的解法

一般的整数规划模型程序如下:

MODEL:

sets:

num_i/1..m/:

b;

num_j/1..n/:

x,c;

link(num_i,num_j):

a;

endsets

data:

b=b

(1),b

(2),...b(m);

c=c

(1),c

(2),...c(n);

a=a(1,1),a(1,2),...,a(1,n),

a(2,1),a(2,2),...,a(2,n),

...

a(m,1),a(m,2),...,a(m,n);

enddata

[OBJ]max=@sum(num_j(j):

c(j)*x(j));

@for(num_i(i):

@sum(num_j(j):

a(i,j)*x(j))<=b(i););

@for(num_j(j):

x(j)>=0;);

@for(num_j(j):

@GIN(x(j)););

END

2.一般0-1规划的解法

针对一般的

规划模型编写LINGO程序,在这里假设目标函数为最大化问题,约束条件都为“小于等于”的情况.

具体程序如下:

MODEL

sets:

num_i/1..m/:

b;

num_j/1..n/:

x,c;

link(num_i,num_j):

a;

endsets

data:

b=b

(1),b

(2),...,b(m);

c=c

(1),c

(2),...,c(n);

a=a(1,1),a(1,2),...,a(1,n),

a(2,1),a(2,2),...,a(2,n),

...

a(m,1),a(m,2),...,a(m,n);

enddata

[OBJ]max=@sum(num_j(j):

c(j)*x(j));

@for(num_i(i):

@sum(num_j(j):

a(i,j)*x(j))<=b(i););

@for(num_j(j):

@sumBIN(x(j)););

END

3、整数规划应用

1.一般整数规划问题实例分析

例人力资源分配问题

星期

人数

12

15

12

14

16

18

19

某个中型百货商场对售货人员(周工资200元)的需求经统计如上表,为了保证销售人员充分休息,销售人员每周工作5天,休息2天。

问应如何安销售人员的工作时间,使得所配售货人员的总费用最小?

模型假设:

(1)每天工作8小时,不考虑夜班的情况;

(2)每个人的休息时间为连续的两天时间;

(3)每天安排的人员数不得低于需求量,但可以超过需求量

因素:

不可变因素:

需求量、休息时间、单位费用;

可变因素:

安排的人数、每人工作的时间、总费用;

方案:

确定每天工作的人数,由于连续休息2天,当确定每个人开始休息的时间就等于知道工作的时间,因而确定每天开始休息的人数就知道每天开始工作的人数,从而求出每天工作的人数。

变量:

每天开始休息的人数

约束条件

(1)每人休息时间2天,自然满足。

(2)每天工作人数不低于需求量,第

天工作的人数就是从第

天往前数5天内开始休息的人数,所以有约束:

(3)变量非负约束:

目标函数:

总费用最小,总费用与使用的总人数成正比。

由于每个人必然在且仅在某一天开始休息,所以总人数等于

模型:

用LINGO计算:

model:

min=200*x1+200*x2+200*x3+200*x4+200*x5+200*x6+200*x7;

x2+x3+x4+x5+x6>=12;

x3+x4+x5+x6+x7>=15;

x1+x4+x5+x6+x7>=12;

x1+x2+x5+x6+x7>=14;

x1+x2+x3+x6+x7>=16;

x1+x2+x3+x4+x7>=18;

x1+x2+x3+x4+x5>=19;

@gin(x1);@gin(x2);@gin(x3);@gin(x4);@gin(x5);@gin(x6);@gin(x7);

End

运行结果如下:

Globaloptimalsolutionfound.

Objectivevalue:

4400.000

Objectivebound:

4400.000

Infeasibilities:

0.000000

Extendedsolversteps:

0

Totalsolveriterations:

4

 

VariableValueReducedCost

X17.000000200.0000

X20.000000200.0000

X38.000000200.0000

X40.000000200.0000

X54.000000200.0000

X60.000000200.0000

X73.000000200.0000

RowSlackorSurplusDualPrice

14400.000-1.000000

20.0000000.000000

30.0000000.000000

42.0000000.000000

50.0000000.000000

62.0000000.000000

70.0000000.000000

80.0000000.000000

注:

(1)该问题本质上是个整数规划问题,放松的线性规划的最优解是个整数解,所以两规划等价。

(2)定义整数变量用函数@gin(x1)……@gin(x7);

2.0-1整数规划的实例分析

例消防站问题(教材课后习题6.4)

某城市的消防总站将全市划分为11个防火区,现有4个消防站,图4-11给出的是该城市各防火区域和防火站的示意图,其中1,2,3,4,表示消防站1,2,…11表示防火区域,根据历史资料证实,各消防站可在事先规定允许的时间内对所负责的区域内的火灾予以扑灭,图中没有虚线连接的就表示不负责,现在总部提出:

能否减少消防站的数目,仍能保证负责各地区的防火任务?

如果可以的话,应该关闭哪个?

解:

根据题意,用xi表示第i个消防站的关系的打开关闭情况

xi=1;第i个消防站不关闭

Xi=0;第i个消防站关闭

用y代表第i个消防站到第j个防火区域的到达情况,0表示不可达,1表示可达,Y=[1,1,1,1,0,1,1,1,0,0,0;

  1,1,0,1,0,0,0,1,1,0,0;

  0,0,0,1,1,1,0,0,0,0,1;

  0,0,0,0,0,1,1,1,1,1,1;]

则问题可归结为0—1整数规划模型。

minz=sumx(i);

St:

x(i)*y(i,j)>=1;j=1,2,3...11

x(i)<=3;

X=0或1

利用LINGO求解:

model:

sets:

n_i/1..4/:

x;

n_j/1..11/;

link(n_i,n_j):

y;

endsets

data:

y=1,1,1,1,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,1;

enddata

[obj]min=@sum(n_i(i):

x(i));

@for(n_j(j):

@sum(n_i(i):

x(i)*y(i,j))>=1;);

@for(n_j(j):

@sum(n_i(i):

x(i))<=3;);

@for(n_i(i):

@bin(x(i));x(i)>=0;);

end

运行结果:

Globaloptimalsolutionfound.

Objectivevalue:

3.000000

Objectivebound:

3.000000

Infeasibilities:

0.000000

Extendedsolversteps:

0

Totalsolveriterations:

0

 

VariableValueReducedCost

X

(1)1.0000001.000000

X

(2)0.0000001.000000

X(3)1.0000001.000000

X(4)1.0000001.000000

Y(1,1)1.0000000.000000

Y(1,2)1.0000000.000000

Y(1,3)1.0000000.000000

Y(1,4)1.0000000.000000

Y(1,5)0.0000000.000000

Y(1,6)1.0000000.000000

Y(1,7)1.0000000.000000

Y(1,8)1.0000000.000000

Y(1,9)0.0000000.000000

Y(1,10)0.0000000.000000

Y(1,11)0.0000000.000000

Y(2,1)1.0000000.000000

Y(2,2)1.0000000.000000

Y(2,3)0.0000000.000000

Y(2,4)1.0000000.000000

Y(2,5)0.0000000.000000

Y(2,6)0.0000000.000000

Y(2,7)0.0000000.000000

Y(2,8)1.0000000.000000

Y(2,9)1.0000000.000000

Y(2,10)0.0000000.000000

Y(2,11)0.0000000.000000

Y(3,1)0.0000000.000000

Y(3,2)0.0000000.000000

Y(3,3)0.0000000.000000

Y(3,4)1.0000000.000000

Y(3,5)1.0000000.000000

Y(3,6)1.0000000.000000

Y(3,7)0.0000000.000000

Y(3,8)0.0000000.000000

Y(3,9)0.0000000.000000

Y(3,10)0.0000000.000000

Y(3,11)1.0000000.000000

Y(4,1)0.0000000.000000

Y(4,2)0.0000000.000000

Y(4,3)0.0000000.000000

Y(4,4)0.0000000.000000

Y(4,5)0.0000000.000000

Y(4,6)1.0000000.000000

Y(4,7)1.0000000.000000

Y(4,8)1.0000000.000000

Y(4,9)1.0000000.000000

Y(4,10)1.0000000.000000

Y(4,11)1.0000000.000000

RowSlackorSurpl

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

当前位置:首页 > 工程科技 > 纺织轻工业

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

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