1. 程式人生 > >數學建模常用Matlab/Lingo/c程式碼總結系列——旅行商TSP問題

數學建模常用Matlab/Lingo/c程式碼總結系列——旅行商TSP問題

Lingo程式碼:
MODEL: 

  SETS: 
  CITY / 1.. 6/: U; ! U( I) = sequence no. of city; 
  LINK( CITY, CITY): 
       DIST,  ! The distance matrix; 
          X;  ! X( I, J) = 1 if we use link I, J; 
 ENDSETS 
 DATA:   !Distance matrix, it need not be symmetric; 
  DIST =0 56 35 21 51 60 
 	56 0 21 57 78 70 
 	35 21 0 36 68 68 
 	21 57 36 0 51 61 
 	51 78 68 51 0 13 
 	60 70 68 61 13 0; 
 ENDDATA 
 !The model:Ref. Desrochers & Laporte, OR Letters, 
  Feb. 91; 
  N = @SIZE( CITY); 
  MIN = @SUM( LINK: DIST * X); 
  @FOR( CITY( K): 
  !  It must be entered; 
   @SUM( CITY( I)| I #NE# K: X( I, K)) = 1; 
  !  It must be departed; 
   @SUM( CITY( J)| J #NE# K: X( K, J)) = 1; 
  ! Weak form of the subtour breaking constraints; 
  ! These are not very powerful for large problems; 
   @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))); 
  ! Make the X's 0/1; 
  @FOR( LINK: @BIN( X)); 
  ! For the first and last stop we know...; 
  @FOR( CITY( K)| K #GT# 1: 
   U( K) <= N - 1 - ( N - 2) * X( 1, K); 
   U( K) >= 1  + ( N - 2) * X( K, 1)); 
END 
 
matlab程式碼:

function main 
clc,clear 
global a 
% a=zeros(6); 
% a(1,2)=56;a(1,3)=35;a(1,4)=21;a(1,5)=51;a(1,6)=60; 
% a(2,3)=21;a(2,4)=57;a(2,5)=78;a(2,6)=70; 
% a(3,4)=36;a(3,5)=68;a(3,6)=68; a(4,5)=51;a(4,6)=61; 
% a(5,6)=13; a=a+a'; 
load cost
a=Muti_Cost;%邊權矩陣
L=size(a,1); 
c1=1:53; %初始圈
[circle,long]=modifycircle(c1,L); 
c2=[1 53 2:52];%改變初始圈,該演算法的最後一個頂點不動 
[circle2,long2]=modifycircle(c2,L); 
if long2<long 
   long=long2; 
   circle=circle2; 
end 
circle,long 
%******************************************* 
%修改圈的子函式 
%******************************************* 
function [circle,long]=modifycircle(c1,L); 
global a 
flag=1; 
while flag>0 
      flag=0; 
   for m=1:L-3 
      for n=m+2:L-1 
        if a(c1(m),c1(n))+a(c1(m+1),c1(n+1))<... 
           a(c1(m),c1(m+1))+a(c1(n),c1(n+1)) 
           flag=1; 
           c1(m+1:n)=c1(n:-1:m+1); 
        end 
     end 
  end 
end 
long=a(c1(1),c1(L)); 
for i=1:L-1 
   long=long+a(c1(i),c1(i+1)); 
end 
circle=c1; 



相關推薦

數學建模常用Matlab/Lingo/c程式碼總結系列——行商TSP問題

Lingo程式碼: MODEL: SETS: CITY / 1.. 6/: U; ! U( I) = sequence no. of city; LINK( CITY, CITY): DIST, ! The distance matri

數學建模常用Matlab/Lingo/c程式碼總結系列——floyd最短路徑

