图论模型例子.docx

上传人:b****7 文档编号:9469697 上传时间:2023-02-04 格式:DOCX 页数:41 大小:323.80KB
下载 相关 举报
图论模型例子.docx_第1页
第1页 / 共41页
图论模型例子.docx_第2页
第2页 / 共41页
图论模型例子.docx_第3页
第3页 / 共41页
图论模型例子.docx_第4页
第4页 / 共41页
图论模型例子.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

图论模型例子.docx

《图论模型例子.docx》由会员分享,可在线阅读,更多相关《图论模型例子.docx(41页珍藏版)》请在冰豆网上搜索。

图论模型例子.docx

图论模型例子

例2:

旅行售货员问题

(又称货郎担问题,TravelingSalesmanProblem)

有一个推销员,从城市1动身,要遍访城市2,3,…,n各一次,最后返回城市1。

已知从城市i到j的旅费为

,问他应按如何的顺序访问这些城市,使得总旅费最少?

能够用多种方式把TSP表示成整数计划模型。

那个地址介绍的一种成立模型的方式,是把该问题的每一个解(不必然是最优的)看做是一次“巡回”。

在下述意义下,引入一些0-1整数变量:

其目标只是使

为最小。

那个地址有两个明显的必需知足的条件:

访问城市i后必需要有一个即将访问的确切城市;访问城市j前必需要有一个方才访问过的确切城市。

用下面的两组约束别离实现上面的两个条件。

到此咱们取得了一个模型,它是一个指派问题的整数计划模型。

但以上两个条件关于TSP来讲并非充分,仅仅是必要条件。

例如:

 

1

2

3

4

5

6

 

 

 

 

 

以上两个条件都知足,但它显然不是TSP的解,它存在两个子巡回。

那个地址,咱们将表达一种在原模型上附加充分的约束条件以幸免产生子巡回的方式。

把额外变量

附加到问题中。

可把这些变量看做是持续的(最然这些变量在最优解中取一般的整数值)。

此刻附加下面形式的约束条件

为了证明该约束条件有预期的成效,必需证明:

(1)任何含子巡回的线路都不知足该约束条件;

(2)全数巡回都知足该约束条件。

第一证明

(1),用反证法。

假设还存在子巡回,也确实是说至少有两个子巡回。

那么至少存在一个子巡回中不含城市1。

把该子巡回记为

,那么必有

把这k个式子相加,有

,矛盾!

故假设不正确,结论

(1)得证。

下面证明

(2),采纳构造法。

关于任意的总巡回

,可取

访问城市i的顺序数,取值范围为

因此,

下面来证明总巡回知足该约束条件。

(ⅰ)总巡回上的边

(ⅱ)非总巡回上的边

从而结论

(2)得证。

如此咱们把TSP转化成了一个混合整数线性计划问题。

显然,当城市个数较大(大于30)时,该混合整数线性计划问题的规模会专门大,从而给求解带来专门大问题。

TSP已被证明是NP难问题,目前尚未发觉多项式时刻的算法。

关于小规模问题,咱们求解那个混合整数线性计划问题的方式仍是有效的。

TSP是一个重要的组合优化问题,除有直观的应用外,许多其它看似无联系的优化问题也可转化为TSP。

例如:

问题1现需在一台机械上加工n个零件(如烧磁器),这些零件可按任意前后顺序在机械上加工。

咱们希望加工完成所有零件的总时刻尽可能少。

由于加工工艺的要求,加工零件

机会械必需处于相应状态

(如炉温)。

设起始未加工任何零件机会械处于状态

,且当所有零件加工完成后需恢复到

状态。

已知从状态

调整到状态

需要时刻

零件

本身加工时刻为

为方便起见,引入一个虚零件0,其加工时刻为0,要求状态为

,那么{0,1,2,…,n}的一个圈置换π就表示对所有零件的一个加工顺序,在此置换下,完成所有加工所需要的总时刻为

由于

是一个常数,故该零件的加工顺序问题变成TSP。

!

