當前位置:首頁 » 操作系統 » matlab搜索演算法

matlab搜索演算法

發布時間: 2025-02-28 11:25:05

1. Matlab神經網路原理中可以用於尋找最優解的演算法有哪些

若果對你有幫助,請點贊。
神經網路的結構(例如2輸入3隱節點1輸出)建好後,一般就要求神經網路里的權值和閾值。現在一般求解權值和閾值,都是採用梯度下降之類的搜索演算法(梯度下降法、牛頓法、列文伯格-馬跨特法、狗腿法等等),這些演算法會先初始化一個解,在這個解的基礎上,確定一個搜索方向和一個移動步長(各種法算確定方向和步長的方法不同,也就使各種演算法適用於解決不同的問題),使初始解根據這個方向和步長移動後,能使目標函數的輸出(在神經網路中就是預測誤差)下降。 然後將它更新為新的解,再繼續尋找下一步的移動方向的步長,這樣不斷的迭代下去,目標函數(神經網路中的預測誤差)也不斷下降,最終就能找到一個解,使得目標函數(預測誤差)比較小。
而在尋解過程中,步長太大,就會搜索得不仔細,可能跨過了優秀的解,而步長太小,又會使尋解過程進行得太慢。因此,步長設置適當非常重要。
學習率對原步長(在梯度下降法中就是梯度的長度)作調整,如果學習率lr = 0.1,那麼梯度下降法中每次調整的步長就是0.1*梯度,
而在matlab神經網路工具箱里的lr,代表的是初始學習率。因為matlab工具箱為了在尋解不同階段更智能的選擇合適的步長,使用的是可變學習率,它會根據上一次解的調整對目標函數帶來的效果來對學習率作調整,再根據學習率決定步長。
機制如下:
if newE2/E2 > maxE_inc %若果誤差上升大於閾值
lr = lr * lr_dec; %則降低學習率
else
if newE2 < E2 %若果誤差減少
lr = lr * lr_inc;%則增加學習率
end
詳細的可以看《神經網路之家》nnetinfo里的《[重要]寫自己的BP神經網路(traingd)》一文,裡面是matlab神經網路工具箱梯度下降法的簡化代碼

2. 怎樣用matlab編程實現Dijkstra演算法

Dijkstra演算法是尋找最短路徑的一種搜索演算法,由荷蘭科學家提出。
演算法描述:通過為每個節點保留目前為止所找到的從s到e的最短路徑。為了記錄最佳路徑軌跡,記錄路徑上每個節點的前趨,通過回溯法找出最短路徑軌跡。

在網上搜索一些版本的Matlab實現方法,感覺都有些毛病。經過修改,得到比較好的效果。

[cpp] view plain
function [ distance path] = Dijk( W,st,e )
%DIJK Summary of this function goes here
% W 權值矩陣 st 搜索的起點 e 搜索的終點
n=length(W);%節點數
D = W(st,:);
visit= ones(1:n); visit(st)=0;
parent = zeros(1,n);%記錄每個節點的上一個節點

path =[];

for i=1:n-1
temp = [];
%從起點出發,找最短距離的下一個點,每次不會重復原來的軌跡,設置visit判斷節點是否訪問
for j=1:n
if visit(j)
temp =[temp D(j)];
else
temp =[temp inf];
end

end

[value,index] = min(temp);

visit(index) = 0;

%更新 如果經過index節點,從起點到每個節點的路徑長度更小,則更新,記錄前趨節點,方便後面回溯循跡
for k=1:n
if D(k)>D(index)+W(index,k)
D(k) = D(index)+W(index,k);
parent(k) = index;
end
end

end

distance = D(e);%最短距離
%回溯法 從尾部往前尋找搜索路徑
t = e;
while t~=st && t>0
path =[t,path];
p=parent(t);t=p;
end
path =[st,path];%最短路徑

end

測試:
測試用例1

[cpp] view plain
W=[0 50 inf 40 25 10
50 0 15 20 inf 25
inf 15 0 10 20 inf
40 20 10 0 10 25
25 inf 20 10 0 55
10 25 inf 25 55 0];
[cpp] view plain

[cpp] view plain
[distance,path]=Dijk(W,1,4);
>> distance

distance =

35

>> path

path =

1 6 4

從節點1到節點4最短距離路徑為1-->6-->4, 最短距離為35

熱點內容
x86編譯的程序 發布:2025-02-28 17:16:19 瀏覽:76
電腦無法上網代理伺服器出現問題 發布:2025-02-28 17:12:09 瀏覽:148
sql數據編輯器 發布:2025-02-28 17:07:53 瀏覽:383
2003安裝sql2008 發布:2025-02-28 16:42:02 瀏覽:159
oraclesql查詢時間段 發布:2025-02-28 16:34:15 瀏覽:799
華為安卓的自帶分身在哪裡 發布:2025-02-28 16:27:43 瀏覽:465
學編程科班 發布:2025-02-28 16:27:38 瀏覽:139
熱泵編程 發布:2025-02-28 16:16:21 瀏覽:141
全鍵盤編程 發布:2025-02-28 16:06:49 瀏覽:936
csocket編程實例 發布:2025-02-28 16:05:11 瀏覽:307