例 9   某公司在六個城市 c1,c2, …c6 中有分公司,從 i ci 到 cj的直接航程票價記在下述矩陣的 (I,j) 位置上。(∞表示無直接航路),請幫助該公司設計一張城市c1 到其它城市間的票價最便宜的路線圖。  clc,clear a=zeros(6

數學建模常用的十大算法

width back 聯系 編程 暴力 以及 美國 劃算 size 數學建模常用的十大算法==轉 (2017-07-16 11:26:14) 轉載▼ 1. 蒙特卡羅算法。該算法又稱隨機性模擬算法,是通過計算機仿真來解決問題的算法,同時可以通過模擬來檢驗自己模型的

關於MATLABC++程式碼(一)

沒時間寫,上圖快一點, 1、寫好主執行檔案,m_18_10_30.m,並且執行 2、單擊MATLAB Coder 3、進入,選擇函式(而不是執行檔案) 4、Next,選擇執行的檔案,m_18_10_30.m 5、''let me enter...'',是開啟

關於MATLABC++程式碼(二)

有一些遇到過的問錯誤提示 一、“The left-hand side has been constrained to be non-complex, but the right-hand side is complex. To correct this problem, make the r

Java常用加密技術和程式碼總結

總結類文章,把一些常用的Java加密技術和核心程式碼寫在這邊,供參考。 首先大家要記住現代密碼學最重要的原則柯克霍夫原則: 資料的安全基於金鑰而不是演算法的保密。也就是說即使密碼系統的任何細節已為人悉知,只要密匙未洩漏,它也應是安全的。 具體來說: 系統

【轉】數學建模常用方法彙總

原連結 數學建模中常用的方法:類比法、二分法、差分法、變分法、圖論法、層次分析法、資料擬合法、迴歸分析法、數學規劃(線性規劃,非線性規劃,整數規劃,動態規劃,目標規劃)、機理分析、排隊方法、對策方法、決策方法、模糊評判方法、時間序列方法、灰色理論方法、現代

數學建模MATLAB畫圖彙總

1. 二維資料曲線圖 1.1 繪製二維曲線的基本函式 1.plot()函式 plot函式用於繪製二維平面上的線性座標曲線圖,要提供一組x座標和對應的y座標,可以繪製分別以x和y為橫、縱座標的二維曲線。 例: t=0:0.1:2*pi;

數學建模常用模型13 :相關性分析

相關分析研究的是兩個變數的相關性,但你研究的兩個變數必須是有關聯的,如果你把歷年人口總量和你歷年的身高做相關性分析,分析結果會呈現顯著地相關,但它沒有實際的意義,因為人口總量和你的身高都是逐步增加的,從資料上來說是有一致性,但他們沒有現實意義。 相關性分析和聚類分析一樣,比

數學建模常用模型14 :因子分析

因子分析可以看作是主成分分析的一個擴充,因子分析在數學建模中使用的沒有主成分分析那麼多。關於因子分析和主成分分析的區別可以看一下司守奎老師的“因子分析”那個章節。一開始就有介紹區別。 因子分析 1)主成分分析法: 例5 研究紐約股票市場上五種股票的週迴升率。這裡,週迴升

C#知識點總結系列:3、C#中Delegate和Event以及它們的區別

的區別 sent () exit 功能 final 通知 bsp t對象 1.Monitor.Enter(object)方法是獲取鎖,Monitor.Exit(object)方法是釋放鎖,這就是Monitor最常用的兩個方法,當然在使用過程中為了避免獲取鎖之後因為異常,致鎖

遺傳演算法 求解行商 TSP 問題,matlab程式碼

學習啟發式演算法時,旅行商問題是一個經典的例子。其中,遺傳演算法可以用來求解該問題。遺傳演算法是一種進化演算法,由於其啟發式演算法的屬性,並不能保證得到最優解。求解效果與初始種群選取,編碼方法,選擇方法,交叉變異規則有關。 上課時,老師不知從哪裡找了一個非常粗糙的程式,自己

常用C++面試總結

pac 占用 .cn 類型 ++ http 內存 ack 總結 指定對齊值:#pragma pack(n),n=1,2,4,8,16改變系統的對齊系數struct和union都是由多個不同的數據類型成員組成, 但在任何同一時刻, union中只存放了一個被選中的成員, 而s

數學建模--matlab基礎知識

ssa env 管理 更換 ceil recent font 必須 ray 雖然python也能做數據分析,不過參加數學建模,咱還是用專業的 1. Matlab-入門篇:Hello world! 程序員入門第一式: disp(‘hello world!’) 2. 基本

[數學建模(六)]使用MATLAB實現插值

數值 font 多項式 not new pie 插值法 包含 data 常用的插值:拉格朗日多項式插值、牛頓插值、分段線性插值、Hermite 插值和三次樣條插值。 1.拉格朗日插值法 function y=lagrange(x0,y0,x); n=length(x0)

[數學建模(八)]使用MATLAB繪圖1

基本 barh 分享 com 自定義 subplot mes 1.2 img 目錄 1..二維圖 1.1 基本畫圖功能 1.2 plot參數說明 :線條類型,點類型,顏色 1.3 坐標軸定標和圖形說明 1.4 子圖 :subplot 1.5 其他類型的二維圖

MATLAB數學建模中的應用(三)

dash 以及 cxf 原始的 計算 而後 輸入輸出變量 tran fcm optimset函數 功能:創建或編輯優化選項參數結構。 語法: 1 options = optimset(‘param1’,value1,’para

MATLAB數學建模中的應用

整數規劃 ... .net 6.4 2.4 down 課本 sdn 曲線 接下來的三周都會研讀《MATLAB在數學建模中的應用》這本書,在此把敲過的課本習題代碼,以及更詳細的代碼註釋Po出。 插值與擬合 1)指定函數的擬合 1

2018研究生數學建模競賽B題-光傳送網建模與價值評估-競賽總結

新的 中間 定時 當前 信噪比 角度 導出 競賽 結束 ---恢復內容開始--- 2018研究生數學建模競賽B題-光傳送網建模與價值評估-競賽總結 這道賽題是有關通信方面的賽題,初步讀題,感到第一問和第二問關系不大,第二問和第三問關系也不大,不過第一問和第三問有比較緊密的順

C程式碼效能優化總結

轉自:https://blog.csdn.net/chenyq991/article/details/79047741 1、優化程式碼框架 個人覺得程式碼架構對效能的影響至關重要,就好骨架之於人,所以我把這個放在第一點。舉個簡單的例子: 優化前: void main() { whi