旅行售货员问题;

model:

sets:

city/1..5/:

u;

link(city,city):

dist,!

距离矩阵;

x;

endsets

n=@size(city);

data:

!

距离矩阵,它并非需若是对称的;

dist=@qrand

(1);!

随机产生,那个地址可改成你要解决的问题的数据;

enddata

!

目标函数;

min=@sum(link:

dist*x);

 

@FOR(city(K):

!

进入城市K;

@sum(city(I)|I#ne#K:

x(I,K))=1;

 

!

离开城市K;

@sum(city(J)|J#ne#K:

x(K,J))=1;

);

 

!

保证不显现子圈;

@for(city(I)|I#gt#1:

@for(city(J)|J#gt#1#and#I#ne#J:

u(I)-u(J)+n*x(I,J)<=n-1);

);

!

限制u的范围以加速模型的求解,保证所加限制并非排除掉TSP问题的最优解;

@for(city(I)|I#gt#1:

u(I)<=n-2);

!

概念X为0\1变量;

@for(link:

@bin(x));

end

计算的部份结果为:

Globaloptimalsolutionfoundatiteration:

77

Objectivevalue:

 

VariableValueReducedCost

N

U

(1)

U

(2)

U(3)

U(4)

U(5)

DIST(1,1)

DIST(1,2)

DIST(1,3)

DIST(1,4)

DIST(1,5)

DIST(2,1)

DIST(2,2)

DIST(2,3)

DIST(2,4)

DIST(2,5)

DIST(3,1)

DIST(3,2)

DIST(3,3)

DIST(3,4)

DIST(3,5)

DIST(4,1)

DIST(4,2)

DIST(4,3)

DIST(4,4)

DIST(4,5)

DIST(5,1)

DIST(5,2)

DIST(5,3)

DIST(5,4)

DIST(5,5)

X(1,1)

X(1,2)

X(1,3)

X(1,4)

X(1,5)

X(2,1)

X(2,2)

X(2,3)

X(2,4)

X(2,5)

X(3,1)

X(3,2)

X(3,3)

X(3,4)

X(3,5)

X(4,1)

X(4,2)

X(4,3)

X(4,4)

X(4,5)

X(5,1)

X(5,2)

X(5,3)

X(5,4)

X(5,5)

 

 

例3最短路问题

给定N个点

组成集合

,由集合中任一点

到另一点

的距离用

表示,若是

没有弧联结,那么规定

,又规定

,指定一个终点

,要求从

点动身到

的最短线路。

那个地址咱们用动态计划方式来做。

用所在的点

表示状态,决策集合确实是除

之外的点,选定一个点

以后,取得效益

并转入新状态

,当状态是

时,进程停止。

显然这是一个不按期多时期决策进程。

概念

是由

点动身至终点

的最短路程,由最优化原理可得

这是一个函数方程,用LINGO能够方便的解决。

 

!

最短路问题;

model:

data:

n=10;

enddata

sets:

cities/1..n/:

F;!

10个城市;

roads(cities,cities)/

1,21,3

2,42,52,6

3,43,53,6

4,74,8

5,75,85,9

6,86,9

7,10

8,10

9,10

/:

D,P;

endsets

data:

D=

65

369

7511

91

875

410

5

7

9;

enddata

F(n)=0;

@for(cities(i)|i#lt#n:

F(i)=@min(roads(i,j):

D(i,j)+F(j));

);

!

显然,若是P(i,j)=1,那么点i到点n的最短途径的第一步是i-->j,不然就不是。

由此,咱们就可方便的确信出最短途径;

