圖論中最優樹問題的LINGO求解


樹:連通且不含圈的無向圖稱為樹。常用T表示。樹中的邊稱為樹枝,樹中度為1的頂點稱為樹葉。

生成樹:若T是包含圖G的全部頂點的子圖,它又是樹,則稱T是G的生成樹。

最小生成樹:設T=(V,E1)是賦權圖G=(V,E)的一棵生成樹,稱T中全部邊上的權數之和為生成樹的權,記為w(T),即w(T)=Σw(e)。如果生成樹T*的權w(T*)是G的所有生成樹的權最小者,則稱T*是G的最優樹,即w(T*)=Σmin{w(T)}.

在許多實際問題中,如在許多城市間建立公路網、輸電網或通信網,都可以歸結為賦權圖的最優樹問題。

圖論中最有樹的求解方法通常有兩種算法:

Krukal算法和Prim算法

這里利用LINGO求解最優樹。

 問題1 有10個城鎮,城鎮1處有一條河流,現需要從各城鎮之間鋪設管道,使城鎮1處的水可以輸送到個城鎮,求鋪設管道最少的設計方式。

!最優樹的LINGO程序;
model:
sets:
point/1..10/:u;
link(point,point):d,x;
endsets
data:
!各城鎮之間的距離;
d=0,8,5,9,12,14,12,16,17,22,
  8,0,9,15,16,8,11,18,14,22,
  5,9,0,7,9,11,7,12,12,17,
  9,15,7,0,3,17,10,7,15,15,
  12,16,9,3,0,8,10,6,15,15,
  14,8,11,17,8,0,9,14,8,16,
  12,11,7,10,10,9,0,8,6,11,
  16,18,12,7,6,14,8,0,11,11,
  17,14,12,25,15,8,6,11,0,10,
  22,22,17,15,15,16,11,11,10,0;
@text()=@writefor(link(i,j)|x(i,j)#GT#0:'x(',i,',',j,')=',x(i,j),'');
enddata
min=@sum(link(i,j)|i#ne#j:d(i,j)*x(i,j));
n=@size(point);
@sum(point(j)|j#gt#1:x(1,j))>=1;
@for(point(i)|i#ne#1:@sum(point(j)|j#ne#i:x(j,i))=1);
@for(link(i,j):@BIN(x(i,j)));
@for(link(i,j)|i#ne#j:u(i)-u(j)+n*x(i,j)<=n-1);!不構成圈;
end

  結果為:

x(1,2)=1 x(1,3)=1 x(3,4)=1 x(3,7)=1 x(4,5)=1 x(5,6)=1 x(5,8)=1 x(7,9)=1 x(9,10)=1

 

原文鏈接:https://www.icourse163.org/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM