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

matlab禁忌搜索演算法

發布時間: 2023-04-30 20:12:50

『壹』 一道MATLAB題,求助啊

題主並沒有把問題描述清楚。


其實這是一個單一設施選址問題,脊蔽其中的ai對應的是平面上點的坐標,wi為各點的權重。所謂【f是一個特定函數】說的很含糊,其實f是所選點與各已知點距離的加權和,而迭代的目標則是讓f達到最小值。

這是一個無約束優化問題,可用fminunc直接求解:

%常數定義
a1=[2;0];a2=[4;10];a3=[8;3];a4=[3;5];a5=[5;7];
w1=6;w2=2;w3=7;w4=5;w5=4;
e=1e-6;

%為便於統一處理,使用數組
A=[a1a2a3a4a5];
W=[w1w2w3w4w5];

%初值
x0=rand(2,1)*10;

%定義求范數和目標函數的匿名函數
n=@(x)arrayfun(@(i)norm(A(:,i)-x),1:length(W));
f=@(x)sum(W.*n(x));
x=fminunc(f,x0,optimset('LargeScale','off'輪頌,'display','off'))

如果用題主貼出的來式子編程序,代碼如下:

%常數定義
a1=[2;0];a2=[4;10];a3=[8;3];a4=[3;5];a5=[5;7];
w1=6;w2=2;w3=7;w4=5;w5=4;
e=1e-6;
%為便於統一處理,使用數組
A=[a1a2a3a4a5];
W=[w1w2w3w4w5];
%初值
x0=rand(2,1)*10;
%定義求范數和目標函數的匿名函數
n=@(x)arrayfun(@(i)norm(A(:,i)-x),1:length(W));
f=@(x)sum(W.*n(x));
%迭代
whiletrue
N=n(x0);
x=sum([W;W].*A./[N;N],2)/sum(W./N,2);

%若滿足精度要求,退出循環
ifabs(f(x)-f(x0))<=f(x0)*e
break
end
x0=x;
end
x

其實,迭代的終止條件除題主所給的目標函數相對誤差(TolFun)之外,常見的還有變數本身的允許誤差(TolX)以及迭代次數(MaxIter)等。

下面給出一個增加了繪圖示意櫻桐州的版本。等值線為目標函數,各已知點根據權重以不同大小表示,動畫示意了從不同初值經迭代到達最優點的過程。

%常數定義
a1=[2;0];a2=[4;10];a3=[8;3];a4=[3;5];a5=[5;7];
w1=6;w2=2;w3=7;w4=5;w5=4;
e=1e-6;
%為便於統一處理,使用數組
A=[a1a2a3a4a5];
W=[w1w2w3w4w5];
%初值(隨機生成)
x0=rand(2,1)*10;
%定義求范數和目標函數的匿名函數
n=@(x)arrayfun(@(i)norm(A(:,i)-x),1:length(W));
f=@(x)sum(W.*n(x));
%繪圖
clf
ezcontour(@(x,y)arrayfun(@(x,y)f([x;y]),x,y),[-312-111])
holdon
fori=1:length(W)
plot(A(1,i),A(2,i),'o','MarkerSize',W(i)*2,'MarkerFace','c');
text(A(1,i)+0.4,A(2,i),sprintf('(%g,%g)',A(:,i)));
end
h2=plot(x0(1),x0(2),':.','color',[111]*0.8);
h1=plot(x0(1),x0(2),'r*');
h3=title('');
axisequal
colorbar
X=x0;
%迭代
whiletrue
N=n(x0);
x=sum([W;W].*A./[N;N],2)/sum(W./N,2);

%更新繪圖
X=[Xx];
set(h2,'XData',X(1,:),'YData',X(2,:))
set(h1,'XData',x(1),'YData',x(2))
set(h3,'str',sprintf('Currentpoint:(%.4f,%.4f),f(x)=%.6f',x,f(x)));
drawnow
pause(0.5)

