国产探花免费观看_亚洲丰满少妇自慰呻吟_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),對比之前的縱坐標的大小,這里設置

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 远安县| 芒康县| 班玛县| 洪泽县| 和林格尔县| 仁化县| 昌吉市| 古丈县| 济阳县| 兴和县| 阳春市| 额济纳旗| 甘德县| 延吉市| 临海市| 大庆市| 三台县| 甘德县| 玛多县| 汉阴县| 中方县| 阳山县| 文安县| 临清市| 麻栗坡县| 盐城市| 虹口区| 类乌齐县| 浠水县| 贡觉县| 马尔康县| 玛沁县| 册亨县| 伊川县| 化州市| 如皋市| 巴南区| 永州市| 龙州县| 绵阳市| 仁化县|