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