最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python&Matla實(shí)現(xiàn)模擬退火法的示例代碼

 更新時間:2022年03月06日 11:12:19   作者:是夢吧,是你吧!  
模擬退火和蒙特卡洛實(shí)驗(yàn)一樣,本文主要介紹了Python&Matla實(shí)現(xiàn)模擬退火法的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

1 Python實(shí)現(xiàn)

1.1 源碼實(shí)現(xiàn)

我在前面已經(jīng)給出了模擬退火法的完整知識點(diǎn)和源碼實(shí)現(xiàn):智能優(yōu)化算法—蟻群算法(Python實(shí)現(xiàn))

模擬退火蒙特卡洛實(shí)驗(yàn)一樣,全局隨機(jī),由于沒有自適應(yīng)的過程(例如向最優(yōu)靠近、權(quán)重梯度下降等),對于復(fù)雜函數(shù)尋優(yōu),很難會找到最優(yōu)解,都是近似最優(yōu)解;然而像蝙蝠算法粒子群算法等有向最優(yōu)逼近且通過最優(yōu)最差調(diào)整參數(shù)的步驟,雖然對于下圖函數(shù)易陷入局部最優(yōu),但是尋優(yōu)精度相對較高。如果理解這段話應(yīng)該就明白了為什么神經(jīng)網(wǎng)絡(luò)訓(xùn)練前如果初步尋優(yōu)一組較好的網(wǎng)絡(luò)參數(shù),會使訓(xùn)練效果提高很多,也會更快達(dá)到誤差精度。

1.2 sko.SA 實(shí)現(xiàn)

#===========1導(dǎo)包================
import matplotlib.pyplot as plt
import pandas as pd
from sko.SA import SA
 
#============2定義問題===============
fun = lambda x: x[0] ** 2 + (x[1] - 0.05) ** 2 + x[2] ** 2
 
#=========3運(yùn)行模擬退火算法===========
sa = SA(func=fun, x0=[1, 1, 1], T_max=1, T_min=1e-9, L=300, max_stay_counter=150)
best_x, best_y = sa.run()
print('best_x:', best_x, 'best_y', best_y)
 
#=======4畫出結(jié)果=======
plt.plot(pd.DataFrame(sa.best_y_history).cummin(axis=0))
plt.show()
 
 
 
 
#scikit-opt 還提供了三種模擬退火流派: Fast, Boltzmann, Cauchy.
 
#===========1.1 Fast Simulated Annealing=====================
from sko.SA import SAFast
 
sa_fast = SAFast(func=demo_func, x0=[1, 1, 1], T_max=1, T_min=1e-9, q=0.99, L=300, max_stay_counter=150)
sa_fast.run()
print('Fast Simulated Annealing: best_x is ', sa_fast.best_x, 'best_y is ', sa_fast.best_y)
 
#===========1.2 Fast Simulated Annealing with bounds=====================
from sko.SA import SAFast
 
sa_fast = SAFast(func=demo_func, x0=[1, 1, 1], T_max=1, T_min=1e-9, q=0.99, L=300, max_stay_counter=150,
                 lb=[-1, 1, -1], ub=[2, 3, 4])
sa_fast.run()
print('Fast Simulated Annealing with bounds: best_x is ', sa_fast.best_x, 'best_y is ', sa_fast.best_y)
 
#===========2.1 Boltzmann Simulated Annealing====================
from sko.SA import SABoltzmann
 
sa_boltzmann = SABoltzmann(func=demo_func, x0=[1, 1, 1], T_max=1, T_min=1e-9, q=0.99, L=300, max_stay_counter=150)
sa_boltzmann.run()
print('Boltzmann Simulated Annealing: best_x is ', sa_boltzmann.best_x, 'best_y is ', sa_fast.best_y)
 
#===========2.2 Boltzmann Simulated Annealing with bounds====================
from sko.SA import SABoltzmann
 
sa_boltzmann = SABoltzmann(func=demo_func, x0=[1, 1, 1], T_max=1, T_min=1e-9, q=0.99, L=300, max_stay_counter=150,
                           lb=-1, ub=[2, 3, 4])
sa_boltzmann.run()
print('Boltzmann Simulated Annealing with bounds: best_x is ', sa_boltzmann.best_x, 'best_y is ', sa_fast.best_y)
 
