国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python退火算法在高次方程的應用

2020-02-15 22:32:33
字體:
來源:轉載
供稿:網友

一,簡介

退火算法不言而喻,就是鋼鐵在淬煉過程中失溫而成穩定態時的過程,熱力學上溫度(內能)越高原子態越不穩定,而溫度有一個向低溫區輻射降溫的物理過程,當物質內能不再降低時候該物質原子態逐漸成為穩定有序態,這對我們從隨機復雜問題中找出最優解有一定借鑒意義,將這個過程化為算法,具體參見其他資料。

二,計算方程

我們所要計算的方程是f(x) = (x - 2) * (x + 3) * (x + 8) * (x - 9),是一個一元四次方程,我們稱為高次方程,當然這個函數的開口是向上的,那么在一個無限長的區間內我們可能找不出最大值點,因此我們嘗試在較短區間內解最小值點,我們成為最優解。

解法1:

毫無疑問,數學方法多次求導基本可以解出,但是這個過程較復雜,還容易算錯,我就不贅述了,讀者有時間自己可以嘗試解一下。

解法二:

這個解法就是暴力解決了,我們這里只求解區間[-10,10]上的最優解,直接隨機200個點,再除以10(這樣可以得到非整數橫坐標),再依此計算其縱坐標f(x),min{f(x)}一下,用list的index方法找出最小值對應位置就行了,然后畫出圖形大致瞄一瞄。

直接貼代碼:

 import random import matplotlib.pyplot as plt list_x = [] # for i in range(1): #   #print(random.randint(0,100)) #   for i in range(0,100): #     print("sss",i) # #   list_x.append(random.randint(0,100)) for i in range(-100,100):   list_x.append(i/10) print("橫坐標為:",list_x) print(len(list_x)) list_y = [] for x in list_x:   # print(x)   #y = x*x*x - 60*x*x -4*x +6   y = (x - 2) * (x + 3) * (x + 8) * (x - 9)   list_y.append(y) print("縱坐標為:",list_y) #經驗證,這里算出來的結果6.5和最優解1549都是對的 print("最小值為:",min(list_y)) num = min(list_y) print("最優解:",list_y.index(num)/10) print("第",list_y.index(num)/10-10,"個位置取得最小值") plt.plot(list_x, list_y, label='NM') #plt.plot(x2, y2, label='Second Line') plt.xlabel('X') #橫坐標標題 plt.ylabel('Y') #縱坐標標題 #plt.title('Interesting Graph/nCheck it out',loc="right")  #圖像標題 #plt.title('Interesting Graph/nCheck it out') plt.legend()  #顯示Fisrt Line和Second Line(label)的設置 plt.savefig('C:/Users/zhengyong/Desktop/1.png') plt.show()

得到如下結果:

 

那么我們得出最優解的坐標是(6.5,-1549.6875),結果先放這里,接下來用退火算法看能不能解出。

解法三:

我們看一張圖(解法二中的方法得出的圖),然后講講退火算法的最核心的思想。

 

首先,先隨機一個[-10.10]之間的隨機解,作為初始解空間,比方說隨機了一個位于[-2.5.2.5]中最高的那個點就是點1(橫坐標為x1),他有對于的縱坐標的值y1,這時候我們把這個點的橫坐標隨機加或者減去一個值(注意這個值的大小很重要,我們先叫他隨機移動值),加或者減后得到新的橫坐標的值x2,再算出這個橫坐標的對應縱坐標(y2),對比之前的縱坐標的大小,這里設置

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 高淳县| 麦盖提县| 西青区| 黄浦区| 河东区| 玉环县| 葫芦岛市| 通渭县| 双峰县| 宁夏| 宜宾市| 瑞昌市| 潢川县| 新化县| 望都县| 额敏县| 佛学| 柯坪县| 威远县| 颍上县| 博湖县| 西城区| 昆山市| 遂昌县| 渝北区| 张家口市| 周至县| 新竹市| 临洮县| 资中县| 金沙县| 隆子县| 顺平县| 永顺县| 杭锦后旗| 太保市| 枣强县| 昌平区| 台南市| 康保县| 永平县|