@for(roads(i,j):

P(i,j)=@if(F(i)#eq#D(i,j)+F(j),1,0)

);

end

计算的部份结果为:

Feasiblesolutionfoundatiteration:

0

 

VariableValue

N

F

(1)

F

(2)

F(3)

F(4)

F(5)

F(6)

F(7)

F(8)

F(9)

F(10)

P(1,2)

P(1,3)

P(2,4)

P(2,5)

P(2,6)

P(3,4)

P(3,5)

P(3,6)

P(4,7)

P(4,8)

P(5,7)

P(5,8)

P(5,9)

P(6,8)

P(6,9)

P(7,10)

P(8,10)

P(9,10)

 

 

例4露天矿生产的车辆安排(CMCM2003B)

钢铁工业是国家工业的基础之一,铁矿是钢铁工业的要紧原料基地。

许多现代化铁矿是露天开采的,它的生产主若是由电动铲车(以下简称电铲)装车、电动轮自卸卡车(以下简称卡车)运输来完成。

提高这些大型设备的利用率是增加露天矿经济效益的首要任务。

露天矿里有假设干个爆破生成的石料堆,每堆称为一个铲位,每一个铲位已预先依照铁含量将石料分成矿石和岩石。

一样来讲,平均铁含量不低于25%的为矿石,不然为岩石。

每一个铲位的矿石、岩石数量,和矿石的平均铁含量(称为品位)都是已知的。

每一个铲位最多能安置一台电铲,电铲的平均装车时刻为5分钟。

卸货地址(以下简称卸点)有卸矿石的矿石漏、2个铁路倒装场(以下简称倒装场)和卸岩石的岩石漏、岩场等,每一个卸点都有各自的产量要求。

从爱惜国家资源的角度及矿山的经济效益考虑,应该尽可能把矿石按矿石卸点需要的铁含量(假设要求都为%

1%,称为品位限制)搭配起来送到卸点,搭配的量在一个班次(8小时)内知足品位限制即可。

从久远看,卸点能够移动,但一个班次内不变。

卡车的平均卸车时刻为3分钟。

所用卡车载重量为154吨,平均时速28

卡车的耗油量专门大,每一个班次每台车消耗近1吨柴油。

发动机点火时需要消耗相当多的电瓶能量,故一个班次中只在开始工作时点火一次。

卡车在等待时所花费的能量也是相当可观的,原那么上在安排时不该发生卡车等待的情形。

电铲和卸点都不能同时为两辆及两辆以上卡车效劳。

卡车每次都是满载运输。

每一个铲位到每一个卸点的道路都是专用的宽60

的双向车道,可不能显现堵车现象,每段道路的里程都是已知的。

一个班次的生产打算应该包括以下内容:

出动几台电铲,别离在哪些铲位上;出动几辆卡车,别离在哪些线路上各运输多少次(因为随机因素阻碍,装卸时刻与运输时刻都不精准,因此排时打算无效,只求出各条线路上的卡车数及安排即可)。

一个合格的打算要在卡车不等待条件下知足产量和质量(品位)要求,而一个好的打算还应该考虑下面两条原那么之一:

1.总运量(吨千米)最小,同时出动最少的卡车,从而运输本钱最小;

2.利用现有车辆运输,取得最大的产量(岩石产量优先;在产量相同的情形下,取总运量最小的解)。

请你就两条原那么别离成立数学模型,并给出一个班次生产打算的快速算法。

针对下面的实例,给出具体的生产打算、相应的总运量及岩石和矿石产量。

某露天矿有铲位10个,卸点5个,现有铲车7台,卡车20辆。

各卸点一个班次的产量要求:

矿石漏万吨、倒装场Ⅰ万吨、倒装场Ⅱ万吨、岩石漏万吨、岩场万吨。

铲位和卸点位置二维示用意如下,各铲位和各卸点之间的距离(千米)如下表:

 

铲位1

铲位2

铲位3

铲位4

铲位5

铲位6

铲位7

铲位8

铲位9

铲位10

矿石漏

倒装场Ⅰ

岩场

岩石漏

倒装场Ⅱ

各铲位矿石、岩石数量(万吨)和矿石的平均铁含量如下表:

 

铲位1

铲位2

铲位3

铲位4

铲位5

铲位6

铲位7

铲位8

铲位9

铲位10

矿石量

0.95

1.05

1.00

1.05

1.10

1.25

1.05

1.30

1.35

1.25

岩石量

1.25

1.10

1.35

1.05

1.15

1.35

1.05

1.15

1.35

1.25

铁含量

30%

28%

29%

32%

31%

33%

32%

31%

33%

31%

 

model:

titleCUMCM-2003B-01;

sets:

cai/1..10/:

crate,cnum,cy,ck,flag;

xie/1..5/:

xsubject,xnum;

link(xie,cai):

distance,lsubject,number,che,b;

endsets

data:

crate=30282932313332313331;

xsubject=;

distance=

;

cy=;

ck=;

enddata

!

目标函数;

min=@sum(cai(i):

@sum(xie(j):

number(j,i)*154*distance(j,i)));

 !

max=@sum(link(i,j):

number(i,j));

!

max=xnum(3)+xnum(4)+xnum

(1)+xnum

(2)+xnum(5);

!

min=@sum(cai(i):

!

@sum(xie(j):

!

number(j,i)*154*distance(j,i)));

!

xnum

(1)+xnum

(2)+xnum(5)=340;

!

xnum

(1)+xnum

(2)+xnum(5)=341;

!

xnum(3)=160;

!

xnum(4)=160;

!

卡车每一条线路上最多能够运行的次数;

@for(link(i,j):

b(i,j)=@floor((8*60-(@floor((distance(i,j)/28*60*2+3+5)/5)-1)*5)/(distance(i,j)/28*60*2+3+5)));

!

b(i,j)=@floor(8*60/(distance(i,j)/28*60*2+3+5)));

 !

