您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“matlab連續Hopfield神經網絡的優化方法是什么”,內容詳細,步驟清晰,細節處理妥當,希望這篇“matlab連續Hopfield神經網絡的優化方法是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
組合優化問題的目標是從組合問題的可行解集中求出最優解,組合優化往往涉及排序,分類篩選等問題,是運籌學的一個重要分支,典型的組合優化問題,有旅行商問題,加工調度問題,背包問題裝箱問題,圖著色問題,聚類問題等,這些問題描述非常簡單,并且有很強的工程代表性,但最優化求解很困難,其主要原因是求解這些問題的算法運行時需要極長的運行時間與極大的存儲空間,以致根本不可能在現有的計算機上實現,就會產生所謂的“組合爆炸”問題。
利用神經網絡解決組合優化問題,是神經網絡應用的一個重要方面,將Hopfield網絡應用于求解組合優化問題,將目標函數轉化為網絡的能量函數,把問題的變量對應到網絡的神經元的狀態,這樣當網絡的能量函數收斂于極小值時,問題的最優解也隨之求出,由于神經網絡是并行計算的,其計算量不會隨著維數的增加而發生指數型“爆炸”,因而對于優化問題的告訴就算特別有效。
%% 清空環境變量、定義全局變量
clear
clc
global A D
%% 導入城市位置
load city_location
%% 計算相互城市間距離
distance=dist(citys,citys');
%% 初始化網絡
N=size(citys,1);
A=200;
D=100;
U0=0.1;
step=0.0001;
delta=2*rand(N,N)-1;
U=U0*log(N-1)+delta;
V=(1+tansig(U/U0))/2;
iter_num=10000;
E=zeros(1,iter_num);
%% 尋優迭代
for k=1:iter_num
% 動態方程計算
dU=diff_u(V,distance);
% 輸入神經元狀態更新
U=U+dU*step;
% 輸出神經元狀態更新
V=(1+tansig(U/U0))/2;
% 能量函數計算
e=energy(V,distance);
E(k)=e;
end
%% 判斷路徑有效性
[rows,cols]=size(V);
V1=zeros(rows,cols);
[V_max,V_ind]=max(V);
for j=1:cols
V1(V_ind(j),j)=1;
end
C=sum(V1,1);
R=sum(V1,2);
flag=isequal(C,ones(1,N)) & isequal(R',ones(1,N));
%% 結果顯示
if flag==1
% 計算初始路徑長度
sort_rand=randperm(N);
citys_rand=citys(sort_rand,:);
Length_init=dist(citys_rand(1,:),citys_rand(end,:)');
for i=2:size(citys_rand,1)
Length_init=Length_init+dist(citys_rand(i-1,:),citys_rand(i,:)');
end
% 繪制初始路徑
figure(1)
plot([citys_rand(:,1);citys_rand(1,1)],[citys_rand(:,2);citys_rand(1,2)],'o-')
for i=1:length(citys)
text(citys(i,1),citys(i,2),[' ' num2str(i)])
end
text(citys_rand(1,1),citys_rand(1,2),[' 起點' ])
text(citys_rand(end,1),citys_rand(end,2),[' 終點' ])
title(['優化前路徑(長度:' num2str(Length_init) ')'])
axis([0 1 0 1])
grid on
xlabel('城市位置橫坐標')
ylabel('城市位置縱坐標')
% 計算最優路徑長度
[V1_max,V1_ind]=max(V1);
citys_end=citys(V1_ind,:);
Length_end=dist(citys_end(1,:),citys_end(end,:)');
for i=2:size(citys_end,1)
Length_end=Length_end+dist(citys_end(i-1,:),citys_end(i,:)');
end
disp('最優路徑矩陣');V1
% 繪制最優路徑
figure(2)
plot([citys_end(:,1);citys_end(1,1)],...
[citys_end(:,2);citys_end(1,2)],'o-')
for i=1:length(citys)
text(citys(i,1),citys(i,2),[' ' num2str(i)])
end
text(citys_end(1,1),citys_end(1,2),[' 起點' ])
text(citys_end(end,1),citys_end(end,2),[' 終點' ])
title(['優化后路徑(長度:' num2str(Length_end) ')'])
axis([0 1 0 1])
grid on
xlabel('城市位置橫坐標')
ylabel('城市位置縱坐標')
% 繪制能量函數變化曲線
figure(3)
plot(1:iter_num,E);
ylim([0 2000])
title(['能量函數變化曲線(最優能量:' num2str(E(end)) ')']);
xlabel('迭代次數');
ylabel('能量函數');
else
disp('尋優路徑無效');
end
讀到這里,這篇“matlab連續Hopfield神經網絡的優化方法是什么”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。