最优化之迭代寻找法总结
【摘要】 最优化之迭代寻找法
最优化之迭代寻找法总结
简答题目:
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))
可以发现成功迭代找到精度内的最优值。
直接上代码:
#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)
迭代开始:
迭代后期:
由于使用固定的学习率,如果设置不好容易在(1,1)点一直震荡,所以这里小康使用的是带冲量的最速下降方法。其中chongx1和chongx2为冲量变量。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)