#==================3.1 Cauchy Simulated Annealing==================
from sko.SA import SACauchy
 
sa_cauchy = SACauchy(func=demo_func, x0=[1, 1, 1], T_max=1, T_min=1e-9, q=0.99, L=300, max_stay_counter=150)
sa_cauchy.run()
print('Cauchy Simulated Annealing: best_x is ', sa_cauchy.best_x, 'best_y is ', sa_cauchy.best_y)
 
#==================3.2 Cauchy Simulated Annealing with bounds==================
from sko.SA import SACauchy
 
sa_cauchy = SACauchy(func=demo_func, x0=[1, 1, 1], T_max=1, T_min=1e-9, q=0.99, L=300, max_stay_counter=150,
                     lb=[-1, 1, -1], ub=[2, 3, 4])
sa_cauchy.run()
print('Cauchy Simulated Annealing with bounds: best_x is ', sa_cauchy.best_x, 'best_y is ', sa_cauchy.best_y)

2 Matlab實(shí)現(xiàn) 

2.1 模擬退火法

clear
clc
T=1000; %初始化溫度值
T_min=1; %設(shè)置溫度下界
alpha=0.99; %溫度的下降率
num=1000; %顆??倲?shù)
n=2; %自變量個數(shù)
sub=[-5,-5]; %自變量下限
up=[5,5]; %自變量上限
tu
for i=1:num
for j=1:n
x(i,j)=(up(j)-sub(j))*rand+sub(j);
    end
    fx(i,1)=fun(x(i,1),x(i,2));
end
 
%以最小化為例
[bestf,a]=min(fx);
bestx=x(a,:);
trace(1)=bestf;
while(T>T_min)
for i=1:num
for j=1:n
            xx(i,j)=(up(j)-sub(j))*rand+sub(j);
        end
        ff(i,1)=fun(xx(i,1),xx(i,2));
        delta=ff(i,1)-fx(i,1);
if delta<0
            fx(i,1)=ff(i,1);
x(i,:)=xx(i,:);
else
            P=exp(-delta/T);
if P>rand
                fx(i,1)=ff(i,1);
x(i,:)=xx(i,:);
            end
        end  
    end
if min(fx)<bestf
        [bestf,a]=min(fx);
        bestx=x(a,:);
    end
    trace=[trace;bestf];
    T=T*alpha;
end
disp('最優(yōu)解為:')
disp(bestx)
disp('最優(yōu)值為:')
disp(bestf)
hold on
plot3(bestx(1),bestx(2),bestf,'ro','LineWidth',5)
figure
plot(trace)
xlabel('迭代次數(shù)')
ylabel('函數(shù)值')
title('模擬退火算法')
legend('最優(yōu)值')
function z=fun(x,y)
z = x.^2 + y.^2 - 10*cos(2*pi*x) - 10*cos(2*pi*y) + 20;
function tu
[x,y] = meshgrid(-5:0.1:5,-5:0.1:5);
z = x.^2 + y.^2 - 10*cos(2*pi*x) - 10*cos(2*pi*y) + 20;
figure
mesh(x,y,z)%建一個網(wǎng)格圖,該網(wǎng)格圖為三維曲面,有實(shí)色邊顏色,無面顏色
hold on
xlabel('x')
ylabel('y')
zlabel('z')
title('z =  x^2 + y^2 - 10*cos(2*pi*x) - 10*cos(2*pi*y) + 20')

這里有一個待嘗試的想法,先用蒙特卡洛/模擬退火迭代幾次全局去找最優(yōu)的區(qū)域,再通過其他有向最優(yōu)逼近過程的算法再進(jìn)一步尋優(yōu),或許會很大程度降低產(chǎn)生局部最優(yōu)解的概率。

下面是模擬退火和蒙特卡洛對上述函數(shù)尋優(yōu)的程序,迭代次數(shù)已設(shè)為一致,可以思考下兩種程序?qū)懛ǖ男?、共同點(diǎn)、缺點(diǎn)。理論研究講究結(jié)果好,實(shí)際應(yīng)用既要保證結(jié)果好也要保證程序運(yùn)算效率。

2.2 蒙特卡諾法 

clear
clc
num=689000; %顆??倲?shù)
n=2; %自變量個數(shù)
sub=[-5,-5]; %自變量下限
up=[5,5]; %自變量上限
tu
x=zeros(num,n);
fx=zeros(num,1);
for i=1:num
for j=1:n
x(i,j)=(up(j)-sub(j))*rand+sub(j);
    end
    fx(i,1)=fun(x(i,1),x(i,2));
