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

專注的阿熊發表於2020-05-07

退火演算法就是鋼鐵在淬鍊過程中失溫而成穩定態時的過程,熱力學上溫度(內能)越高原子態越不穩定。這篇文章主要介紹了Python退火演算法在高次方程的應用,需要的朋友可以參考下

文章目錄

一,簡介

二,計算方程

三,總結

一,簡介

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

二,計算方程

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

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

解法二:這個解法就是暴力解決了,我們這裡只求解區間[-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(Swift Code

plt.legend()  #顯示Fisrt Line和Second Line(label)的設定

plt.savefig('C:/Users/zhengyong/Desktop/1.png')

plt.show()

得到如下結果:

那麼我們得出最優解的座標是(6.5,-1549.6875)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2690416/,如需轉載,請註明出處,否則將追究法律責任。

相關文章