2010-12-01 81 views
12

首先,這是作業。我認爲很明顯,我已經付出了努力,並且正在尋找提示,而不是代碼。我的Hopfield神經網絡解決旅行商問題有什麼問題?

問題是以下幾點。操作等式具有改變給定神經元的四個組件。

  • A)確保每個城市最多訪問一次的一個部分。 B)確保每個職位(第一,第二,第三等)最多隻有一個城市。
  • C)確保活動神經元總數等於城市數量的一部分。 D)一個最小化距離的部分。

如果我對D的重量足夠大以至於它有任何作用,那麼網絡將在無效的巡迴中解決(例如,訪問A,D,無處,E,C)。但是,我可以減重D,代碼將找到解決方案,但不是那些距離最短的解決方案。

我會非常感謝任何建議,我一直在敲擊我的頭對着鍵盤一段時間。任何熟悉使用Hopfield網絡解決TSP問題的人都應該理解這些代碼。

達斯代碼:

%parameters 
n=5; 
theta = .5; 
u0 = 0.02; 
h = .1; 
limit = 2000; 

%init u 
u=zeros(n,n); 
uinit = -u0/2*log(n-1); %p94 uINIT = - u0/2 * ln(n-1) 
for i=1:n 
    for j=1:n 
     u(i,j) = uinit * (1+rand()*0.2-0.1); %add noise [-0.1*uInit 0.1*uINIT] 
    end 
end 

%loop 
for index=1:limit 
    i = ceil(rand()*n); 
    k = ceil(rand()*n); 

    %runge kutta 
    k1 = h*du(u,i,k,0); 
    k2 = h*du(u,i,k, k1/2); 
    k3 = h*du(u,i,k, k2/2); 
    k4 = h*du(u,i,k, k3); 
    u(i,k) = u(i,k) + (k1 + 2*k2 + 2*k3 + k4)/6; 
end 

Vfinal = hardlim(V(u)-theta) 

杜()

function out=du(u,X,i,c) 

dist = [0, 41, 45, 32, 32; 
     41, 0, 36, 64, 54; 
     45, 36, 0, 76, 32; 
     32, 64, 76, 0, 60; 
     32, 54, 32, 60, 0]; 

t = 1; 
n = 5; 
A = 10; 
B = 10; 
C = 10; 
D = .0001; 


AComp = A*sum(V(u(X,:))) - A*V(u(X,i)); 
BComp = B*sum(V(u(:,i))) - B*V(u(X,i)); 
CComp = C*(sum(sum(V(u)))-n); 

DComp = 0; 
before = i-1; 
after = i+1; 
if before == 0 
    before = 5; 
end 
if after == 6 
    after = 1; 
end 
for Y=1:5 
    DComp = DComp + dist(X,Y) * (V(u(Y,after)) + V(u(Y,before))); 
end 
DComp = DComp * D; 

out = -1*(u(X,i)+c)/t - AComp - BComp - CComp - DComp; 

V()

function out=V(u) 
u0 = 0.02; 
out = (1 + tanh(u/u0))/2; 
+0

這是一個很酷的問題。該學期可能結束了;你有沒有找到解決方案? – 2011-03-20 02:31:27

回答

3

我從來沒有嘗試過解決ŧ他帶有神經網絡的TSP,但我發現它解決得非常好,並且很快採用遺傳方法。

儘管我已經完成了許多神經網絡項目,但我猜測由於TSP通常可以在單個網絡(城市)上提供多種解決方案,因此神經網絡可以在兩者之間來回拖動解決方案,從來沒有真正成功地融合到任何一個。

John R. Doner