最优化算法python实现篇(1)——进退法

Irina ·
更新时间:2024-11-13
· 742 次阅读

最优化算法python实现篇(1)——进退法算法简介算法适用问题python实现示例运行结果 算法简介

进退法的用途是为一维极值优化问题寻找到一个包含极值的单峰区间,即从一点出发,试图搜索到使函数呈现“高-低-高”的三点,从而得到一个近似的单峰区间。

算法适用问题

凸优化问题,即目标函数为凸函数,若不是凸函数,则搜索到的单峰区间依赖初始值的选择,一般只能找到包含极值的单峰区间,而找不到包含最值的区间,即只能搜索到局部最优,而非全局最优。

python实现 import matplotlib.pyplot as plt plt.figure() class advance_retreat_method(object): """ obj_func 为需要寻找单峰区间的目标函数 x0为给定的初始点 h0搜寻步长 """ def __init__(self,obj_func,x0 = 0,h0 = 0.1): self.h = h0 self.obj_func = obj_func self.x1 = x0 self.x2 = x0 + h0 self.x3 = 0 self.y1 = 0 self.y2 = 0 self.y3 = 0 # 1、计算函数值 def func_value(self): self.y1 = self.obj_func(self.x1) self.y2 = self.obj_func(self.x2) plt.plot([self.x1,self.x2],[self.y1,self.y2],marker = "*",color = "red",markersize = 15) # 2、比较函数值大小 def compare_value(self): if self.y1 self.y2: if self.x1 < self.x3: return [self.x1,self.x3] else: return [self.x3,self.x1] else: self.x1 = self.x2 self.y1 = self.y2 self.x2 = self.x3 self.y2 = self.y3 self.cal_y3() return self.get_interval() # 5、统筹运行 def run(self): # 1、计算y1和y2 self.func_value() # 2、比较函数值大小 self.compare_value() # 3、计算y3 self.cal_y3() # 4 比较y3与y2后判断是否输出单峰区间 result = self.get_interval() return result if __name__ == "__main__": sample = lambda x:x**2 a = advance_retreat_method(sample,x0 = 0.5).run() print(a) 示例运行结果

原创文章 5获赞 39访问量 2285 关注 私信 展开阅读全文
作者:Cyrus_May



最优化 优化 Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号