himmelblau函数优化

himmelblau函数优化

概述

himmelblau函数是数学家们构造出来的一个特殊的函数,可以用来测试深度学习算法是否能够收敛到局部最小值。这个函数的表达式是:
f ( x , y ) = ( x 2 + y − 11 ) 2 + ( x + y 2 − 7 ) 2 f(x,y)=(x^2+y-11)^2+(x+y^2-7)^2 f(x,y)=(x2+y11)2+(x+y27)2
这个函数最小值为0,有四个最小值点,分别是:
f ( 3.0 , 2.0 ) = 0 f ( − 2.805118 , 3.131312 ) = 0 f ( − 3.779310 , − 3.283186 ) = 0 f ( 3.584428 , − 1.848126 ) = 0 f(3.0,2.0)=0\\f(-2.805118,3.131312)=0\\f(-3.779310,-3.283186)=0\\f(3.584428,-1.848126)=0 f(3.0,2.0)=0f(2.805118,3.131312)=0f(3.779310,3.283186)=0f(3.584428,1.848126)=0

求解过程

添加头文件

import numpy as np
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import pyplot as plt
import torch

绘制himmelblau函数的图像

# 书写himmelblau函数
def himmelblau(x):
    return (x[0] ** 2 + x[1] - 11) ** 2 + (x[0] + x[1] ** 2 - 7) ** 2


# 绘制himmelblau函数的三维图像
# 通过x,y两个张量调用meshgrid方法生成一个网格
x = np.arange(-6, 6, 0.1)
y = np.arange(-6, 6, 0.1)
X, Y = np.meshgrid(x, y)
# 网格上每一个点x,y带入himmelblau求出z
Z = himmelblau([X, Y])
# 作图
fig = plt.figure('himmelblau')
ax = fig.gca(projection='3d')
ax.plot_surface(X, Y, Z)
ax.view_init(60, -30)
ax.set_xlabel('x')
ax.set_ylabel('y')
plt.show()

得到如下图像,可以清楚的看到himmelblau函数的曲面有四个最小值点

yzF5o4.png

梯度下降

# 梯度下降法求局部最小值
# 初始坐标
x = torch.tensor([0., 4.], requires_grad=True)
# 构造优化器
optimizer = torch.optim.Adam([x], lr=1e-3)
# 进行20000轮下降
for step in range(20000):
    # 要找到himmelblau的最小值,损失函数就是himmelblau的函数值
    pred = himmelblau(x)
    # 清空各参数的梯度
    optimizer.zero_grad()
    # 反向传播重新计算各参数的梯度
    pred.backward()
    # 优化器更新参数x'=x-lr*梯度
    optimizer.step()

    if step % 2000 == 0:
        print('step {}:x={},f(x)={}'.format(step, x.tolist(), pred.item()))

