TSP问题——Hopfield神经网络
发布日期:2022-03-02 13:23:54 浏览次数:41 分类:技术文章

本文共 2438 字,大约阅读时间需要 8 分钟。

TSP问题——Hopfield神经网络

clear;clc;% hopfield神经网络% 问题拟定为在网格上随机选取N个点作为城市,然后计算出TSP问题的最优解%(1)初始化Hopfield神经网络的初值city_num=11;% 惩罚参数A和D% A=city_num^2;% D=city_num/2;A=1.5;D=1;%初始电压u_0=0.02;%步长step=1;%最大迭代次数iter=0;MAX=10000;%最小能量,最小距离E_min=10000;d_min=10000;%(2)生成网格,并计算n个城市之间的距离矩阵Dxy%随机生成城市坐标city_perm=randperm(81);city_perm=city_perm(1,1:city_num);city_pos_1=(floor(city_perm./9)+1).*0.1;city_pos_2=(mod(city_perm,9)+1).*0.1;city_pos=[city_pos_1;city_pos_2(1,1:city_num)];%计算城市间距d=zeros(city_num);for i=1:city_num    for j=1:city_num        d(i,j)=(city_pos(:,i)-city_pos(:,j))'...            *(city_pos(:,i)-city_pos(:,j));        d(i,j)=d(i,j)^(1/2);    endend%画出网格hold on;plot(city_pos(1,:),city_pos(2,:),'Ko');for k=1:city_num    str=['   city' num2str(k) ''];    text(city_pos(1,k),city_pos(2,k),str);endset(gca,'XLim',[0 1],'YLim',[0 1]);grid on;%%tic%(3)初始化神经网络的输入状态% U=zeros(city_num);U_0=zeros(city_num)+u_0;% delta=2*rand(city_num)-1;%随机项delta=(2*rand(city_num)-1)/10;%随机项U=(0.5*log(city_num-1)).*U_0+delta;V=0.5*(1+tanh(U/u_0));V_col=sum(V,1);%列和V_row=sum(V,2);%行和Best_Route=[E_min;d_min;zeros(city_num,1)];while iter~=MAX    %(4)利用动态方程计算输入状态的增量,并更新神经网络下一个时刻的状态    % 计算增量dU    dU=zeros(city_num);    for l=1:city_num        for m=1:city_num            m_0=m+1;            m_1=m-1;            if m==city_num                m_0=1;            end            if m==1                m_1=city_num;            end`在这里插入代码片`            dU(l,m)=-A*(V_col(m)+V_row(l)-2)-...                D*d(l,:)*V(:,m_0);%             dU(l,m)=-A*(V_row(m)-U(l,m))-B*(V_col(l)-U(l,m))-...%                 C*(sum(V_row)-city_num)-D*(d(l,:)*U(:,m_0)+d(l,:)*U(:,m_1));        end    end    %更新U    U=U+dU*step;    V=0.5*(1+tanh(U/u_0));    %(5)计算当前的能量函数E    V_col=sum(V,1);%列和    V_row=sum(V,2);%行和    part_1=sum((V_col-1).^2);    part_2=sum((V_row-1).^2);    part_3=0;    for n=1:city_num        for o=1:city_num            for p=1:city_num                p_0=p+1;                if p==city_num                    p_0=1;                end                part_3=part_3+V(n,p)*V(o,p_0)*d(n,o);            end        end    end    E=(A/2)*(part_1+part_2)+(D/2)*part_3;    %(6)检查当前神经网络的输出状态集合,是否满足TSP置换矩阵的规则    % 满足规则认为是一个次优解,若其能量小于最小能量,记录其能量    V_max=zeros(city_num);    [~,order]=max(V);    for s=1:city_num        V_max(order(s),s)=1;    end    V_max_col=sum(V_max,1);%列和    V_max_row=sum(V_max,2);%行和    if (prod(V_max_col)==1)&&(prod(V_max_row)==1)        if E

转载地址:https://blog.csdn.net/abc_18782104794/article/details/88969753 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:华悦网游器软件介绍及功能介绍
下一篇:JSP中的include

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月23日 11时46分02秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

LeetCode C++ 48. Rotate Image【Array】中等 2019-04-28
LeetCode C++ 剑指 Offer 64. 求1+2+…+n【Bit Manipulation】中等 2019-04-28
LeetCode C++ 1426. Counting Elements【Array/Hash Table】简单 2019-04-28
LeetCode C++ 1469. Find All The Lonely Nodes【Tree/DFS/BFS】简单 2019-04-28
LeetCode C++ 1694. Reformat Phone Number【String】简单 2019-04-28
LeetCode C++ 376. Wiggle Subsequence【Dynamic Programming】中等 2019-04-28
LeetCode C++ 剑指 Offer 62. 圆圈中最后剩下的数字【Linked List/Math】简单 2019-04-28
LeetCode C++ 剑指 Offer 63. 股票的最大利润【Dynamic Programming】中等 2019-04-28
LeetCode C++ 剑指 Offer 47. 礼物的最大价值【Dynamic Programming】中等 2019-04-28
1876. Substrings of Size Three with Distinct Characters【字符串】 2019-04-28
LeetCode 969. Pancake Sorting【排序/数组】中等 2019-04-28
Code::Blocks配色主题文件 2019-04-28
LeetCode 374. Guess Number Higher or Lower【二分】简单 2019-04-28
LeetCode 1897. Redistribute Characters to Make All Strings Equal【字符串/哈希表】简单 2019-04-28
LeetCode 1893. Check if All the Integers in a Range Are Covered【数组/差分】简单 2019-04-28
LeetCode 1458. Max Dot Product of Two Subsequences【动态规划】困难 2019-04-28
LeetCode 1894. Find the Student that Will Replace the Chalk【数组/前缀和/二分】中等 2019-04-28
用Python+Selenium爬取今日头条关于江歌案的文章 2019-04-28
Python包安装问题日志(一) 2019-04-28
复习Python的Day1 2019-04-28