目标函数是使得
最小化。
约束条件分成如下 4 类:
(1)根
至少有一条边连接到其他的顶点,
.
(2)除根外,每个顶点只能有一条边进入,
以上两约束条件是必要的,但不是充分的,需要增加一组变量
,再附加
约束条件
[3]
:
(3)限制
的取值范围为:
1
0, 1 1, 2,3, , .
i
u u n i n
(4)各条边不构成子圈,
( 2)(1 ) ( 3) , 1, , , 2, , .
j k kj kj jk
u u x n x n x k n j n
综上所述,最小生成树问题的
整数规划模型如下:
, (4)
1
1
1
1
1,
1, 2, , ,
s.t. 0, 1 1, 2,3, , ,
( 2)(1 ) ( 3) , 1, , , 2, , ,
0 1 , 1,2, , .
n
j
j
n
ij
i
i
j k kj kj jk
ij
x
x j n
u u n i n
u u x n x n x k n j n
x i j n
或 ,
(5)
例 5.4(续例 5.3) 利用数学规划模型(4),(5)和 LINGO 软件求解例 5.3 的问题。
求最小生成树的 LINGO 程序如下(用 LINGO 计算时,顶点
分别编号为
):
model:
sets:
vertex/1..9/:u;
edge(vertex,vertex):w,x;
endsets
data:
w=10000; !初始化,每个元素取充分大的正数;
enddata
calc:
w(1,2)=2; w(1,3)=1; w(1,4)=3; w(1,5)=4; w(1,6)=4; w(1,7)=2;
w(1,8)=5; w(1,9)=4; w(2,3)=4; w(2,9)=1; w(3,4)=1; w(4,5)=1;
w(5,6)=5; w(6,7)=2; w(7,8)=3; w(8,9)=5;
n=@size(vertex);
@for(vertex(j)|j#lt#n:@for(vertex(i)|i#gt#j:w(i,j)=w(j,i)));