t(i,j)=@floor((distance(i,j)/28*60*2+3+5)/5);

!

b(i,j)=@floor((8*60-(@floor((distance(i,j)/28*60*2+3+5)/5))*5)/(distance(i,j)/28*60*2+3+5)));

!

每一条线路上的最大总车次的计算;

@for(link(i,j):

lsubject(i,j)=(@floor((distance(i,j)/28*60*2+3+5)/5))*b(i,j));

!

计算各个铲位的总产量;

@for(cai(j):

cnum(j)=@sum(xie(i):

number(i,j)));

!

计算各个卸点的总产量;

@for(xie(i):

xnum(i)=@sum(cai(j):

number(i,j)));

!

道路能力约束;

@for(link(i,j):

number(i,j)<=lsubject(i,j));

!

电铲能力约束;

@for(cai(j):

cnum(j)<=flag(j)*8*60/5);

!

电铲数量约束----addedbyXieJinxing,2003-09-07;

@sum(cai(j):

flag(j))<=7;

!

卸点能力约束;

@for(xie(i):

xnum(i)<=8*20);

!

铲位产量约束;

@for(cai(i):

number(1,i)+number(2,i)+number(5,i)<=ck(i)*10000/154);

@for(cai(i):

number(3,i)+number(4,i)<=cy(i)*10000/154);

!

产量任务约束;

@for(xie(i):

xnum(i)>=xsubject(i)*10000/154);

!

铁含量约束;

