运筹学 实验说明书.docx

上传人:b****6 文档编号:8443572 上传时间:2023-01-31 格式:DOCX 页数:45 大小:471.37KB
下载 相关 举报
运筹学 实验说明书.docx_第1页
第1页 / 共45页
运筹学 实验说明书.docx_第2页
第2页 / 共45页
运筹学 实验说明书.docx_第3页
第3页 / 共45页
运筹学 实验说明书.docx_第4页
第4页 / 共45页
运筹学 实验说明书.docx_第5页
第5页 / 共45页
点击查看更多>>
下载资源
资源描述

运筹学 实验说明书.docx

《运筹学 实验说明书.docx》由会员分享,可在线阅读,更多相关《运筹学 实验说明书.docx(45页珍藏版)》请在冰豆网上搜索。

运筹学 实验说明书.docx

运筹学实验说明书

 

<<运筹学>>实验指导书

信息管理与信息系统教研室

 

桂林电子工业学院计算机系

2005年8月

目录

实验一线性规划1

一、实验目的:

1

二、实验类型:

设计型1

三、实验内容:

1

(1)投资问题1

(2)人力资源分配问题1

(3)生产计划问题1

(4)套裁下料问题(选做)2

(5)配料问题(选做)2

四、实验步骤及实验要求:

2

附1:

用LINGO解决线性规划问题的例子3

1.确定决策变量和目标函数3

2.确定约束条件3

3.确定数学模型3

4.求解4

实验二运输问题6

一、实验目的:

6

二、实验类型:

设计型6

三、实验内容:

6

(1)产销平衡的运输问题。

6

(2)产销不平衡的运输问题。

6

(3)生产与存储问题7

(4)转运问题7

四、实验步骤及实验要求:

8

附1:

运输问题求解举例8

1.确定约束变量和约束条件10

2.建立目标函数10

3.建立数据集11

4.确定数学模型并求解12

附2:

使用LINGO解决运输问题的常用操作13

实验三目标规划(选作)15

一、实验目的:

15

二、实验类型:

设计型15

三、实验内容:

15

(1)生产问题目标规划15

(2)运输问题目标规划15

四、实验步骤及实验要求:

16

提示:

16

实验四整数规划17

一、实验目的:

17

二、实验类型:

设计型17

三、实验内容:

17

(1)投资场所的选择17

(2)固定成本问题17

(3)指派问题18

(4)分布系统设计问题18

四、实验步骤及实验要求:

18

附1:

整数变量的语法定义:

18

附2:

整数规划例子19

附3:

0-1整数规划19

实验五图与网络分析(选做)22

一、实验目的:

22

二、实验类型:

验证型22

三、实验内容:

22

(1)最短路径问题22

(2)关键路径问题22

四、实验步骤及实验要求:

23

附1:

利用ORMS软件最短通路的方法23

附2:

利用ORMS软件求关键路径的方法25

实验六动态规划28

一、实验目的:

28

二、实验类型:

综合设计型28

三、实验内容:

28

(1)最短路线问题。

28

(2)小规模货郎担问题(TSP)。

28

四、实验步骤及实验要求:

28

附1:

用动态规划(DP)解最短路线问题29

附2:

货郎担问题(TSP)求解29

附3:

常用的几个函数简介31

1.变量界定函数31

2.集操作函数32

3.集循环函数32

4.输入和输出函数33

实验一线性规划

一、实验目的:

(1)熟悉LINGO软件环境;

(2)了解并熟练掌握LINGO语言的数学模型的结构;

(3)掌握用LINGO语言来解决线性规划问题。

(4)了解灵敏度分析的含义。

二、实验类型:

设计型

三、实验内容:

采用LINGO软件解决下列实际应用问题。

(1)投资问题

某部门在今后五年内考虑给下列项目投资,己知:

项目A,从第一年到第四年每年年初需要投资,并于次年末回收本利115%;

项目B,第三年初需要投资,到第五年未能回收本利125%,但规定最大投资额不超过4万元;

项目C,第二年初需要投资,到第五年未能回收本利140%,但规定最大投资额不超过3万元;

项目D,五年内每年初可购买公债,于当年末归还,并加利息6%。

该部门现有资金10万元,问它应如何确定给这些项目每年的投资额,使到第五年末拥有的资金的本利总额为最大?

(2)人力资源分配问题

