Hopfield网络解决旅行商问题
1. 激活函数与输出函数
Hopfield网络在解决旅行商问题(TSP)中有着重要应用。激活函数的第一项在每次迭代中会逐渐减小,而第二、三、四和五项则为有效路径提供了约束条件。激活值的更新公式为:
[a_{ij}(new) = a_{ij}(old) + \Delta a_{ij}]
该网络是一个连续的Hopfield网络,其输出函数为:
[X_{ij} = \frac{1 + \tanh(\lambda a_{ij})}{2}]
其中,(X_{ij}) 是神经元的输出,双曲正切函数会给出一个输出值,(\lambda) 的值决定了函数的斜率,这里 (\lambda) 的值为 3。理想情况下,我们希望输出为 1 或 0,但双曲正切函数给出的是一个实数,所以我们会取一个非常接近期望结果的值,例如用 0.956 代替 1,用 0.0078 代替 0。
2. 输入选择
网络的输入是随机选择的,因此网络的初始状态并不固定,也不会对任何特定路径产生偏见。如果输入的选择使得激活值计算出的输出之和等于城市的数量,那么就会得到一个初始的合法路径解。
然而,网络可能会陷入局部最小值。为了避免这种情况,会生成随机噪声并添加到初始输入中。同时,用户需要输入想要旅行的城市数量以及这些城市之间的距离,这些信息将用于生成距离矩阵。距离矩阵是一个 (n^2) 的方阵,其主对角线元素为 0。
3. 实现细节
该算法使用 C++ 实现,用于 Hopfield 网络解决旅行商问题。此代码最多可处理 25 个城市,并且可以很容易地扩展到更多城市。实现该网络的
超级会员免费看
订阅专栏 解锁全文
1036

被折叠的 条评论
为什么被折叠?