%若滿足精度要求,退出循環,否則以新的值繼續迭代
ifabs(f(x)-f(x0))<=f(x0)*e
set(h1,'Color','g','Marker','p','MarkerFace','g')
break
end
x0=x;
end

『貳』 跪求禁忌搜索演算法解決背包問題的matlab程序

附件代碼,可供參考

『叄』 求助用MATLAB編個小程序

給出具體的數據吧 那樣好編點!!

『肆』 MATLAB與系統模擬 試題

二、系統模擬
系統模擬是20世紀40年代末以來伴隨著計算機技術的發展而逐步形成的一門新興學科。模擬(Simulation)就是通過建立實際系統模型並利用所見模型對實際系統進行實驗研究的過程[2]。最初,模擬技術主要用於航空、航天、原子反應堆等價格昂貴、周期長、危險性大、實際系統試驗難以實現的少數領域,後來逐步發展到電力、石油、化工、冶金、機械等一些主要工業部門,並進一步擴大到社會系統、經濟系統、交通運輸系統、生態系統虧卜等一些非工程系統領域。可以說,現代系統模擬技術和綜合性模擬系統已經成為任何復雜系統,特別是高技術產業不可缺少的分析、研究、設計、評價、決策和訓練的重要手段。其應用范圍在不斷擴大,應用效益也日益顯著。
1.銷前穗系統模擬及其分類
系統模擬是建立在控制理論、相似理論、信息處理技術和計算機初等理論基礎之上的,以計算機和其他專用物理效應設備為工具,利用系統模型對真實或假設的系統進行試驗,並藉助於專家的經驗知識、統計數據和信息資料對實驗結果進行分析研究,進而做出決策的一門綜合的實驗性學科。從廣義而言,系統模擬的方法適用於任何的領域,無論是工程系統(機械、化工、電力、電子等)或是非工程系統(交通、管理、經濟、政治等)。
系統模擬根據模型不同,可以分為物理模擬、數學模擬和物理—數學模擬(半實物模擬);根據計算機的類別,可以分為模擬模擬、數字模擬和混合模擬;根據系統的特性;可以分為連續系統模擬、離散時間系統(采樣系統)模擬和離散事件系統模擬;根據模擬時鍾與實際時鍾的關系,可以分為實時模擬、欠實時模擬和超實時模擬等。
2.系悔告統模擬的一般步驟
對於每一個成功的模擬研究項目,其應用都包含著特定的步驟,見圖9-2。不論模擬項目的類型和研究目的又何不同,模擬的基本過程是保持不變的,要進行如下9步:
問題定義
制定目標
描述系統並對所有假設列表
羅列出所有可能替代方案
收集數據和信息
建立計算機模型
校驗和確認模型
運行模型
分析輸出
下面對這九步作簡單的定義和說明。它不是為了引出詳細的討論,僅僅起到拋磚引玉的作用。注意模擬研究不能簡單遵循這九步的排序,有些項目在獲得系統的內在細節之後,可能要返回到先前的步驟中去。同時,驗證和確認需要貫穿於模擬工程的每一個步驟當中。
(1)問題的定義
一個模型不可能呈現被模擬的現實系統的所有方面,有時是因為太昂貴。另外,假如一個表現真實系統所有細節的模型也常常是非常差的模型,因為它將過於復雜和難於理解。因此,明智的做法是:先定義問題,再制定目標,再構建一個能夠完全解決問題的模型。在問題定義階段,對於假設要小心謹慎,不要做出錯誤的假設。例如,假設叉車等待時間較長,比假設沒有足夠的接收碼頭要好。作為模擬綱領,定義問題的陳述越通用越好,詳細考慮引起問題的可能原因。
(2)制定目標和定義系統效能測度
沒有目標的模擬研究是毫無用途的。目標是模擬項目所有步驟的導向。系統的定義也是基於系統目標的。目標決定了應該做出怎樣的假設、應該收集那些信息和數據;模型的建立和確認考慮到能否達到研究的目標。目標需要清楚、明確和切實可行。目標經常被描述成像這樣的問題「通過添加機器或延長工時,能夠獲得更多的利潤嗎?」等。在定義目標時,詳細說明那些將要被用來決定目標是否實現的性能測度是非常必要的。每小時的產出率、工人利用率、平均排隊時間、以及最大隊列長度是最常見的系統性能測度。
最後,列出模擬結果的先決條件。如:必須通過利用現有設備來實現目標,或最高投資額要在限度內,或產品訂貨提前期不能延長等。
(3)描述系統和列出假設
簡單點說,模擬模型降低完成工作的時間。系統中的時間被劃分成處理時間、運輸時間和排隊時間。不論模型是一個物流系統、製造工廠、或服務機構,清楚明了的定義如下建模要素都是非常必要的:資源、流動項目(產品、顧客或信息)、路徑、項目運輸、流程式控制制、加工時間,資源故障時間。
模擬將現實系統資源分成四類:處理器,隊列,運輸,和共享資源如操作員。流動項目的到達和預載的必要條件必須定義,如:到達時間、到達模式和該項目的類型等屬性。在定義流動路徑時,合並和轉移需要詳細的描述。項目的轉變包括屬性變化、裝配操作(項目和並)、拆卸操作(項目分離)。在系統中,常常有必要控制項目的流動。如:一個項目只有在某種條件或某一時刻到來時才能移動,以及一些特定的規則。所有的處理時間都要被定義,並且要清楚表明那些操作是機器自動完成,哪些操作是人工獨立完成,哪些操作需要人機協同完成。資源可能有計劃故障時間和意外故障時間。計劃故障時間通常指午餐時間,中場休息,和預防性維護等。意外故障時間是隨機發生的故障所需的時間,包括失效平均間隔時間和維修平均間隔時間。
在這些工作完成之後,需要將現實系統作模型描述,它遠比模型描述向計算機模型轉化困難。現實向模型的轉化意味著你已經對現實有了非常徹底的理解,並且能將其完美的描述出來。這一階段,將此轉換過程中所作的所有假設作詳細說明非常有必要。事實上,在整個模擬研究過程中,所有假設列表保持在可獲得狀態是個很好的主意,因為這個假設列表隨著模擬的遞進還要逐步增長。假如描述系統這一步做得非常好,建立計算機模型這一階段將非常簡便。
注意,獲得足夠的,能夠體現特定模擬目的的系統本質的材料是必要的,但是不需要獲得與真實系統一一對應的模型的描述。正如愛因斯坦所說「做到不能再簡單為止」。
(4)列舉可能的替代方案
在模擬研究中,確定模型早期運行的可置換方案是很重要的。它將影響著模型的建立。在初期階段考慮替代方案,模型可能被設計成可以非常容易的轉換到替換系統。
(5)收集數據和信息
收集數據和信息,除了為模型參數輸入數據外,在驗證模型階段,還可以提供實際數據與模型的性能測度數據進行比較。數據可以通過歷史紀錄、經驗、和計算得到。這些粗糙的數據將為模型輸入參數提供基礎,同時將有助於一些需要較精確輸入參數數據的收集。
有些數據可能沒有現成的記錄,而通過測量來收集數據可能要費時、費錢。除了在模型分析中,模型參數需要極為精確的輸入數據外,同對系統的每個參數的數據進行調查、測量的收集方式相比,採用估計方法來產生輸入數據更為高效。估計值可以通過少數快速測量或者通過咨詢熟悉系統的系統專家來得到。即使是使用較為粗糙的數據,根據最小值、最大值和最可能取值定義一個三角分布,要比僅僅採用平均值模擬效果都要好得多。有時候採用估計值也能夠很好的滿足模擬研究的目的。例如,模擬可能被簡單的用來指導人員了解系統中特定的因果關系。在這種情況下,估計值就可以滿足要求。
當需要可靠數據時,花費較多時間收集和統計大量數據,以定義出能夠准確反映現實的概率分布函數就是非常必要的。需要的數據量的大小取決於變數的變異程度,但是也有通用的規則,大拇指法指出至少需要三十甚至上百的數據。假如要獲得隨機停機時間的輸入參數,必須要在一個較長時間段內捕獲足夠多的數據。
(6)建立計算機模型
構建計算機模型的過程中,首先構建小的測試模型來證明復雜部件的建模是合適的。一般建模過程是呈階段性的,在進行下一階段建模之前,驗證本階段的模型工作正常,在建模過程中運行和調試每一階段的模型。不會直接將整個系統模型構建起來,然後點擊「運行」按鈕來進行系統的模擬。抽象模型有助於定義系統的重要部分,並可以引導為後續模型的詳細化而進行的數據收集活動。我們可能想對同一現實系統構建多個計算機模型,每個模型的抽象程度都不相同。
(7)驗證和確認模型
驗證是確認模型的功能是否同設想的系統功能相符合。模型是否同我們想構建的模型相吻合,產品的處理時間、流向是否正確等。確認范圍更廣泛。它包括:確認模型是否能夠正確反映現實系統,評估模型模擬結果的可信度有多大等。
(8)驗證
現在有很多技術可以用來驗證模型。最最重要的、首要的是在模擬低速運行時,觀看動畫和模擬鍾是否同步運行,它可以發現物料流程及其處理時間方面的差異。
另一種驗證技術是在模型運行過程中,通過交互命令窗口,顯示動態圖表來詢問資源和流動項目的屬性和狀態。
通過「步進」方式運行模型和動態查看軌跡文件可以幫助人們調試模型。運行模擬時,通過輸入多組模擬輸入參數值,來驗證模擬結果是否合理也是一種很好的方法。在某些情況下,對系統性能的一些簡單測量可以通過手工或使用對比而來獲得。對模型中特定區域要素的使用率和產出率通常是非常容易計算出來的。
在調試模型中是否存在著某種特定問題時,推薦使用同一隨機數流,這樣可以保證模擬結果的變化是由對模型所做的修改引起的,同時對隨機數流不做改動,有時對於模型運行在一些簡單化假設下,非常有幫助,這些假設是為了更加簡便的計算或預測系統性能。
(9)確認
模型確認建立模型的可信度。但是,現在還沒有哪一種確認技術可以對模型的結果作出100%的確定。我們永遠不可能證明模型的行為就是現實的真實行為。如果我們能夠做到這一步,可能就不需要進行模擬研究的第一步(問題的定義)了。我們盡力去做的,最多隻能是保證模型的行為同現實不會相互抵觸罷了。
通過確認,試著判斷模型的有效程度。假如一個模型在得到我們提供的相關正確數據之後,其輸出滿足我們的目標,那麼它就是好的。模型只要在必要范圍內有效就可以了,而不需要盡可能的有效。在模型結果的正確性同獲得這些結果所需要的費用之間總存在著權衡。
判斷模型的有效性需要從如下幾方面著手:
①模型性能測度是否同真實系統性能測度匹配?
②如果沒有現實系統來對比,可以將模擬結果同相近現實系統的模擬模型的相關運行結果作對比。
③利用系統專家的經驗和直覺來假設復雜系統特定部分模型的運行狀況。
對每一主要任務,在確認模型的輸入和假設都是正確的,模型的性能測度都是可以測量的之前,需要對模型各部分進行隨機測試。
④模型的行為是否同理論相一致?確定結果的理論最大值和最小值,然後驗證模型結果是否落入兩值之間。
為了了解模型在改變輸入值後,其輸出性能測度的變化方向,可以通過逐漸增大或減小其輸入參數,來驗證模型的一致性。
⑤模型是否能夠准確的預測結果?這項技術用來對正在運行中的模型進行連續的有效性驗證。
⑥是否有其他模擬模擬器模擬了這個模型?要是有的話那就再好不過了,可以將已有模型的模擬結果同現在設計的模型的運行結果進行對比。
(10)運行可替代實驗
當系統具有隨機性時,就需要對實驗做多次運行。因為,隨機輸入導致隨機輸出。如果可能,在第二步中應當計算出已經定義的每一性能測度的置信區間。可替代環境能夠單獨構建,並可以通過使用WITNESS軟體中的「Optimizer」模塊來設置並自動運行模擬優化。
WITNESS軟體的「Optimizer」模塊為了執行優化操作,通過選擇目標函數的最大化或最小化,定義需要實驗的許多決策變數,需要達到的條件變數,需要滿足的約束等,然後讓優化模塊負責搜索變數的可替換數字,來運行模型。最終得出決策變數集的優化解決方案,和最大化或最小化的模型目標函數。「Optimizer」模塊設置了一套優化方法,包括遺傳演算法、模擬處理、禁忌搜索、分散搜索和其他的混合法來得出模型的優化配置方案。
在選擇模擬運行長度時,考慮啟動時間,資源失效可能間隔時間,處理時間或到達時間的時間或季節性差異,或其他需要系統運行足夠長時間才能出現效果的系統特徵變數,是非常重要的。
(11)輸出分析
報表、圖形和表格常常被用於進行輸出結果分析。同時需要於今年用統計技術來分析不同方案的模擬結果。一旦通過分析結果並得出結論,要能夠根據模擬的目標來解釋這些結果,並提出實施或優化方案。使用結果和方案的矩陣圖進行比較分析也是非常有幫助的。

