29
LINGO 在在在在在在在

LINGO 在图论中的应用

Embed Size (px)

DESCRIPTION

LINGO 在图论中的应用. 3. D. 1. 2. B. 3. 1. E. G. A. 3. 2. 4. 3. C. 4. 1. F. 一、最短路问题. 0 - 1 规划法建模. 目标函数是最短路上的各条弧的长度之和 ( 总里程 ) 最小,于是最短路问题可以用如下 0 - 1 规划来描述: 式中 表示全体边的集合 。. 对于上例,编写 LINGO 程序如下: model: sets: cities/A,B,C,D,E,F,G/; ! 定义 7 个城市 ; - PowerPoint PPT Presentation

Citation preview

Page 1: LINGO 在图论中的应用

LINGO 在图论中的应用

Page 2: LINGO 在图论中的应用

一、最短路问题

A G

F

E

D

C

B2

4

1

2

3

1

3

3

1

3

4

Page 3: LINGO 在图论中的应用

目标函数是最短路上的各条弧的长度之和 ( 总里程 ) 最小,于是最短路问题可以用如下 0 - 1 规划来描述:

式中 表示全体边的集合 。

.10

,1,1

,1,

,min

),(),1(1

),(),(

),(

或ij

Enjjn

Ejj

Ejiji

Ejiij

Ejiijij

X

XX

NiXX

XWz

},,{ 21 eeE

0 - 1 规划法建模

Page 4: LINGO 在图论中的应用

对于上例,编写 LINGO 程序如下:model:sets:cities/A,B,C,D,E,F,G/; ! 定义 7 个城市 ; roads(cities,cities)/ A,B A,C B,D B,E B,F C,D C,E C,F D,G E,G F,G/: W, X;! 定义哪些城市之间有路相联, W 为里程, X 为 0 -

1 型决策变量 ;endsetsdata: W=2 4 3 3 1 2 3 1 1 3 4;enddata

Page 5: LINGO 在图论中的应用

N=@SIZE(CITIES);

MIN=@SUM(roads:W*X);

@FOR(cities(i) | i #GT# 1 #AND# i #LT# N:

@SUM(roads(i,j): X(i,j))=@SUM(roads(j,i): X(j,i)));

@SUM(roads(i,j)|i #EQ# 1:X(i,j))=1;

@SUM(roads(i,j)|j #EQ# N:X(i,j))=1;

end

Page 6: LINGO 在图论中的应用

计算结果与动态规划法相同.程序中的最后一个约束方程可以去掉,因为有了前面两个约束条件( 共 n-1 个约束方程 ) 可以导出最后一个约束方程,即终点的约束方程与前面 n-1 个约束方程线性相关.保留该约束方程, LINGO 求解时也不会产生任何问题,因为 LINGO 会自动删除多余的方程.

该方法与前面的方法相比,灵活性稍差,它一次只能求出指定起点到指定终点的最短路,如果更改起点,则必须改动程序然后重新求解.

Page 7: LINGO 在图论中的应用

二、 旅行售货商模型旅行售货商问题 (又称货郎担问题, Travelin

g Salesman Problem 简称 TSP 模型),是运筹学的一个著名命题。

模型:有一个推销商,从某个城市出发,要遍访若干城市各一次且仅一次 ,最后返回出发城市。已知从城市 i 到 j 的旅费为 Cij ,问他应按怎样的次序访问这些城市,使得总旅费最少?

称能到每个城市一次且仅一次的路线为一个巡回 ( 圈 ) 。

Page 8: LINGO 在图论中的应用

TSP 是典型的组合优化问题,也是公认的 NP 完全难题。

不算出发地。 n 个城市有 (n-1)! 种排列方法,每一种旅行路线是排列中的一种,当 n 变大时,计算量呈指数增长,穷举法所费时间是难以承受的。

为此,多年以来有许多人研究了一些近似算法。

我们把 TSP 问题转化为 0-1 规划,然后用 LINGO 来求解。

Page 9: LINGO 在图论中的应用

1. 方法一:判断各边是否包含在旅行路线中引入 0-1 整数变量 xij( 且 i≠j) : xij=1 表示路

线从 i 到 j ,即边 i-j 在旅行路线中,而 xij= 0

则表示不走 i-j路线

目标函数

首先必须满足约束条件:对每个城市访问一次且仅一次。从城市 i 出发一次 ( 到其它城市去 ), 表示为

n

i

n

jijijxcz

1 1

min

ijnixn

jji

,,,2,1,1

1

Page 10: LINGO 在图论中的应用

引入 0-1 整数变量 xij( 且 i≠j) : xij=1 表示路线从 i到 j, xij= 0 则表示不走 i-j路线

目标函数

首先必须满足约束条件:对每个城市访问一次且仅一次。从城市 i 出发一次 ( 到其它城市去 ), 表示为

从某个城市到达 j一次且仅一次,表示为:

以上建立的模型类似于指派问题的模型,对 TSP 问题只是必要条件,并不充分。

n

i

n

jijijxcz

1 1

min

ijnixn

jji

,,,2,1,1

1

jinjxn

iji

,,,2,1,1

1

Page 11: LINGO 在图论中的应用

例如,用图示路线连接六个城市,满足以上两个约束条件,但这样的路线出现了两个子回路,两者之间不通,不构成整体巡回路线。

为此需要考虑增加充分的约束条件以避免产生子巡回。下面介绍一种方法:

增加变量 ui,i=2,3,…,n ,(它的大小可以取整数:例如从起点出发所达到的城市 u=2, 依此类推)。

3

1 2 4 5

6

Page 12: LINGO 在图论中的应用

附加约束条件:ui-uj+nxij≤n-1,i=1,…,n, j=2,…,n,且 i≠j 。

Page 13: LINGO 在图论中的应用

TSP 问题可以表示为规划:

n

i

n

jijijxcz

1 1

min

niunjixjinjninnxuu

ijnix

jinjx

iij

jiji

n

jji

n

iji

,,2,1,0,,,2,1,,1,0,,,2,,,1,1

,,,2,1,1

,,,2,1,1

1

1

Page 14: LINGO 在图论中的应用

TSP 问题的 LINGO 模型! 旅行售货员问题 ;model:sets: city / 1..6/: u;! 定义 6 个城市 ; link( city, city): dist, ! 距离矩阵 ; x; ! 决策变量 ;endsets n = @size( city);

Page 15: LINGO 在图论中的应用

data: !距离矩阵 ; dist =0 702 454 842 2396 1196 702 0 324 1093 2136 764 454 324 0 1137 2180 798 842 1093 1137 0 1616 1857 2396 2136 2180 1616 0 2900 1196 764 798 1857 2900 0; ! 这里可改为你要解决的问题的数据 ;enddata ! 目标函数 ; min = @sum( link: dist * x);

Page 16: LINGO 在图论中的应用

@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) : u(I)<=n-1 ); @for( link: @bin( x));! 定义 X 为 0\1 变量 ;end

Page 17: LINGO 在图论中的应用

计算结果:目标函数值: 6610路线: 1-3-6-2-5-4-1

Page 18: LINGO 在图论中的应用

2. 方法二:对城市排序,找出最优排序在现实中的城市交通图中,有些城市之间有

直接道路,有些则没有,如果两点之间没有直接的通路,则两点之间的距离取最短路(经过其它点),即用任意两点之间的最短路 Cij作为图的距离矩阵,于是该图可以看成是一个完全图(即任意一对顶点都有一条边相连的图),此时形式上的环形巡回路线实际上个别点有可能不止经过一次。

Page 19: LINGO 在图论中的应用

设某个城市为旅行的出发地和终点(相当于总部所在地),旅行者从该城市出发到其它 n

个城市各一次且仅一次,最后回到出发地。我们把行进路线分成 n 步,每一步到一个城市(第 n+1 步返回出发地),于是一条旅行路线就相当于 n 个城市的一种排列, n 个城市共有n! 种排列方式。排序不同则总里程(或费用)可能不同,总里程(或总费用)最小的排序就是我们要寻找的最优路线。

Page 20: LINGO 在图论中的应用

引入 0-1 型决策变量 Xkj,下标 k 表示旅行的步数,下标 j 表示到达哪一个城市, Xkj=1 表示旅行者第 k个目的地(到达点)是城市 j, Xkj=

0 则表示否。用 lj表示总部到各城市的距离,用Cij表示城市 i与城市 j之间的最短路。

从出发地到第 1 个点的路程为

从最后一个点返回出发地的里程为

n

jjj Xl

11

n

jnjj Xl

1

Page 21: LINGO 在图论中的应用

假设在第 k步邮车达到城市 i ,在第 k+1 步达到支局 j ,即 Xki=Xk+1,j=1 ,则走过的里程为:

Cij·Xki·Xk+1,j

从第 1 点到第 n 点走过的总里程为

目标函数为

1

1 1 1,1

n

k

n

i

n

jjkikij XXC

1

1 1 1,1

11 )(min

n

k

n

i

n

jjkikij

n

jnjjj XXCXXlZ

Page 22: LINGO 在图论中的应用

约束条件有以下 2 条:(1) 每一步到达一个城市,即

(2) 每一个城市必须到一次且只需一次,即

n

jkj nkX

1

,,2,1,1

n

kkj njX

1

,,2,1,1

Page 23: LINGO 在图论中的应用

综上所述,可以把 TSP 问题转化成如下非线性 0-1 规划

其它约束条件

10

,,2,1,1

,,2,1,1

.s.t

)(min

1

1

1

1 1 1,1

11

或kj

n

kkj

n

jkj

n

k

n

i

n

jjkikjinj

n

jjj

X

njX

nkX

XXCXXlL

Page 24: LINGO 在图论中的应用

以上规划种允许包含其它约束条件。用 LINGO 可以求解该规划,举例如下。某县邮局和 10 个乡镇支局组成该县的邮政运

输网络,已知县局到各支局的距离和支局之间的距离矩阵(数据在程序中)。用一辆邮车完成邮件运输任务,邮车从县局出发到各支局去一次且只需一次,最后回到县局,求总路程最短的行驶路线。

Page 25: LINGO 在图论中的应用

编写 LINGO 程序如下:MODEL:

SETS:

CITY/1..10/: JL;

STEP/1..10/;

LINE( STEP, CITY): X;

LINKS(CITY,CITY):C;

ENDSETS

Page 26: LINGO 在图论中的应用

DATA: JL=71,56,27,30,28,26,15,9,30,27; C= 0,15,44,47,64,83,86,75,93,98 15,0,29,32,49,68,71,60,78,83 44,29,0,20,37,53,42,31,49,54 47,32,20,0,17,36,42,39,60,57 64,49,37,17,0,19,37,37,58,55 83,68,53,36,19,0,18,35,56,47 86,71,42,42,37,18,0,24,38,29 75,60,31,39,37,35,24,0,21,26 93,78,49,60,58,56,38,21,0,29 98,83,54,57,55,47,29,26,29,0;ENDDATA

Page 27: LINGO 在图论中的应用

@FOR( LINE : @BIN( X));

M1=@SIZE(STEP);

@FOR(CITY(I): @SUM(STEP(N): X(N,I)) = 1);

@FOR(STEP(N):@SUM(CITY(I):X(N,I))=1);

L1=@SUM(CITY(I):(X(1,I)+X(M1,I))*JL(I));

LX=@SUM(STEP(N)|N#LT#M1:@SUM(LINKS(I,J):C(I,J)*X(N,I)*X(N+1,J)));

MIN=L1+LX;

END

Page 28: LINGO 在图论中的应用

在程序运行前需要对 LINGO 的参数作必要的设置。对于非线性规划, LINGO 提供两种求解方法,一

种是“ Global Solver” (称为全局优化求解器),另一种是“ Multistart Solver” (称为多起点算法),全局优化求解器优点是确保找到全局最优解,缺点是有时需要较长运行时间。多起点算法的优点是节省运行时间,但不能保证找到的解就是全局最优解,多设置起点数往往找到的解就是全局最优解。

点击菜单“ Options” ,再打开全局优化求解器“ Global Solver” 选项,可以选或不选“ Global Solver” ,当选择多起点算法“ Multistart Solver” 时,需要设置起点数,若选择“ Solver Decides” 表示由LINGO 决定。

Page 29: LINGO 在图论中的应用

对以上程序,我们选择“ Global Solver” ,点击菜单“ Options” ,在全局优化求解器“ Global Solver” 选项框内打“√”,再点击“确定”。

运行以上程序,费时 4 分多钟,得到最优解:目标函数值(总路程) 260 公里邮车的行驶路线为:县局→8→9→10→7→6→5→4→1→2→3→县局