手把手教你模擬退火算法

2021-01-19 津威的雜貨鋪

程式語言我選擇的是MATLAB,代碼如下:

%% 開始clcclearclose all%% 參數準備a=0.95;                                %溫度衰減速度times=1000;                            %循環次數k=[34 32 56 67 54 32 45 56 46 70];     %物品價值d=[8 12 24 16 6 9 35 21 18 19];        %物品重量restriction=50;                        %背包能夠承受的最大重量t0=97;tf=3;t=t0;                       %溫度設置num=length(k);                         %物品數量
sol_new=round(rand(1,num)); %隨機生成初始解E_current=inf;E_best=inf; %E_current是當前解對應的目標函數,E_best是最優解,E_new是新解的目標函數值%% 模擬退火while t>tf
for i=1:times sol_new=chage(sol_new,num,d,restriction); end
%計算價值 E_new=sol_new*(-k'); if E_new<E_current E_current=E_new; sol_current=sol_new;
if E_new<E_best E_best=E_new; sol_best=sol_new; end
else
if Metropolis(E_new,E_current,t) E_current=E_new; sol_current=sol_new; else sol_new=sol_current; end
end
t=t*a; %溫度衰減
end%% 輸出disp('最優解為')sol_bestdisp('物品總價值為')-E_bestdisp('背包中物品總重量')sol_best*d'

function [sol_new] = chage(sol_new,num,d,restriction)%對x進行隨機擾動並使其滿足約束條件   %產生隨機擾動        temp1=ceil(rand*num);        sol_new(1,temp1)=~sol_new(1,temp1);
%檢查是否滿足約束 while (1) s=(sol_new*d'>restriction); if s %如果不滿足約束隨機放棄一個物品
temp2=find(sol_new==1); temp3=ceil(rand*length(temp2)); sol_new(temp2(temp3))=~sol_new(temp2(temp3)); else break end endend

function [p] = Metropolis(E_new,E_current,t0)%Metropolis準則f=exp( ( E_new-E_current )./t0 );a=rand;if a>=f    p=1;else     p=0;end


初次嘗試,若有不足,望能指正

相關焦點

  • 模擬退火算法
    模擬退火算法作為一種通用的隨機搜索算法,現已廣泛用於VLSI設計、圖像識別和神經網計算機的研究。模擬退火算法的應用如下:1、模擬退火算法在VLSI設計中的應用利用模擬退火算法進行VLSI的最優設計,是目前模擬退火算法最成功的應用實例之一。用模擬退火算法幾乎可以很好地完成所有優化的VLSI設計工作。如全局布線、布板、布局和邏輯最小化等等。
  • 模擬退火算法詳解
    2.模擬退火算法機制模擬退火算法(Simulated Annealing,SA)最早的思想是由N. Metropolis等人於1953年提出。1983年,S. Kirkpatrick等成功地將退火思想引入到組合優化領域。
  • 經典算法—模擬退火算法
  • 模擬退火算法簡介
    模擬退火其實也是一種貪心算法,但是它的搜索過程引入了隨機因素。模擬退火算法以一定的概率來接受一個比當前解要差的解,因此有可能會跳出這個局部的最優解,達到全局的最優解。以上圖為例,模擬退火算法在搜索到局部最優解B後,會以一定的概率接受到C的移動。也許經過幾次這樣的不是局部最優的移動後會到達D點,於是就跳出了局部最大值A。
  • 大白話解析模擬退火算法
    模擬退火(SA,Simulated Annealing)思想爬山法是完完全全的貪心法,每次都鼠目寸光的選擇一個當前最優解,因此只能搜索到局部的最優值。模擬退火其實也是一種貪心算法,但是它的搜索過程引入了隨機因素。模擬退火算法以一定的概率來接受一個比當前解要差的解,因此有可能會跳出這個局部的最優解,達到全局的最優解。
  • 圖解退火算法(模擬退火算法內核講解)
    回顧上兩期,我們已經了解了遺傳算法和粒子群算法,這都是常用的智能優化算法,所謂智能優化算法又稱現代啟發式算法,是一種具有全局優化性能
  • MATLAB優化算法實例——模擬退火算法
    ❞1 模擬退火算法基本理論上期文章介紹MATLAB算法——遺傳算法,本章介紹模擬退火法及實例應用。MATLAB優化算法實例——遺傳算法1.1 簡介模擬退火算法(Simulated Annealing Algorithm)是一種隨機類全局優化方法。它來源於熱力學中固體物質的退火冷卻過程。
  • 優化算法系列之模擬退火算法(1)
    模擬退火算法是所謂三大非經典算法之一,它脫胎於自然界的物理過程,與優化問題相結合。在百度百科上對於模擬退火算法的定義是:模擬退火算法來源於固體退火原理,是一種基於概率的算法,將固體加溫至充分高,再讓其徐徐冷卻,加溫時,固體內部粒子隨溫升變為無序狀,內能增大,而徐徐冷卻時粒子漸趨有序,在每個溫度都達到平衡態,最後在常溫時達到基態,內能減為最小。
  • 深度學習經典算法 | 模擬退火算法詳解
    模擬退火算法基本思想現代的模擬退火算法形成於20世紀80年代初,其思想源於固體的退火過程,即將固體加熱至足夠高的溫度,再緩慢冷卻。升溫時,固體內部粒子隨溫度升高變為無序狀,內能增大,而緩慢冷卻時粒子又逐漸趨於有序,從理論上講,如果冷卻過程足夠緩慢,那麼冷卻中任一溫度時固體都能達到熱平衡,而冷卻到低溫時將達到這一低溫下的內能最小狀態。
  • 模擬退火算法(附代碼)
    上一篇我們講了旅行商問題及遺傳算法來解決此類問題:遺傳算法(附代碼)今天介紹另外一種解決此類NP問題的方法是模擬退火算法(
  • 模擬退火遺傳算法在多用戶檢測技術中的應用
    它模擬自然界中的生命進化機制,在人工系統中實現特定目標的優化。實踐證明,遺傳算法對於NP問題非常有效[8],但是它容易陷入局部最優,即全局搜索能力弱。1.2 模擬退火算法模擬退火算法(SA)是基於金屬退火的機理而建立起來的一種隨機算法。
  • 美賽常用六種算法第二期——模擬退火算法
    模擬退火算法包含兩個部分即Metropolis算法和退火過程。Metropolis算法就是如何在局部最優解的情況下讓其跳出來,是退火的基礎。1953年Metropolis提出重要性採樣方法,即以概率來接受新狀態,而不是使用完全確定的規則,稱為Metropolis準則,計算量較低。
  • 模擬退火(Simulated Annealing, SA)算法簡介與MATLAB實現
    模擬退火算法(Simulated Annealing,簡稱SA)的思想最早是由Metropolis等提出的。其出發點是基於物理中固體物質的退火過程與一般的組合優化問題之間的相似性。模擬退火法是一種通用的優化算法,其物理退火過程由以下三部分組成:加溫過程。其目的是增強粒子的熱運動,使其偏離平衡位置。
  • 基於模擬退火算法的地面電視頻率指配方法研究
    美國聯邦通信委員會(FCC)於1996年著手研究全境的地面數位電視覆蓋網頻率規劃問題,通過使用"模擬退火"算法和開發相應的規劃軟體,完成了美國的模數過渡方案。該算法的應用降低了美國模擬向數字過渡期間的轉換成本,提高了頻率資源的使用效率,並帶來了巨大的商業效益。  我國地面電視業務可用的頻道數量共有48個,指配給了數量眾多的模擬發射機,承擔著公共服務和各地節目的播出任務。
  • 基於模擬退火法的旅行商問題
    二、模擬退火算法簡介1、固體退火過程模擬退火算法來源於固體退火原理,將固體加溫至充分高,再讓其徐徐冷卻,加溫時,固體內部粒子隨著溫度升高變為無序狀態,內能增大,而慢慢冷卻時粒子漸趨有序,在每個溫度都達到平衡態,最後在常溫時達到基態,此時內能減為最小。
  • 基於模擬退火神經網絡的I型FIR數字濾波器設計
    摘要:提出一種基於模擬退火神經網絡設計FIR數字濾波器的方法,是對用神經網絡設計方法的一種改進。由於線性相位FIR數字濾波器的幅頻特性是有限項的傅立葉級數,因此構造了一個三層餘弦基神經網絡模型,並用模擬退火算法進行了優化,然後給出了高階濾波器優化設計的實例。仿真表明經優化設計後的濾波器具有更好的性能和更穩定的效果。
  • 自我代碼提升之啟發式算法(番外篇)
    在這種背景下,啟發式算法應運而生,其目標在於,在有限的時間和資源下(可接受的範圍內),尋找出能夠解決問題的可行解,可行解和通常不是全局最優解,但可能是一個較為優秀的局部最優解。啟發式算法主要是基於直觀和經驗來構造,目前主要的幾種方法,如遺傳算法、模擬退火、蟻群算法等,都是基於仿生學而發明的。本期所要介紹的兩種啟發式算法,分別是遺傳算法(GA)和模擬退火算法(SA)。
  • 數學建模競賽前必須熟練掌握的十個算法
    有一個例子可以使你比較直觀地了解蒙特卡洛方法:假設我們要計算一個不規則圖形的面積,那麼圖形的不規則程度和分析性計算(比如,積分)的複雜程度是成正比的。蒙特卡洛方法是怎麼計算的呢?假想你有一袋豆子,把豆子均勻地朝這個圖形上撒,然後數這個圖形之中有多少顆豆子,這個豆子的數目就是圖形的面積。當你的豆子越小,撒的越多的時候,結果就越精確。
  • 淺析基於優化算法的能量管理控制策略(二)
    優化算法可分為全局優化和實時優化,受算法本身的限制以及採樣時間、模型精度、參數定義等因素的影響,目前這種區分尚不明顯。,NN)滑模控制(Sliding ModeControl,SMC)無導數優化算法——模擬退火(Simulated Annealing,SA)無導數優化算法——遺傳算法(Genetic Algorithm,GA)無導數優化算法——粒子群算法(Particle Swarm Optimization,PSO)無導數優化算法——DIRECT
  • 改進遺傳算法的支持向量機特徵選擇解決方案
    傳統的遺傳算法存在早熟收斂、非全局收斂以及後期收斂速度慢的缺點,為此本文提出了一種能夠在進化過程中自適應調節變異率,以及利用模擬退火防止早熟的改進遺傳算法,同時該算法利用敏感度信息可以有效地控制遺傳操作。