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

  

<强>

  

退火算法不言而喻,就是钢铁在淬炼过程中失温而成稳定态时的过程,热力学上温度(内)能越高原子态越不稳定,而温度有一个向低温区辐射降温的物理过程,当物质内能不再降低时候该物质原子态逐渐成为稳定有序态,这对我们从随机复杂问题中找出最优解有一定借鉴意义,将这个过程化为算法,具体参见其他资料。

  

  

我们所要计算的方程是f (x)=(x - 2) * (x + 3) * (x + 8) * (x - 9),是一个一元四次方程,我们称为高次方程,当然这个函数的开口是向上的,那么在一个无限长的区间内我们可能找不出最大值点,因此我们尝试在较短区间内解最小值点,我们成为最优解。

  

<>强解法1:

  

毫无疑问,数学方法多次求导基本可以解出,但是这个过程较复杂,还容易算错,我就不赘述了,读者有时间自己可以尝试解一下。

  

<>强解法二:

  

这个解法就是暴力解决了,我们这里只求解区间(-10,10)上的最优解,直接随机200个点,再除以10(这样可以得到非整数横坐标),再依此计算其纵坐标f (x),最小f (x){}一下,用列表的索引方法找出最小值对应位置就行了,然后画出图形大致瞄一瞄。

  

直接贴代码:

        进口随机   进口matplotlib。pyplot作为plt   list_x=[]   #我的范围(1):   # #打印(random.randint (0100))   #我的范围(0100):   #打印(“sss”,我)   #   # list_x.append (random.randint (0100))   因为我在范围(-100100):   list_x.append (i/10)   打印(“横坐标为:“,list_x)   print (len (list_x))   list_y=[]   在list_x x:   #打印(x)   # y=x * * x - 60 * * * 4 * x + 6   y=(x - 2) * (x + 3) * (x + 8) * (x - 9)   list_y.append (y)   打印(“纵坐标为:“,list_y)   #经验证,这里算出来的结果6.5和最优解1549都是对的   打印(“最小值为:“敏(list_y))   num=min (list_y)   打印(最优解:“,list_y.index (num)/10)   print(“第”,list_y.index (num)/演出,“个位置取得最小值”)   plt。情节(list_x list_y标签=澳擅住?   # plt。情节(x2, y2、标签=岸摺?   plt.xlabel (X) #横坐标标题   plt.ylabel (Y) #纵坐标标题   # plt。标题(“有趣的图表\ nCheck出来”,loc=罢贰?#图像标题   # plt。标题(“有趣的图表\ nCheck出来”)   plt.legend() #显示第一线和第二线(标签)的设置   plt.savefig (“C:/用户/zhengyong/桌面/1. png)   plt.show ()      

得到如下结果:

  

 Python退火算法在高次方程的应用“>,</p>
  <p>那么我们得出最优解的坐标是(6.5,-1549.6875),结果先放这里,接下来用退火算法看能不能解出。</p>
  <p>解法三:</p>
  <p>我们看一张图(解法二中的方法得出的图),然后讲讲退火算法的最核心的思想。</p>
  <p> <img src=Python退火算法在高次方程的应用