『伍』 matlab字元串匹配准確率

Matlab字元串匹配准確率是指在進行字元串匹配時,所得到的匹配結果與實際情況相符的程度。字元串匹配是一種常見的編程操作,它可以用來查找一個字元串中是否包含特定的字元序列,或者在多個字元串中查找匹配的子串。在Matlab中,可以使用函數如strfind和regexp來拍蘆叢進行字元串匹配。
字元串匹配准確率的高低取決於多個因素,例如所用的匹配演算法、匹配時所考慮的條件、字元串的長度和復雜度等等。一般來說,准確率越高,匹配結果就越可靠。
為了提高字元串匹配的准確率,可以採用以下幾種方法:
1. 選擇合適的匹配演算法。不同的匹配演算法適用於不同的字元串類型和匹配需求,例如暴力匹配、KMP演算法和Boyer-Moore演算法等。
2. 考慮嘩如匹配時的條件。在實際應用中,匹配時需要考慮多個因素,例如字元串的大小寫、空格、標點符號等等。如果忽略這些條件襲櫻,可能會導致匹配結果的誤差。
3. 對字元串進行預處理。在進行匹配前,可以對字元串進行預處理,例如去除無關字元、轉換大小寫等等。這樣可以減少匹配時的干擾,提高准確率。
4. 使用多種匹配方法。如果一種匹配方法無法滿足需求,可以嘗試使用多種方法進行匹配,然後對結果進行綜合分析,提高准確率。
總之,Matlab字元串匹配准確率的提高需要綜合考慮多個因素,採用合適的方法和策略,才能得到更加准確的匹配結果。