福安商场是个中型的百货商场,它对售货人员的需求经过统计分析,如下所示:

表1

时间

所需售货员人数

星期日

28人

星期一

15人

星期二

24人

星期三

25人

星期四

19人

星期五

31人

星期六

28人

为了保证售货人员充分休息,售货人员每周工作五天,休息两天,并要求休息的两天是连续的,问应该如何安排售货人员的作息,既满足了工作需要,又使配备的售货人员的人数最少?

(3)生产计划问题

明兴公司面临一个是外包协作还是自行生产的问题。

该公司生产甲、乙、丙三种产品,这三种产品都要经过铸造、机加工和装配三个车间。

甲、乙两种产品的铸件可以外包协作,亦可以自行生产,但产品丙必须本厂铸造才能保证质量。

有关情况见表2;公司中可利用的总工时为:

铸造8000小时,机加工12000小时和装配10000小时。

公司为了获得最大利润,甲、乙、丙三种产品各生产多少件?

甲、乙两种产品的铸造应多少由本公司铸造?

应多少由外包协作?

(4)套裁下料问题(选做)

某工厂要做100套钢架,每套用长为2.9m,2.1m和1.5m的园钢各一根。

已知原料每根长7.4m,问应如何下料,可使所用原料最省。

表2

工时与成本

每件铸造工时(小时)

5

10

7

每件加工工时(小时)

6

4

8

每件装配工时(小时)

3

2

2

自产铸件每件成本(元)

3

5

4

外协铸件每件成本(元)

5

6

-

加工每件成本(元)

2

1

3

装配每件成本(元)

3

2

2

每件产品售价(元)

23

18

16

(5)配料问题(选做)

某工厂要用三种原料1,2,3混合调配出三种不同规格的产品甲、乙、丙,已知产品的规格要求、产品的单价、每天能供应的原材料数量及原材料单价,分别见表3和表4。

该厂应如何安排生产,使利润收入为最大?

表3

产品名称

规格要求

单价(元/千克)

原材料1不少于50%原材料2不少于25%

50

原材料1不少于25%原材料2不超过50%

35

不限

25

表4

原材料名称

每天最多供应量

单价(元/千克)

1

100

65

2

100

25

3

60

35

四、实验步骤及实验要求:

(1)确定各个问题的变量,建立各个问题的约束条件,目标函数;

(2)建立各个问题的数学模型;

(3)将该数学模型描述为LINGO语言,求解其结果;

(4)灵敏度分析;

(5)完成实验报告。

[注:

LINGO软件的缺省值是不进行灵敏度分析,因此我们需要改变系统原有的默认值。

过程如下:

点击LINGO菜单中的Options,选中GeneralSolver,在Dualcomputations中选中Rrices&Range即可。

]

附1:

用LINGO解决线性规划问题的例子

某公司可以生产两种品牌的计算机:

STANDARD计算机和TURBO计算机,生产一台STANDARD计算机可获利100元,生产一台TURBO计算机可获利150元。

STANDARD计算机生产线每天可以生产100台STANDARD计算机,TURBO计算机生产线每天可以生产120台计算机。

但是生产一台STANDARD计算机所需人力1小时.人,生产一台TURBO计算机所需人力2小时.人,该公司共有人力为160小时.人。

问如何安排生产使得该公司的获利最大。

通常情况下,最优化数学模型包括三部分:

决策变量:

每一个问题都用一组决策变量来表示某一个方案;这组决策变量的值就代表一个具体方案。

最优化的目标就是找到一组决策变量的值,使得其目标函数达到最优值,并要求这组决策变量的值符合约束条件。

目标函数:

目标函数一各公式,其目的用来表达你所希望达到的最优目标,一般他都是用决策变量的线性函数来表示,按照问题的不同,一般都是求目标函数的最大化或者最小化。

约束条件:

限定模型中变量所取值的范围,这些限制条件一般是用一组线性等式或者不等式表示。

求解方法如下:

1.确定决策变量和目标函数

令,变量STANDARD和TURBO分别表示该公司每天应该生产STANDARD计算机和TURBO计算机的台数,则该公司可获得最大利润的目标函数用LINGO语言表示为:

MAX=100*STANDARD+150*TURBO;

注意:

LINGO语言的每一条逻辑上行应该以分号(;)结束。

否则会出现语法错误。

2.确定约束条件

