最优化算法python实现篇(3)——无约束一维极值(黄金分割法)
生活随笔
收集整理的這篇文章主要介紹了
最优化算法python实现篇(3)——无约束一维极值(黄金分割法)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最優化算法python實現篇(3)——無約束一維極值(黃金分割法)
- 算法適用問題
- python實現
- 示例運行結果
算法適用問題
搜索給定單峰區間的極值問題,一般對凸優化問題比較適用。
python實現
# ******************************** 無約束一維極值——黃金分割法 ******************************** import pandas as pd import numpy as np from advance_retreat_method import advance_retreat_method class Minimize_Golden(object):"""func:為目標函數,必傳參數eps:迭代精度 默認1e-6x0:初始區間。若不傳這個參數,則會調用進退法求取一個單峰區間。from advance_retreat_method import advance_retreat_method 這個模塊在本人博客優化版塊的第一篇文章 """def __init__(self,**kargs):self.func = kargs["func"]if "x0" in kargs.keys():self.x0 = np.array(kargs["x0"])else:self.x0 = np.array(advance_retreat_method(kargs["func"]).run())if "eps" in kargs.keys():self.eps = kargs["eps"]else:self.eps = 1e-6self.r1 = self.x0[0] + 0.382*(self.x0[1]-self.x0[0])self.r2 = self.x0[0] + 0.618*(self.x0[1]-self.x0[0])def run(self):if self.func(self.r1) < self.func(self.r2):self.x0[1] = self.r2self.r2 = self.r1self.r1 = self.x0[0] + 0.382*(self.x0[1]-self.x0[0])else:self.x0[0] = self.r1self.r1 = self.r2self.r2 = self.x0[0] + 0.618*(self.x0[1]-self.x0[0])if np.abs(self.x0[0]-self.x0[1]) < self.eps :return ((self.x0[0]+self.x0[1])/2,self.func((self.x0[0]+self.x0[1])/2))else:return self.run() if __name__ == "__main__":result = Minimize_Golden(func = lambda x:x**2+2*x-150).run()print(result)示例運行結果
by CyrusMay 2020 05 01
有些人經過我身旁
住在我腦中
在我心里鉆洞
有些人變成相片
堆在角落
灰塵像雪一般冰凍
——五月天(一顆蘋果)——
總結
以上是生活随笔為你收集整理的最优化算法python实现篇(3)——无约束一维极值(黄金分割法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最优化算法python实现篇(2)—无约
- 下一篇: 深度学习(神经网络)[1]——单层感知器