『陸』 什麼是智能優化演算法

群體智能優化演算法是一類基於概率的隨機搜索進化演算法,各個演算法之間存在結構、研究內容、計算方法等具有較大的相似性。因此,群體智能優化演算法可以建立一個基本的理論框架模式:

Step1:設置參數,初始化種群;

Step2:生成一組解,計算其適應值;

Step3:由個體最有適應著,通過比較得到群體最優適應值;

Step4:判斷終止條件示否滿足?如果滿足,結束迭代;否則,轉向Step2;

各個群體智能演算法之間最大不同在於演算法更新規則上,有基於模擬群居生物運動步長更新的(如PSO,AFSA與SFLA),也有根據某種演算法機理設置更新規則(如ACO)。

(6)matlab禁忌搜索演算法擴展閱讀

優化演算法有很多,經典演算法包括:有線性規劃,動態規劃等;改進型局部搜索演算法包括爬山法,最速下降法等,模擬退火、遺傳演算法以及禁忌搜索稱作指導性搜索法。而神經網路,混沌搜索則屬於系統動態演化方法。

優化思想裡面經常提到鄰域函數,它的作用是指出如何由當前解得到一個(組)新解。其具體實現方式要根據具體問題分析來定。

『柒』 模式識別與智能計算 matlab技術實現 怎麼運行