下一步就应该对生产线和劳力进行约束。

因为STANDARD计算机生产线每天可以生产100台STANDARD计算机,TURBO计算机生产线每天可以生产120台计算机。

用LINGO语言可以如下表示:

STANDARD<=100;

TURBO<=120;

注意:

在LINGO语言中,可以用<来表示<=;同样地,我们也可以用>来表示>=。

对劳力的约束条件我们可以如下地表示:

STANDARD+2*TURBO<=160;

3.确定数学模型

这样我们可以得到整个问题的数学模型:

!

Hereisthetotalprofitobjectivefunction;

MAX=100*STANDARD+150*TURBO;

!

Constraintsontheproductionlinecapacity;

STANDARD<=100;

TURBO<=120;

!

Ourlaborsupplyislimited;

STANDARD+2*TURBO<=160;

其中!

表示注释行的开始。

注意:

在LINGO中,所有变量名是字母开头,数字与字母以及下化线”_”的符号串,且符号串的长度步超过32位。

4.求解

将上面的数学模型输入到LINGO中,点击菜单中的LINGO选项,再点击Solve,如果该数学模型不存在语法错误,则输出一些相关的数据以及计算结果,如下图:

其中Objectivevalue为计算结果,即最优值为14500,即该公司获得的最大利润为14500元。

Globaloptimalsolutionfoundatiteration:

2表示通过两次迭代获得结果.中间栏的value表示当STANDARD的取值为100,TURBO的取值为30时,目标值取得最大值。

ReducedCost表示如果该栏中某项的值为X,即如果该项相对应的变量的值增加1,那么相应最优值会减少X.Slack和Surplus分别表示松弛量和剩余量。

该栏的第三项为90,即表示源程序中非注释行第三行即TURBO的实际值比所允许的值差90。

DualPrice为影子价格,该栏第4项的值为75,即表示如果源程序中非注释行第4行右端的值增加1,那么最优值会增加75。

其中Module:

LP表示该问题为线形规划问题.等等.

实验二运输问题

一、实验目的:

(1)进一步熟悉LINGO软件环境;

(2)掌握如何建立运输问题的数学模型;

(3)了解并掌握如何LINGO来解决运输问题;

(4)掌握LINGO语言中@FOR,@MIN,@MAX以及@SUM的使用。

二、实验类型:

设计型

三、实验内容:

采用LINGO软件解决下列几种运输问题

(1)产销平衡的运输问题。

某公司从两个产地A1,A2将物品运往三个销地B1,B2,B3,各产地的产量、各销地的销量和各产地运注各销地的每件物品的运费如下表所示:

表一

B1

B2

B3

产量(件)

A1

6

4

6

200

A2

6

5

5

300

销量

150

150

200

问应如何调运,使得总运输费最小?

(2)产销不平衡的运输问题。

设有三个化肥厂供应四个地区的农用化肥。

假定等量的化肥在这些地区使用效果相同。

各化肥厂年产量、各地区年需求量及从各化肥厂到各地区运送单位化肥的运价如下表,试求出总的运费员节省的化肥调拨方案。

表二

I

II

III

IV

产量

A

16

13

22

17

50

B

14

13

19

15

60

C

19

20

23

-

50

最低需求

30

70

0

10

最高需求

50

70

30

不限

(3)生产与存储问题

光明仪器厂生产电脑绣花机是以销定产的。

已知1至6月份各月的生产能力、合同销量和单台电感绣花机平均生产费用见下表。

又已知上年末库存103台绣花机,又如果当月生产出来的机器当月不交货,则履要运到分厂库房,每台增加运输成本0.1万元,每台机器每月的平均仓储费、维护费为0.2万元,在7-8月份销售淡季,全厂停产1个月,因此在6月份完成销售合同后还要留出库存80台。

加班生产机器每台增加成本1万元。

问应如何安排1-6月份的生产使总的生产(包括运输、仓储、维护)费用最少?

表三

月份

正常生产能力(台)

加班生产能力(台)

销量(台)

单台费用(万元)

1

60

10

104

15

2

50

10

75

14

3

90

20

115

13.5

4

100

40

160

13

5

100

40

103

13

6

80

40

70

13.5

(4)转运问题

腾飞电子仪器公司在大连和广州有两个分厂,大连分厂每月生产400台某种仪器,广州分厂每月生产600台某种仪器。