end
 
[bestf,a]=min(fx);
bestx=x(a,:);
 
disp('最優(yōu)解為:')
disp(bestx)
disp('最優(yōu)值為:')
disp(bestf)
hold on
plot3(bestx(1),bestx(2),bestf,'ro','LineWidth',5)

效果確實(shí)值得商榷。

到此這篇關(guān)于Python&Matla實(shí)現(xiàn)模擬退火法的示例代碼的文章就介紹到這了,更多相關(guān)Python&Matla 模擬退火法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • django框架cookie和session用法實(shí)例詳解

    django框架cookie和session用法實(shí)例詳解

    這篇文章主要介紹了django框架cookie和session用法,結(jié)合實(shí)例形式詳細(xì)分析了Django框架cookie和session的功能、原理、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-12-12
  • Python中字典的setdefault()方法教程

    Python中字典的setdefault()方法教程

    在學(xué)習(xí)python字典操作方法時,感覺setdefault()方法,比字典的其它基本操作方法更難理解的同學(xué)比較多,所以想著總結(jié)以下,下面這篇文章主要給大家介紹了Python中字典的setdefault()方法,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • jetson上安裝pycharm的詳細(xì)過程

    jetson上安裝pycharm的詳細(xì)過程

    Pycharm是一個非常優(yōu)秀的代碼編輯、調(diào)試,開發(fā)軟件,我平時在Windows系統(tǒng)學(xué)習(xí)編程時也比較喜歡使用Pycharm,這篇文章主要介紹了jetson上安裝pycharm的過程,需要的朋友可以參考下
    2022-07-07
  • Python+matplotlib實(shí)現(xiàn)量場圖的繪制

    Python+matplotlib實(shí)現(xiàn)量場圖的繪制

    matplotlib是基于Python語言的開源項(xiàng)目,pyplot提供一系列繪制2D圖形的方法。本文將帶大家學(xué)習(xí)matplotlib.pyplot.quiver()相關(guān)方法屬性并通過其繪制量場圖
    2021-12-12
  • Selenium?4.2.0?標(biāo)簽定位8種方法詳解

    Selenium?4.2.0?標(biāo)簽定位8種方法詳解

    這篇文章主要介紹了Selenium?4.2.0?標(biāo)簽定位8種方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • Python自動化辦公之手機(jī)號提取

    Python自動化辦公之手機(jī)號提取

    這篇文章主要介紹了如何利用Python語言編寫一個手機(jī)號提取器,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Python有一定的幫助,需要的可以參考一下
    2022-06-06
  • 序列化Python對象的方法

    序列化Python對象的方法

    這篇文章主要介紹了序列化Python對象的方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08
  • Python列表推導(dǎo)式詳情

    Python列表推導(dǎo)式詳情

    這篇文章主要介紹了Python列表推導(dǎo)式,列表生成式即List Comprehensions,是Python內(nèi)置的非常簡單卻強(qiáng)大的可以用來創(chuàng)建list的生成式,下面來看看詳細(xì)內(nèi)容吧
    2021-11-11
  • 推薦8款常用的Python GUI圖形界面開發(fā)框架

    推薦8款常用的Python GUI圖形界面開發(fā)框架

    這篇文章主要介紹了推薦8款常用的Python GUI圖形界面開發(fā)框架,需要的朋友可以參考下
    2020-02-02
  • keras中的卷積層&池化層的用法

    keras中的卷積層&池化層的用法

    這篇文章主要介紹了keras中的卷積層&池化層的用法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05

最新評論

华阴市| 绥宁县| 霸州市| 军事| 鹿邑县| 开鲁县| 隆尧县| 隆尧县| 保靖县| 上杭县| 柳河县| 桑植县| 大兴区| 清水县| 拜城县| 永康市| 会昌县| 德清县| 嘉黎县| 镇雄县| 宜丰县| 昂仁县| 梅河口市| 会理县| 沽源县| 石棉县| 庆云县| 雅安市| 平凉市| 宁海县| 鱼台县| 随州市| 易门县| 罗江县| 弥渡县| 徐闻县| 宁南县| 郯城县| 德昌县| 永春县| 五大连池市|