《模式識別與智能計算―MATLAB技術實現(第3版)》廣泛吸取統計學、神經網路、數據挖掘、機器學習、人工智慧、群智能計算等學科的先進思想和理論,將其應用到模式識別領域中;以一種新的體系,系統、全面地介紹模式識別的理論、方法及應用。全書分為14章,內容包括:模式識別概述,特徵的選擇與優化空培,模式相似性測度,基於概率統計的貝葉斯分類器設計,判別函數分類器設計,神經網路分類器設計(BP神經網路、徑向基函數神經網路、自組織競爭神經網路、概率斗賣唯神經網路、對向傳播神經網路、反饋型神經網路),決策樹分類器設計,粗糙集分類器設計,聚類分析配猜,模糊聚類分析,禁忌搜索演算法聚類分析,遺傳演算法聚類分析,蟻群演算法聚類分析,粒子群演算法聚類分析。
《模式識別與智能計算―MATLAB技術實現(第3版)》內容新穎,實用性強,理論與實際應用密切結合,以手寫數字識別為應用實例,介紹理論運用於實踐的實現步驟及相應的Matlab代碼,為廣大研究工作者和工程技術人員對相關理論的應用提供借鑒。

『捌』 急求!誰能詳細告訴我 神經網路法、模擬退火法、數學規劃法、遺傳演算法、禁忌搜索哪個比較簡單好用

