我的 Hopfield 神经网络解决旅行商问题有啥问题?

Posted

技术标签:

【中文标题】我的 Hopfield 神经网络解决旅行商问题有啥问题?【英文标题】:What's wrong with my Hopfield Neural Network solution to the Traveling Salesman Problem?我的 Hopfield 神经网络解决旅行商问题有什么问题? 【发布时间】:2011-05-18 06:52:29 【问题描述】:

首先,这是家庭作业。我认为很明显我已经做出了努力,我正在寻找提示,而不是代码。

问题如下。操作方程有四个组件用于改变给定的神经元。

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)

du()

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;

【问题讨论】:

这是一个很酷的问题。这个学期可能已经结束了;你找到解决方案了吗? 不,遗憾的是教授并不是最有帮助的。我和班上的另一个学生谈过,但我认为他也没有解决问题。 【参考方案1】:

我从未尝试过用神经网络解决 TSP,但我发现它解决得非常好,而且非常快,采用遗传方法。

不过,我已经完成了许多神经网络项目,我猜想由于 TSP 通常可以在单个(城市)网络上拥有许多解决方案,因此神经网络可以在解决方案之间来回拖动,从来没有真正成功地收敛到任何一个。

约翰·R·多纳

【讨论】:

以上是关于我的 Hopfield 神经网络解决旅行商问题有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章

关于加快旅行商问题的动态编程解决方案的建议?

遗传算法解决旅行商问题(TSP)一:初始化和适应值

禁忌搜索 理解与c++实现 解决旅行商问题

多旅行商问题matlab程序

当我向旅行商问题添加更多顶点时,为啥我没有得到结果?

模拟退火算法解决旅行商问题(TSP)