进退法的用途是为一维极值优化问题寻找到一个包含极值的单峰区间,即从一点出发,试图搜索到使函数呈现“高-低-高”的三点,从而得到一个近似的单峰区间。 凸优化问题,即目标函数为凸函数,若不是凸函数,则搜索到的单峰区间依赖初始值的选择,一般只能找到包含极值的单峰区间,而找不到包含最值的区间,即只能搜索到局部最优,而非全局最优。 晒伤的脱皮 意外的雪景 ——————五月天(如果我们不曾相遇)——————算法简介
算法适用问题
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: self.h = -self.h a = self.x1 b = self.y1 self.x1 = self.x2 self.y1 = self.y2 self.x2 = a self.y2 = b else : self.h = self.h # 3、计算y3 def cal_y3(self): self.x3 = self.x2+self.h self.y3 = self.obj_func(self.x2+self.h) plt.plot([self.x2,self.x3],[self.y2,self.y3],marker = "o",color = "blue") # 4、比较y3与y2后判断是否输出单峰区间 def get_interval(self): if self.y3 > 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)
示例运行结果
by CyrusMay 2020 04 28
与你相依的四季
苍狗又白云 身旁有了你
匆匆轮回又有何惧
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算