最优化之迭代寻找法总结

举报
小康不会AI 发表于 2022/10/06 19:03:30 2022/10/06
【摘要】 最优化之迭代寻找法

最优化之迭代寻找法总结

简答题目:

image.png

x_down = float(input('请输入f(x)的下限:'))
x_up = float(input('请输入f(x)的上限:'))
x_e = float(input('精度要求:'))
x1 = x_down + 0.382 * (x_up - x_down)
x2 = x_down + 0.618 * (x_up - x_down)
f1 = 3*x1**2 - 21*x1-1
f2 = 3*x2**2 - 21*x2-1
# 精度要求
while abs(f1 - f2) > x_e:
    if f1 > f2:
        x_down = x1
        x_up = x_up
    if f1 < f2:
        x_down = x_down
        x_up = x2
    if f1 == f2:
        x_down = x1
        x_up = x2
    x1 = x_down + 0.382 * (x_up - x_down)
    x2 = x_down + 0.618 * (x_up - x_down)
    f1 = 3 * x1 ** 2 - 21 * x1 - 1
    f2 = 3 * x2 ** 2 - 21 * x2 - 1
    print('重新定义的上限:', round(x_down, 6), '重新定义的上限:', round(x_up, 6), end='\t')
    print('重新定义的x1:', round(x1, 6), '重新定义的x2:', round(x2, 6), end='\t')
    print('f1的值为:', round(f1, 6), 'f2的值为:', round(f2, 6), end='\t')
    print()

x = (x1 + x2) / 2
print('最优解:', round(x, 6), 'f = 3x^2 - 21x -1:', round(3*x1**2 - 21*x1-1, 6))

image.png
可以发现成功迭代找到精度内的最优值。


image.png


直接上代码:

#fx=(x1-1)^2+(x2-1)^2
#初始化x1,x2
x1=0
x2=0
chongx1=chongx2=0
learnrate=0.5
for i in range(260):
    chongx1 =chongx1*0.9+ learnrate * (2 * x1 - 2)*0.1
    chongx2 = chongx2*0.9 + learnrate * (2 * x1 - 2)*0.1
    x1 = x1 - chongx1
    x2 = x2 - chongx2
    print(x1,x2)

迭代开始:
image.png
迭代后期:
image.png
由于使用固定的学习率,如果设置不好容易在(1,1)点一直震荡,所以这里小康使用的是带冲量的最速下降方法。其中chongx1和chongx2为冲量变量。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。