连续型Hopfield在matlab中没有直接的工具箱,所以我们们根据Hopfield给出的连续行算法自行编写程序。本文中,以求解旅行商
问题来建立Hopfield网络,并得到解,但是该解不一定是最优解,用Hopfield得到的解可能是次优解,或没有解。直接上问题:
8个城市的坐标:
0.100000000000000 0.100000000000000
0.900000000000000 0.500000000000000
0.900000000000000 0.100000000000000
0.450000000000000 0.900000000000000
0.900000000000000 0.800000000000000
0.500000000000000 0.500000000000000
0.100000000000000 0.450000000000000
0.450000000000000 0.100000000000000
求这8个城市的旅行商解。
在求解前,先简单引入一下连续性Hopfield网络的特点。
一般神经网络(RBF或BP)是单项的,而Hopfield网络特点在于有反馈,而最终得到的结果是一个网络的收敛值。
对于一个Hopfield网络来说,关键是在于确定它在稳定条件下的权系数。
ps:说白了,神经网络就是不断的改变权系数来逼近样本。
这里我们不介绍Hopfield网络的物理实现,因为该网络是一种模电物理模型,具体硬件知识我也不怎么清楚。我们只需要关心
两个问题:
1,单个神经元输入输出是什么(或者说怎么变化)
2,整个网络的变化状态(能量)
对于一个N节点的CHNN模型来说,其神经元状态变量的动态变化可用下述非线性微分方程组来描述
这个等式来自于Ui节点的电流,流入节点电流等于流出。Vi表示电压的变化。
这就是我们关心的能量函数。
这两个等式看不懂也没什么大问题,我们只要知道根据这两个等式推出的结论就可以。
结论:该网络是逐渐稳定的,随着时间推移,网络的能量E随着减小的方向运动,其最终状态就是E的极小值。
这里给出证明:
观察E的变化趋势,即求,而,其中
所以,不难发现,E的变化率是递减的,即上述结论正确。
根据连续Hopfield天生的特点,我们不禁想到如果把一个最优化问题的目标函数转换成网络的能量函数,把问题的变量对应于网络的状态,那么Hopfield神经网络就能够用于解决优化组合问题。
接下来给出算法步骤:
这里需要反复迭代计算4~8步
这里具体代码见URL:http://files.cnblogs.com/files/panpansky/TSP_hopfield.rar
运算结果分析:
图一 图二 图三
图一表示城市1~8分别进行的顺序:4-6-7-1-8-3-2-5,图二是具体的路线图,图三表示能量的变化,其实在迭代至30次左右,能量已经趋于平稳。
以上代码和数据均来自http://www.ilovematlab.cn/thread-44738-1-1.html。