@sum(cai(j):

number(1,j)*(crate(j))<=0;

@sum(cai(j):

number(2,j)*(crate(j))<=0;

@sum(cai(j):

number(5,j)*(crate(j))<=0;

@sum(cai(j):

number(1,j)*(crate(j))>=0;

@sum(cai(j):

number(2,j)*(crate(j))>=0;

@sum(cai(j):

number(5,j)*(crate(j))>=0;

!

关于车辆的具体分派;

@for(link(i,j):

che(i,j)=number(i,j)/b(i,j));

!

各个线路所需卡车数简单加和;

hehe=@sum(link(i,j):

che(i,j));

!

整数约束;

@for(link(i,j):

@gin(number(i,j)));

@for(cai(j):

@bin(flag(j)));

!

车辆能力约束;

hehe<=20;

ccnum=@sum(cai(j):

cnum(j));

end

 例5最小生成树(MinimalSpanningTree,MST)问题

求解最小生成树的方式尽管很多,可是利用LINGO成立相应的整数计划模型是一种新的尝试。

这关于处置非标准的MST问题超级方便。

咱们要紧参考了文[7]。

在图论中,称无圈的连通图为树。

在一个连通图G中,称包括图G全数极点的树为图G的生成树。

生成树上各边的权之和称为该生成树的权。

连通图G的权最小的生成树称为图G的最小生成树。

许多实际问题都能够归结为最小生成树。

例如,如何修筑一些公路把假设干个城镇连接起来;如何架设通信网络将假设干个地域连接起来;如何修筑沟渠将水源和假设干块待浇灌的土地连接起来等等。

为了说明问题,以下面的问题作为范例。

范例:

假设某公司打算在六个村落架设线,各村落之间的距离如下图。

试求出使线总长度最小的架线方案。

V1

V2

V3

V4

V5

V6

1

1

2

2

2

3

3

3

4

5

为了便于运算机求解,特作如下规定:

(1)节点V1表示树根;

(2)当两个节点之间没有线路时,规定两个节点之间的距离为M(较大的值)。

MST的整数计划模型如下:

 

 

 

例6分派问题(指派问题,AssignmentProblem)

这是个给n个人分派n项工作以取得某个最高总成效的问题。

第i个人完成第j项工作需要平均时刻

要求给每一个人分派一项工作,并要求分派完这些工作,以使完成全数任务的总时刻为最小。

该问题可表示如下:

显然,此问题可看做是运输问题的特殊情形。

可将此问题看做具有n个源和n个汇的问题,每一个源有1单位的可获量,而每一个汇有1单位的需要量。

从表面看,这问题要求用整数计划以保证

能取0或1。

但是,幸运的是,此问题是运输问题的特例,因此即便不限制

取0或1,最优解也将取0或1。

若是把婚姻看做分派问题,丹茨证明,整数性质证明一夫一妻会带来最美满幸福的生活!

显然,分派问题能够作为线性计划问题来求解,尽管模型可能专门大。

例如,给100人分派100项工作将使所得的模型具有10000个变量。

这时,如采纳专门算法成效会更好。

时刻复杂度为

的匈牙利算法即是好选择,这是由Kuhu(1955)提出的。

model:

!

7个工人,7个工作的分派问题;

sets:

workers/w1..w7/;

jobs/j1..j7/;

links(workers,jobs):

cost,volume;

endsets

!

目标函数;

min=@sum(links:

cost*volume);

!

每一个工人只能有一份工作;

@for(workers(I):

@sum(jobs(J):

volume(I,J))=1;

);

!

每份工作只能有一个工人;

@for(jobs(J):

@sum(workers(I):

volume(I,J))=1;

);

data:

cost=6267425

4953858

5219743

7673927

2395726

55228114

923124510;

enddata

end

计算的部份结果为:

Globaloptimalsolutionfoundatiteration:

14

Objectivevalue:

 

VariableValueReducedCost

VOLUME(W1,J1)

VOLUME(W1,J2)

VOLUME(W1,J3)

VOLUME(W1,J4)

VOLUME(W1,J5)

VOLUME(W1,J6)

VOLUME(W1,J7)

VOLUME(W2,J1)

VOLUME(W2,J2)

VOLUME(W2,J3)

VOLUME(W2,J4)

VOLUME(W2,J5)

VOLUME(W2,J6)

VOLUME(W2,J7)

VOLUME(W3,J1)

VOLUME(W3,J2)

VOLUME(W3,J3)

VOLUME(W3,J4)

VOLUME(W3,J5)

VOLUME(W3,J6)

VOLUME(W3,J7)

VOLUME(W4,J1)

VOLUME(W4,J2)

VOLUME(W4,J3)

VOLUME(W4,J4)

VOLUME(W4,J5)

VOLUME(W4,J6)

VOLUME(W4,J7)

VOLUME(W5,J1)

VOLUME(W5,J2)

VOLUME(W5,J3)

VOLUME(W5,J4)

VOLUME(W5,J5)

VOLUME(W5,J6)

VOLUME(

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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