ILOG CPLEX Optimization Studio 編寫 TSP問題 (2)

基於子集的求解方式詳見我的另一篇博文:https://blog.csdn.net/u011561033/article/details/93380842

由於子集S在程序中不好表示,並且隨着TSP模型增大,S的規模呈指數級上升,因此,本博文主要講述另一種TSP模型(可能叫做位勢法)。具體詳見.mod部分代碼(.dat和最終結果與基於子集求解TSP的博文中內容一致,因此此處不再重複贅述,詳見最開始的博文鏈接)。此處定義了range Snode=1..CityNum-1用於表示不考慮起點的TSP的點。

/*********************************************
 * OPL 12.6.3.0 Model
 * Author: ASUS
 * Creation Date: 2019-6-21 at 下午5:42:13
 *********************************************/
int CityNum = ...;//the number of city
range City =0..CityNum-1;
range SNode =1..CityNum-1;
float distance[City][City]=...;//the distance between city A and city B
dvar boolean visitCity[City][City];//City A to city B or not
dvar int u[City];

execute{
	//u[0]=0;
	for(var c1 in City)
		for(var c2 in City)
		if(c1<c2)distance[c1][c2]=distance[c2][c1];
}
minimize 
  sum(c1 in City)
    sum(c2 in City)
      distance[c1][c2]*visitCity[c1][c2];
     
subject to{
	forall(c1 in City)
	  sum(c2 in City)
	    visitCity[c1][c2]==1;
	forall(c2 in City)
	  sum(c1 in City)
	    visitCity[c1][c2]==1;
	forall(c1 in City)
	  visitCity[c1][c1]==0;
	forall(c1,c2 in SNode)
	 	 u[c1]-u[c2]+(CityNum-1)*visitCity[c1][c2]<=CityNum-2;  
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章