该公司在上海与天津有两个销售公司负责对南京、济南、南昌与青岛四个城市的仪器供应,又因为大连与青岛相距较近,公司同意大连分厂也可以向青岛接供货,这些城市问的每台仪器的运输费用我们标在两个城市间的弧上,单位为百元,问应该如何调运仪器.使得总的运输费最低。

四、实验步骤及实验要求:

(1)确定各个问题的变量;

(2)建立各个问题的约束条件;

(3)写出各个问题的目标函数;

(4)建立各个问题的数学模型;

(5)将该数学模型描述为LINGO语言,求解其结果。

(6)完成实验报告。

附1:

运输问题求解举例

运输问题是线性规划的一类特殊问题,在求解运输问题的过程中,我们也可以采用单纯型方法。

比如对于上述的产销平衡的运输问题,我们可以这样求解。

设Xij表示从产地Aj调运到Bj的运输量(i=1,2;j=1,2,3),例X12表示由A1调运到B2的物品数量,现将安排的运输量列表如下:

销地运费单价产地

B1

B2

B3

产量(件)

A1

X11

X12

X13

200

A2

X21

X22

X23

300

销量

150

150

200

500

从上表可写出此问题的数学模型。

满足产地产量的约束条件为:

X11十X12十X13=200

X21十X22十X23=300

满足销地销量的约束条件为:

X11十X21=150,

X12十X22=150,

X13十X23=200.

使运输费最小的目标函数为:

minf=6X11十4X12十6X13十6X21十5X22十5X23

所以此运结问题的线性规划的模型如下:

目标函数:

minf=6X11十4X12十6X13十6X21十5X22十5X23

约束条件:

X11十X12十X13=200

X21十X22十X23=300

X11十X21=150,

X12十X22=150,

X13十X23=200.

Xij>=0.(I=1,2;j=1,2,3)

将上述模型按照实验一的方法转化为LINGO语言之后,求解可以得到最优值。

上面这个例子的数据非常少,我们很容易建立起数学模型,但是在很多情况下,我们需要处理很多数据,按照这种方法建立其数学模型显然是非常单调枯燥的。

下面一个例子来说明:

例设W公司有六个仓库可以提供给八个客户存储货物,每个仓库所装的货物不能超过它的容量,同时每个客户对仓库也有一定的要求。

现需要计算每个如何装配货物使得装配的费用最少。

每个仓库的容量如下:

仓库容量

160

255

351

443

541

652

客户总容量要求

135

237

322

432

541

632

743

838

每个单元商品的装配费用为:

V1V2V3V4V5V6V7V8

Wh162674259

Wh249538582

Wh352197433

Wh476739271

Wh523957265

Wh655228143

按照实验一的方法,我们可以建立如下目标函数:

MIN=6*VOLUME_1_1+2*VOLUME_1_2+6*VOLUME_1_3+7*VOLUME_1_4+4*VOLUME_1_5+8*VOLUME_6_5+VOLUME_6_6+4*VOLUME_6_7+3*VOLUME_6_8;

其中变量VOLUME_I_J表示为每个客户J分配的仓库I所装配widgets的数量,很明显,按照这种方式来写目标函数是非常枯燥的,并且非常容易出错。

求解方法如下:

1.确定约束变量和约束条件

该模型有两个约束条件:

第一个约束是每个客户对仓库容量的要求,我们称之为要求约束条件(demandconstraints);第二个叫容量约束(capacityconstraint),即,所有某仓库所装的商品的所占用的总的空间不能超过该仓库的容量。

我们以第一个客户的要求为例,应该为第一个客户分配的仓库的所有空间的总和应该等于35。

这样,如果用基于标量的符号,可以创建出下列约束:

VOLUME_1_1+VOLUME_2_1+VOUUME_3_1+VOLUME_4_1+VOLUME_5_1+VOLUME_6_1=35;

然后,对其他七个客户建立类似的要求约束。

显然这个过程非常冗长而容易出错,同样我们可以用LINGO建模语言来简化其描述方式。

使用数学符号,我们可以用一个语句表述所有这八个要求约束:

∑iVOLUMEij=DEMANDj,foralljinVENDORS

用LINGO语言表述为:

@FOR(VENDORS(J):

@SUM(WAREHOUSES(I):

VOLUME(I,J))=

DEMAND(J));

其含义为对每个投资者,分配给同一个投资者的仓库总容量应该等于投资者的需求。

其数学表示和LINGO语法表示的对照如下:

数学概念LINGO语法

foralljinVENDORS@FOR(VENDORS(J):

∑i@SUM(WAREHOUSES(I):

VOLUMEijVOLUME(I,J))

==

DEMANDjDEMAND(J));

同样的,我们可以用数学公式表示其容量约束:

∑jVOLUMEij<=CAPi,foralliinWAREHOUSES

用LINGO语言表述为:

@FOR(WAREHOUSES(I):

@SUM(VENDORS(J):

VOLUME(I,J))<=

CAPACITY(I));

其含义为对每个仓库J,分配给客户的容量之和应该小于其总容量。

那么整个约束条件为:

MODEL:

MIN=@SUM(LINKS(I,J):

COST(I,J)*VOLUME(I,J));

@FOR(VENDORS(J):

@SUM(WAREHOUSES(I):

VOLUME(I,J))=

DEMAND(J));

@FOR(WAREHOUSES(I):

@SUM(VENDORS(J):

VOLUME(I,J))<=

CAPACITY(I));

END

2.建立目标函数

下面我们建立目标函数。

对此我们可以用数学公式Minimize∑ijCOSTij*VOLUMEij。

LINGO也可以用类似的方法来表达此含义:

MIN=@SUM(LINKS(I,J):

COST(I,J)*VOLUME(I,J));

其意义为:

对每个客户J和每个仓库I,如果存在LINKS关系,那么就求COST(I,J)*VOLUME(I,J)使得他们的和最小。

显然,此表达式简单直观。

下表是目标函数的数学表示和LINGO语法表示的对照:

数学公式LINGO语法

MinimizeMIN=

∑ij@SUM(LINKS(I,J):

COSTijCOST(I,J)

**

VOLUMEijVOLUME(I,J)

从上面的约束条件可以看出,我们没有给变量分配数据,为此,我们需要定义数据集。

3.建立数据集

在实际建模时,总是发现存在一组或多组相互关联的目标。

这些相关联的目标可以用一个集合的形式来表示。

LINGO中可以定义相关对象的集合。

集合以关键字SETS开始,集合以关键字ENDSETS结束。

一旦定义了数据集合,在LINGO中我们用一组循环函数(比如:

@FOR)来对集合的每个成员进行操作。

下面我们看看如何定义集合:

在上面的例子中我们需要定义如下3个集合:

1.仓库集合;

2.客户集合;

3.仓库与客户的笛卡儿积的映射

其相应的数据集和可以LINGO语言如下地表示:

SETS:

WAREHOUSES/WH1WH2WH3WH4WH5WH6/:

CAPACITY;

VENDORS/V1V2V3V4V5V6V7V8/:

DEMAND;

LINKS(WAREHOUSE,VENDORS):

COST,VOLUME;

ENDSETS

上面的第二行表示WAREHOUSES有六个数据成员,分别为WH1,WH2,WH3,WH4,WH5和WH6,并且每个成员都有一个属性称为CAPACITY。

类似的我们上面的第三行定义了八个客户,每个客户都具有一个称为DEMAND的属性。

最后一个集合LINKS是仓库与客户的笛卡儿积的映射,共有6*8=48个成员,每个成员均有两个属性COST和VOLUME。

定义这种集合的语法不同于前面的定义。

LINKS(WAREHOUSE,VENDORS)指出了LINKS集合是集合WAREHOUSE和集合VENDORS的派生。

在本例中LINGO可以生成48个(warehouse,vendor)这样的序偶对,每个序偶对都是集合LINKS的元素。

为了进一步说明这个问题,我们列出一些成员,如下表:

成员索引所对应的成员

1(WH1,V1)

2(WH2,V2)

3(WH3,V3)

……

47(WH47,V47)

48(WH8,V8)

数据输入

LINGO允许用户以独立的方式来输入数据,比如在上面的例子中,可以采用如下的方式来输入数据:

DATA:

CAPACITY=605551434152;

DEMAND=3537223241324338;

COST=62674259

49538582

52197433

76739271

23957265

55228143;

ENDDATA

采用这种方式来输入数据的时候,以关键字DATA开始,集合以关键字ENDDATA结束。

这样就初始化了集合WAREHOUSES的属性CAPCITY和集合VENDORS的属性DEMAND

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

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

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

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