最优化算法python实现篇(1)——进退法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了最优化算法python实现篇(1)——进退法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1999字,纯文字阅读大概需要3分钟。
内容图文
![最优化算法python实现篇(1)——进退法](/upload/InfoBanner/zyjiaocheng/634/09113ef62b434c9fb6b2b5de8f4dd091.jpg)
最优化算法python实现篇(1)——进退法
算法简介
进退法的用途是为一维极值优化问题寻找到一个包含极值的单峰区间,即从一点出发,试图搜索到使函数呈现“高-低-高”的三点,从而得到一个近似的单峰区间。
算法适用问题
凸优化问题,即目标函数为凸函数,若不是凸函数,则搜索到的单峰区间依赖初始值的选择,一般只能找到包含极值的单峰区间,而找不到包含最值的区间,即只能搜索到局部最优,而非全局最优。
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
晒伤的脱皮 意外的雪景
与你相依的四季
苍狗又白云 身旁有了你
匆匆轮回又有何惧
——————五月天(如果我们不曾相遇)——————
内容总结
以上是互联网集市为您收集整理的最优化算法python实现篇(1)——进退法全部内容,希望文章能够帮你解决最优化算法python实现篇(1)——进退法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。