最新实验4 Lingo求解最短路最小树问题备课讲稿

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

3.000000 3.000000 2.000000 2.000000 1.000000 2.000000
从上述求解报告得到最优架设线路 为1-2-3,2-4-5-6-7,总长度为13。
实验4 Lingo求解最短路 最小树问题
(1)最短路问题 假设有向图有 n 个顶点。现需要求从顶 点 V1 到顶点 Vn 的最短路。设决策变量为 xij ,当 xij 1,说明弧 (Vi,Vj)位于顶点 V1 到顶点 Vn 的最短路上;否则 xij 0 ,则求 V1 到 Vn 的最短路的数学模型为:
nn
minz
cij xij
i1 j1
n
xij 1, j 2,3,...,n,i j
i1
s.t. n x1j 1,
j2
u1 uj
0,1 ui uk xkj
n1,i 2,3,...,n. (n2)(1xkj )(n3)xjk,k
1,...,n,
j
2,...,n,
j
k
model:
sets:
若G' 是包含 G 的全部顶点的子图,它又是树,则称G' 的生
成树。若图 G(V , E) 是一个连通赋权图,T 是 G 的一颗生成树,
T 的每条边所赋权的和称为树 T 的权,称具有最小权的生成
v 树为 G 的最小生成树。
1
v2
v3 v4
v5 v6
例1-2 假设某电力公司在7个村庄之间架设电线, 各村庄之间的距离如下图所示,试求出使电线总长度最 小的架线方案。
@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;
(2)最小生成树问题
设无向图是连通的,且互不包有圈,则称该图为树。如果 有向图中任何一点都可由某一个顶点 V1 到达,则称V1 为图 G 的根。如果有向图 G 有根。且关于它的基础图是树,则称 G 为有向树。
@for(city(k)|k #GT# 1:@sum(city(i)|i #ne# k:x(i,k))=1;
@for(city(j)|j #gt# 1 # and # j #ne# k:u(j)>=u(k)+x(k,j)-(n-2)*(1-
x(k,j))+(n-3)*x(j,k););源自文库;
@sum(city(j)|j # GT # 1:x(1,j))>=1;
roads(cities, cities)/
A,B1 A,B2 B1,C1 B1,C2 B1,C3 B2,C1 B2,C2
B2,C3
C1,D C2,D C3,D/: w, x; endsets
min
w ij xij
(V i ,V j ) E
data: w = 2 4 3 3 1 2 3 1 1 3 4; enddata n=@size(cities);
2.000000
0.000000
2.000000
0.000000
3.000000
0.000000
4.000000
0.000000
5.000000
0.000000
X( 1, 2) X( 2, 3) X( 2, 4) X( 4, 5) X( 5, 6) X( 6, 7)
1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
@for(city(k)|k #gt# 1:u(k)>=1;u(k)<=n-1-(n-2)*x(1,k););
Variable
Value N
U( 2) U( 3) U( 4) U( 5) U( 6) U( 7)
Reduced Cost
7.000000
0.000000
1.000000
0.000000
解:节点 1 表示树根,点 i 与 j 的距离用 cij 表示,当两个 节点之间没有线路相通时,两点之间的距离用很大的数 M
表示。引入 0-1 变量 xij : xij 1(i j) 表示从 i 到 j 的边在
架设线路中, xij 0(i j) 表示该边不在线路中,则架线
方案可以归结为求上述赋权图的最小生成树。数学模型可 表示为[5]:
例题 1-1 在下图中,用点表示城市,现有 A,B1,B2, C1,C2,C3,D 共 7 个城市,点与点之间的连线表示 城市间有道路相连,连线旁的数字表示道路的长度。 现计划从城市 A 到称市 D 铺设一条天然气管道,请设 计出最小价格管道铺设方案。
sets:
cities/A, B1, B2, C1, C2, C3, D/;
city /1..7/:u;
link(city,city):dist,x; endsets n=@size(city);
nn
minz cijxij i1 j1
data: dist=0 3 4 7 100 100 100
3 0 3 2 4 100 100 4 3 0 100 5 7 100 7 2 100 0 2 100 6 100 4 5 2 0 1 4 100 100 7 100 1 0 2 100 100 100 6 4 2 0; enddata
n
xij
1, j 2,3,...,n,i
j
i1
s.t. n x1j 1,
j2
uu1j
0,1ui uk xkj
n1,i 2,3,...,n. (n2)(1 xkj ) (n3)xjk
,k
1,...,
n,
j
2,...,n,
j
k
min=@sum(link:dist*x);
u(1)=0;
@for(link:@bin(x));
min
wij xij
(Vi ,V j )E
(P1)
1, i 1
n
s.t. xij
n x ji 1, i n
j 1 (Vi ,V j )E
j 1 (V j ,Vi )E
0, i 1, n
xij 0,(Vi ,Vj ) E
其中 E 为有向图的所有弧的集合, wij 为弧(Vi,Vj)的权.
1, i 1
n
s .t .
xij
n
x ji
1,
i
n
j1 (V i ,V j ) E
j1 (V j ,V i ) E
0, i 1, n
min=@sum(roads: w*x);
xij 0, (Vi ,V j ) E
@for(cities(i) | i #ne# 1 #and# i #ne# n:
相关文档
最新文档