当初始化为(0,0)时,陷入了(3,2)这个局部最小值
yzFheU.png
当初始化为(0,4)时,陷入了(-2.80,3.13)这个局部最小值
yzFWLT.png
由此可见初始化位置的不同将会影响最终收敛到哪个局部最小值

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MATLAB是一种功能强大的计算软件,广泛用于数值计算和科学工程领域。在优化问题方面,MATLAB提供了多种方法和函数来解决各种优化问题。下面我将介绍一些常见的26个MATLAB测试函数。 1. 自适应不可行性法(Adaptive Infeasible Method, AIM):适用于有约束的非线性优化问题。 2. 荷兰弯曲函数(Bent Cigar Function):适用于有约束的多目标优化问题。 3. 弯曲函数(Bent Function):适用于有约束的多目标优化问题。 4. 凸函数(Convex Function):适用于有约束的多目标优化问题。 5. 陷阱函数(Deceptive Trap Function):适用于有约束的多目标优化问题。 6. 高度不可变性函数(Discontinuously Varying Function):适用于有约束的多目标优化问题。 7. 椭圆函数(Ellipsoid Function):适用于有约束的多目标优化问题。 8. 不等函数(Equality Function):适用于有约束的多目标优化问题。 9. 约束立方旋转函数(Rotated Hyper-Ellipsoid Function):适用于有约束的多目标优化问题。 10. 二次函数(Quadratic Function):适用于无约束的非线性最小化问题。 11. 效用函数(Utility Function):适用于有约束的非线性优化问题。 12. Van Veldhuizen and Lamontagnes函数(Van Veldhuizen and Lamontagnes Function):适用于有约束的非线性优化问题。 13. Vanderbei函数(Vanderbei Function):适用于有约束的非线性优化问题。 14. Venter and Sobieszczanski-Sobieski函数(Venter and Sobieszczanski-Sobieski Function):适用于无约束的非线性最小化问题。 15. Vermazt and Ryu函数(Vermazt and Ryu Function):适用于有约束的非线性优化问题。 16. Villalba和Burrage函数(Villalba and Burrage Function):适用于有约束的非线性优化问题。 17. 沃尔夫函数(Wolfe Function):适用于有约束的非线性优化问题。 18. ZDT函数(ZDT Function):适用于多目标优化问题。 19. 指数函数(Exponential Function):适用于多目标优化问题。 20. G函数(G Function):适用于多目标优化问题。 21. 异形套线装箱问题函数(Irregular Strip Packing Problem Function):适用于非线性约束优化问题。 22. Kita和Wang函数(Kita and Wang Function):适用于线性规划问题。 23. Knapsack函数(Knapsack Function):适用于整数规划问题。 24. Minimal Polynomial Least Squares函数(Minimal Polynomial Least Squares Function):适用于非线性最小二乘问题。 25. Minimization of the Sum of Gap Squares函数(Minimization of the Sum of Gap Squares Function):适用于非线性最小二乘问题。 26. Reduced Space Newton функциональный класс(Reduced Space Newton Function Class):适用于非线性最小二乘问题。 以上是一些常见的MATLAB优化测试函数,通过利用MATLAB提供的优化函数和方法,可以在各种优化问题中进行高效的求解和分析。无论是单目标还是多目标问题,线性还是非线性问题,MATLAB都能提供强大的优化解决方案。 ### 回答2: MATLAB是一种强大的编程和数值计算软件,可用于解决各种优化问题。在MATLAB中,有许多用于优化问题的测试函数,以下介绍其中的26个常用的测试函数: 1. Rosenbrock函数:也称为“香蕉函数”,是一个二维函数,具有一个非凸的平滑曲面。 2. Ackley函数:具有多个局部最小值的多峰函数,通常用于测试优化算法的全局性能。 3. Griewank函数:具有大量局部最小值的多峰函数,测试算法在高度非线性问题上的效果。 4. Rastrigin函数:具有大量局部最小值的多峰函数,用于测试算法在高维问题上的效果。 5. Sphere函数:一个简单的凸函数,测试算法在凸问题上的效果。 6. Michalewicz函数:一个具有多个极值点的多峰函数,测试算法的局部搜索能力。 7. Himmelblau函数:一个有四个局部最小值的非凸函数,测试算法在非线性问题上的效果。 8. Booth函数:一个有一个全局最小值的非凸函数,测试算法在计算复杂度方面的效果。 9. Rastrigin-Rosenbrock函数:将Rastrigin函数和Rosenbrock函数组合而成的函数,测试算法的综合性能。 10. Bukin函数:一个具有一个全局最小值的非凸函数,测试算法对于局部搜索和全局搜索的平衡性。 其他测试函数包括Powell、Goldstein-Price、Easom、Shekel、Styblinski-Tang、Levy等函数,它们都具有不同的特点和优化问题。在MATLAB中,可以使用优化工具箱或自己编写代码来求解这些测试函数的极值点或最小值。 总之,MATLAB提供了多种测试函数,用于评估优化算法在不同类型问题上的表现。这些测试函数涵盖了各种情况,从简单的凸函数到复杂的非凸函数,可以帮助开发者更好地了解算法的性能和局限性,并进行算法的优化和改进。 ### 回答3: MATLAB 是一种强大的数值计算和数据可视化软件,它提供了丰富的工具和函数来解决各种优化问题。在优化问题中,我们需要找到函数的最小值或最大值,以满足一定的约束条件。 MATLAB 中提供了许多用于优化问题的函数和工具包,其中包括 26 个用于测试的函数。这些函数通常用于评估不同优化算法的性能,并与已知的最优解进行比较。 这些测试函数包括各种类型的函数,例如单峰函数、多峰函数、凸函数和非凸函数。它们的形式各不相同,有些函数具有多个局部最优解,而其他函数只有一个全局最优解。 通过使用 MATLAB 的优化工具箱,我们可以选择适当的测试函数,并使用各种优化算法来求解最优解。这些算法可以是经典的最优化算法,如梯度下降和牛顿法,也可以是进化算法,如遗传算法和粒子群优化。 为了解决这些优化问题,我们可以使用 MATLAB 中的优化函数,如fminsearch、fminunc和fmincon等。这些函数可以根据给定的测试函数和约束条件,对目标函数进行优化,并返回找到的最优解。 总之,MATLAB 提供了丰富的优化工具和测试函数,可以帮助我们解决各种优化问题。无论是单变量的优化问题还是多变量的优化问题,我们都可以利用 MATLAB 的功能来寻找最优解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值