神經網昌野絡姿派,神經網路,用matlab工跡迅賀具箱。
原理復雜,用起來很簡單。到網上搜「matlab中文論壇」。裡面有視頻,很好。

『玖』 禁忌搜索解決任務分配問題(matlab)

function main()
clear
taskNum = 50;
machNum = 8;
densityV = [0.2]%,0.5,0.8];
ccrV = [0.5]%,1,2];
saSHH = [];
SAtimeHH = [];
for density = densityV
for ccr = ccrV
[ETC,adjMatrix,memReq,memCap] = instance(taskNum,machNum,ccr,density); %% taskH,machH,ccr,density,type
SAresultHH = [];
tSAHH = [];
for iter = 1:5
SAStart = cputime;
[SACost,IteratorSolution] = SA(ETC,adjMatrix,memReq,memCap);
SAresultHH = [SAresultHH,SACost];
SAtime = cputime - SAStart;
tSAHH = [tSAHH,SAtime];

end
saSHH = [saSHH;SAresultHH];
SAtimeHH = [SAtimeHH;tSAHH];
end
end
meanSAsHH = mean(saSHH')

stdSAsHH = std(saSHH')

meanSAtHH = mean(SAtimeHH')

col_sa = length(IteratorSolution);
plot(1:col_sa,IteratorSolution,'-x','linewidth',1.0);
xlabel('Evaluation number');
ylabel('Fitness value');
legend('SA');

function [bestCost,IteratorSolution] = SA(ETC,adjMatrix,memReq,memCap,speed,machRelia,linkRelia)
[taskNum,machNum] = size(ETC);
S = randint(1,taskNum,[1,machNum]); %initial the s randomly
T = IniTemp(S,ETC,adjMatrix,memReq,memCap); %initial the temprature
% Tlow = IniTemp(S,ETC,adjMatrix,memReq,memCap,0.50001);
[cost,memLoad] = calcCost(S,ETC,adjMatrix,memReq,memCap);
Alpha = 0.9; %the value of Alpha
Bita = 1.05; %the value of Bita
Nrep = taskNum * machNum; %the count of inner loop
IteratorSolution = []; %record the change among the loop
bestS = S;
bestCost = cost;
deadline1 = 0; %the count of the outer loop
while deadline1 <= 20
findBest = 0;
iter = 1;
deadline2 = 0;
while (iter <= Nrep)
triS = S;
triCost = cost;
t = fix(1 + rand * taskNum);
p = triS(t);
q = fix(1 + rand * machNum);
while p == q
q = fix(1 + rand * machNum);
end
triS(t) = q;
triCost = triCost - ETC(t,p) + ETC(t,q);
adjTask = find(adjMatrix(t,:));
for k = adjTask %alter communication cost
switch triS(k)
case q
triCost = triCost - adjMatrix(t,k);
case p
triCost = triCost + adjMatrix(t,k);
end
end
if (memLoad(p) > memCap(p)) %calculate violation
if (memLoad(p) - memReq(t)) <= memCap(p)
triCost = triCost - (memLoad(p) - memCap(p));
else
triCost = triCost - memReq(t);
end
end
% there exists no memory violation before migration
if (memLoad(q) + memReq(t)) > memCap(q)
if memLoad(q) <= memCap(q)
triCost = triCost + (memLoad(q) + memReq(t) - memCap(q));
else % there exists memory violation before migration
triCost = triCost + memReq(t);
end
end
Dita = triCost - cost;
if Dita < 0
S = triS;
cost = triCost;
memLoad(p) = memLoad(p) - memReq(t);
memLoad(q) = memLoad(q) + memReq(t);
if (triCost < bestCost)
bestS = triS;
bestCost = triCost;
deadline2 = 0;
findBest = 1;
end
else
if rand < exp(-Dita/T)
S = triS;
cost = triCost;
memLoad(p) = memLoad(p) - memReq(t);
memLoad(q) = memLoad(q) + memReq(t);
end
deadline2 = deadline2 + 1;
if deadline2 >= taskNum * machNum
break;
end
end
iter = iter + 1;
IteratorSolution = [IteratorSolution,cost];
end
T = Alpha * T;
Nrep = Bita * Nrep;
if findBest
deadline1 = 0;
else
deadline1 = deadline1 + 1;
end
end

function [totalCost,memLoad] = calcCost(S,ETC,adjMatrix,memReq,memCap)
[tN,mN] = size(ETC);
totalCost = 0;
memLoad = zeros(1,mN);
for t = 1:tN
totalCost = totalCost + ETC(t,S(t));
memLoad(S(t)) = memLoad(S(t)) + memReq(t);
for k = t+1:tN %t or t+1?
if (adjMatrix(t,k)>0) && (S(k) ~= S(t))
totalCost = totalCost + adjMatrix(t,k);
end
end
end
for m = 1:mN
if memLoad(m) > memCap(m)
totalCost = totalCost + (memLoad(m) - memCap(m));
end
end

function [ETC,adjMatrix,memReq,memCap] = instance(taskNum,machNum,ccr,density)

ETC = fix(1 + 200 * rand(taskNum,machNum));
for i = 1:taskNum-1
for j = i+1:taskNum
if (rand < density)
adjMatrix(i,j) = fix(2 * (1 + 200 * rand) * ccr / ((taskNum-1) * density));
else
adjMatrix(i,j) = 0;
end
adjMatrix(j,i) = adjMatrix(i,j);
end
end
% memory requirement of each task
memReq = fix(1 + 50 * rand(1,taskNum));
% memory capacity of each processor
memCap = fix((1 + rand(1,machNum)) * sum(memReq) / machNum);

function T = IniTemp(S,ETC,adjMatrix,memReq,memCap)
[taskNum,machNum] = size(ETC);
SumCi = 0;
AccValue = 0.9;
Ci = 0;
Cr = 0;
[cost,memLoad] = calcCost(S,ETC,adjMatrix,memReq,memCap); % calculate the total cost
for countNum = 1:200
triS = S;
triCost = cost;
t = fix(1 + taskNum * rand);
p = triS(t);
q = fix(1 + machNum * rand);
while p == q
q = fix(1 + machNum * rand);;
end
triS(t) = q;
triCost = triCost - ETC(t,p) + ETC(t,q);
adjTask = find(adjMatrix(t,:));
for k = adjTask %alter communication cost
switch triS(k)
case q
triCost = triCost - adjMatrix(t,k);
case p
triCost = triCost + adjMatrix(t,k);
end
end
if (memLoad(p) > memCap(p)) %calculate violation
if (memLoad(p) - memReq(t)) <= memCap(p)
triCost = triCost - (memLoad(p) - memCap(p));
else
triCost = triCost - memReq(t);
end
end
% there exists no memory violation before migration
if (memLoad(q) + memReq(t)) > memCap(q)
if memLoad(q) <= memCap(q)
triCost = triCost + (memLoad(q) + memReq(t) - memCap(q));
else % there exists memory violation before migration
triCost = triCost + memReq(t) ;
end
end
memLoad(p) = memLoad(p) - memReq(t);
memLoad(q) = memLoad(q) + memReq(t);

Dita = triCost - cost;
if Dita > 0
Ci = Ci + 1;
SumCi = SumCi + Dita;
else
Cr = Cr + 1;
end;
S = triS;
cost = triCost;
end;
Ca = SumCi / Ci;
T = -Ca / (log((AccValue - 1) * Cr / Ci + AccValue));

function T = calculateT(ETC,adjMatrix,tN,mN,solNum)
sol = fix(1+mN*rand(solNum,tN));
for i = 1:solNum
Fitness(i) = fitnessCal(ETC,adjMatrix,sol(i,:),tN);
end
T = max(Fitness) - min(Fitness);

% ***** the following function has no relation with the above ***** %
function machLoad = calcLoad(A,ETC,adjMatrix) % Objective 2
[tN,mN] = size(ETC);
machLoad = zeros(1,mN);
for k = 1:tN
machLoad(A(k)) = machLoad(A(k)) + ETC(k,A(k));
for h = k+1:tN
if (adjMatrix(k,h) > 0 && A(k) ~= A(h))
machLoad(A(k)) = machLoad(A(k)) + adjMatrix(k,h);
machLoad(A(h)) = machLoad(A(h)) + adjMatrix(k,h);
end
end
end

『拾』 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神經網路工具箱梯度下降法的簡化代碼

熱點內容
cgipython配置 發布:2024-05-20 09:29:06 瀏覽:865
在我的世界伺服器中隱身 發布:2024-05-20 09:07:46 瀏覽:972
加西貝拉壓縮機好嗎 發布:2024-05-20 08:58:56 瀏覽:757
eve腳本航 發布:2024-05-20 08:56:59 瀏覽:591
取票人的密碼是什麼 發布:2024-05-20 08:21:43 瀏覽:963
天貓帳號密碼應輸入什麼 發布:2024-05-20 08:16:26 瀏覽:272
plsql異常處理 發布:2024-05-20 07:54:47 瀏覽:542
dreamweaver上傳網頁 發布:2024-05-20 07:51:24 瀏覽:462
拍攝車的分鏡頭腳本 發布:2024-05-20 07:50:15 瀏覽:137
mg名爵最高配置是哪個 發布:2024-05-20 07:45:11 瀏覽:376