函数优化的二维(2D)测试函数

函数优化是一个研究领域,它寻求函数的输入,以获得函数的最大值或最小值。

有大量的优化算法,重要的是在简单易于可视化的测试函数上研究和开发优化算法的直觉。

二维函数需要两个输入值(x和y)并输出输入的单个评估值。它们是研究函数优化时最简单的测试函数类型之一。二维函数的优点在于它们可以可视化为等高线图或曲面图,显示了问题域的地形,并用点标记了最优值和域的样本。

在本教程中,您将发现标准二维函数,您可以在研究函数优化时使用它们。

用我新书《机器学习优化》为您的项目奠定基础,其中包含分步教程和所有示例的Python源代码文件。

让我们开始吧。

Two-Dimensional (2D) Test Functions for Function Optimization

函数优化的二维(2D)测试函数
图片由DomWphoto拍摄,保留部分权利。

教程概述

二维函数是接受两个输入变量并计算目标值的函数。

我们可以将两个输入变量视为图形上的两个轴,x和y。函数的每个输入是图形上的一个点,函数的结果可以看作是图形上的高度。

这使得函数可以被概念化为一个曲面,我们可以根据曲面的结构来表征函数。例如,对于导致目标函数相对输出值较大的输入点,可以认为是山丘;对于导致目标函数相对输出值较小的输入点,可以认为是山谷。

一个曲面可能有一个主要的特征或全局最优值,也可能有很多特征,优化过程很容易卡住。曲面可以是平滑的、有噪声的、凸的,以及我们在测试优化算法时可能关心的各种其他属性。

我们可以使用许多不同类型的简单二维测试函数。

然而,在函数优化领域,有一些标准的测试函数被广泛使用。我们也可以根据测试算法时希望选择的测试函数特性来选择。

我们将在本教程中探讨一些简单的二维测试函数,并按其特性进行分组,分为两类;它们是

  1. 单峰函数
    1. 单峰函数 1
    2. 单峰函数 2
    3. 单峰函数 3
  2. 多峰函数
    1. 多峰函数 1
    2. 多峰函数 2
    3. 多峰函数 3

每个函数将通过Python代码呈现,包含目标函数的实现以及通过曲面图显示的函数采样。

所有函数都表示为最小化函数,即找到导致函数最小(最小)输出的输入。任何最大化函数都可以通过在其所有输出上加一个负号来变成最小化函数。同样,任何最小化函数也可以以相同的方式变成最大化函数。

这些函数并非我所发明;它们取自文献。有关参考,请参阅进阶阅读部分。

然后,您可以选择并复制粘贴代码中的一个或多个函数,以在您自己的项目中研究或比较优化算法的行为。

单峰函数

单峰意味着函数只有一个全局最优值。

一个单峰函数可能包含或不包含凸函数。凸函数是指在线段连接域中的任意两点时,该线段始终保持在域内的函数。对于表示为等高线图或曲面图的二维函数,这意味着函数具有碗状,并且连接两点的线段保持在碗的上方或内部。

让我们看几个单峰函数的例子。

单峰函数 1

范围被限制在-5.0到5.0之间,全局最优值为[0.0, 0.0]。

运行示例将创建一个函数曲面图。

Surface Plot of Unimodal Optimization Function 1

单峰优化函数 1 的曲面图

单峰函数 2

范围被限制在-10.0到10.0之间,全局最优值为[0.0, 0.0]。

运行示例将创建一个函数曲面图。

Surface Plot of Unimodal Optimization Function 2

单峰优化函数 2 的曲面图

单峰函数 3

范围被限制在-10.0到10.0之间,全局最优值为[pi, pi]。该函数称为 Easom 函数。

运行示例将创建一个函数曲面图。

Surface Plot of Unimodal Optimization Function 3

单峰优化函数 3 的曲面图

想要开始学习优化算法吗?

立即参加我为期7天的免费电子邮件速成课程(附示例代码)。

点击注册,同时获得该课程的免费PDF电子书版本。

多峰函数

一个多峰函数是指一个具有多个“”或最优值(例如,谷)的函数。

多峰函数是非凸的。

可能有一个全局最优值和一个或多个局部或欺骗性的最优值。或者,可能存在多个全局最优值,即多个不同的输入产生相同的函数最小输出。

让我们看几个多峰函数的例子。

多峰函数 1

范围被限制在-5.0到5.0之间,全局最优值为[0.0, 0.0]。该函数称为Ackley 函数

运行示例将创建一个函数曲面图。

Surface Plot of Multimodal Optimization Function 1

多峰优化函数 1 的曲面图

多峰函数 2

范围被限制在-5.0到5.0之间,四个全局最优值位于[3.0, 2.0]、[-2.805118, 3.131312]、[-3.779310, -3.283186]、[3.584428, -1.848126]。该函数称为Himmelblau 函数

运行示例将创建一个函数曲面图。

Surface Plot of Multimodal Optimization Function 2

多峰优化函数 2 的曲面图

多峰函数 3

范围被限制在-10.0到10.0之间,该函数有四个全局最优值,分别位于[8.05502, 9.66459]、[-8.05502, 9.66459]、[8.05502, -9.66459]、[-8.05502, -9.66459]。该函数称为 Holder's table 函数。

运行示例将创建一个函数曲面图。

Surface Plot of Multimodal Optimization Function 3

多峰优化函数 3 的曲面图

进一步阅读

如果您想深入了解,本节提供了更多关于该主题的资源。

文章

总结

在本教程中,您发现了一些标准二维函数,您可以在研究函数优化时使用它们。

您是否使用了以上任何函数?
在下面的评论中告诉我您使用了哪一个。

你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。

掌握现代优化算法!

Optimization for Maching Learning

加深您对优化的理解

...只需几行python代码

在我的新电子书中探索如何实现
机器学习优化

它提供**自学教程**,并附有关于以下内容的**完整工作代码**:
梯度下降遗传算法爬山法曲线拟合RMSPropAdam,以及更多...

将现代优化算法应用于
您的机器学习项目


查看内容

9 条对二维(2D)函数优化测试函数的回复

  1. Ahgay Gabon 2021年3月26日 上午10:52 #

    感谢这个很棒的补充。但是对于优化算法,需要有一个要传递给该函数的一个解决方案。如何实现这一点?以及如何在给定算法试验中输出的解决方案时绘制这些基准?
    谢谢!

  2. Terrence 2021年5月11日 上午6:11 #

    你好,对于 Easom 函数,全局最小值的位置不应该是 [pi,pi] 吗?

  3. Farzad 2021年5月17日 晚上11:10 #

    优化二维板材切割的最佳算法是什么?
    损耗最少的算法,我想用这个算法来计算 MDF 的切割。

    • Jason Brownlee 2021年5月18日 上午6:15 #

      也许可以尝试一系列算法,然后找出最适合您目标问题的算法。

    • Adrian Tam
      Adrian Tam 2021年8月10日 上午6:53 #

      为什么不试试 CNN-LSTM 呢?

  4. ali 2021年9月3日 下午5:00 #

    在 eggholder 函数中,
    我想计算特定值的输入……
    例如,如果我传入输出为 -959.6
    它将给出输入 = [512, 404]
    请告诉我这是否可能。

    • Jason Brownlee 2021年9月4日 上午5:17 #

      您说的是反向优化,或者说是反转问题。我不认为这是可能/可行的。

留下回复

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。