【翻译自 : One-Dimensional (1D) Test Functions for Function Optimization】

【说明:Jason Brownlee PhD大神的文章个人很喜欢,所以闲暇时间里会做一点翻译和学习实践的工作,这里是相应工作的实践记录,希望能帮到有需要的人!】

函数优化是一个研究领域,它寻求函数的输入,导致函数的最大或最小输出。

优化算法有很多,在简单易懂的测试函数上研究和开发优化算法的直觉是很重要的。

一维函数采用单个输入值并输出对输入的单个评估。 当研究函数优化时,它们可能是最简单的测试函数类型。

一维函数的好处是它们可以被可视化为二维图,x 轴上是函数的输入,y 轴上是函数的输出。 函数的已知最优值和函数的任何采样也可以绘制在同一图上。

在本教程中,您将发现在学习函数优化时可以使用的标准一维函数。

教程概述

我们可以使用许多不同类型的简单一维测试函数。尽管如此,在函数优化领域中还是有一些常用的标准测试函数。在测试不同的算法时,我们可能希望选择测试函数的特定属性。我们将在本教程中探索少量简单的一维测试函数,并按它们的属性将它们分为五个不同的组;他们是:

凸单峰函数
非凸单峰函数
多模态函数
不连续函数(非平滑)
嘈杂的函数

每个函数都将使用 Python 代码呈现,其中包含目标目标函数的函数实现和函数的样本,该函数的样本显示为线图,并清楚地标记了函数的最优值。

所有的函数都表现为一个最小化问题,例如找到导致函数最小(最小值)输出的输入。通过向所有输出添加负号,任何最大化函数都可以成为最小化函数。类似地,任何最小化函数都可以以相同的方式最大化。

这些函数不是我发明的;它们取自文献。请参阅进一步阅读部分以获取参考资料。

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

凸单峰函数

凸函数是一种函数,其中可以在域中的任意两点之间绘制一条线,并且该线保留在域中。对于显示为二维图的一维函数,这意味着该函数具有碗状形状,并且两者之间的线保持在碗上方。单峰意味着函数有一个最优解。 凸函数可能是也可能不是单峰的; 类似地,单峰函数可能是也可能不是凸的。以下函数的范围限制为-5.0和5.0,最佳输入值为0.0。

# convex unimodal optimization function
from numpy import arange
from matplotlib import pyplot# objective function
def objective(x):return x**2.0# define range for input
r_min, r_max = -5.0, 5.0
# sample input range uniformly at 0.1 increments
inputs = arange(r_min, r_max, 0.1)
# compute targets
results = objective(inputs)
# create a line plot of input vs result
pyplot.plot(inputs, results)
# define optimal input value
x_optima = 0.0
# draw a vertical line at the optimal input
pyplot.axvline(x=x_optima, ls='--', color='red')
# show the plot
pyplot.show()

运行示例将创建函数的折线图,并用红线标记最优值。

这个函数可以通过添加或减去一个常数值在数轴上向前或向后移动,例如 5 + x^2。

如果希望将最佳输入从 0.0 值移开,这会很有用。

非凸单峰函数

如果无法在域中的两点之间绘制一条线并且该线保留在域中,则函数为非凸函数。这意味着可以在域中找到两个点,它们之间的线与函数的线图相交。通常,如果一维函数的图有多个山丘或山谷,那么我们立即知道该函数是非凸函数。 然而,非凸函数可能是也可能不是单峰的。我们对优化感兴趣的大多数实际函数都是非凸函数。以下函数的范围限制为-10.0和10.0,最佳输入值为0.67956。

# non-convex unimodal optimization function
from numpy import arange
from numpy import sin
from numpy import exp
from matplotlib import pyplot# objective function
def objective(x):return -(x + sin(x)) * exp(-x**2.0)# define range for input
r_min, r_max = -10.0, 10.0
# sample input range uniformly at 0.1 increments
inputs = arange(r_min, r_max, 0.1)
# compute targets
results = objective(inputs)
# create a line plot of input vs result
pyplot.plot(inputs, results)
# define optimal input value
x_optima = 0.67956
# draw a vertical line at the optimal input
pyplot.axvline(x=x_optima, ls='--', color='red')
# show the plot
pyplot.show()

运行示例将创建函数的折线图,并用红线标记最优值。

多模态函数

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

多峰函数是非凸的。可能存在一个全局最优解和一个或多个局部最优解或欺骗最优解。 或者,可能存在多个全局最优值,即导致函数的相同最小输出的多个不同输入。让我们看几个多模态函数的例子。

多模式函数 1

范围限制在 -2.7 和 7.5 之间,最佳输入值为 5.145735。

# multimodal function
from numpy import sin
from numpy import arange
from matplotlib import pyplot# objective function
def objective(x):return sin(x) + sin((10.0 / 3.0) * x)# define range for input
r_min, r_max = -2.7, 7.5
# sample input range uniformly at 0.1 increments
inputs = arange(r_min, r_max, 0.1)
# compute targets
results = objective(inputs)
# create a line plot of input vs result
pyplot.plot(inputs, results)
# define optimal input value
x_optima = 5.145735
# draw a vertical line at the optimal input
pyplot.axvline(x=x_optima, ls='--', color='red')
# show the plot
pyplot.show()

运行示例将创建函数的折线图,并用红线标记最优值。

多模式函数 2

范围限定为 0.0 和 1.2,最佳输入值为 0.96609。

# multimodal function
from numpy import sin
from numpy import arange
from matplotlib import pyplot# objective function
def objective(x):return -(1.4 - 3.0 * x) * sin(18.0 * x)# define range for input
r_min, r_max = 0.0, 1.2
# sample input range uniformly at 0.01 increments
inputs = arange(r_min, r_max, 0.01)
# compute targets
results = objective(inputs)
# create a line plot of input vs result
pyplot.plot(inputs, results)
# define optimal input value
x_optima = 0.96609
# draw a vertical line at the optimal input
pyplot.axvline(x=x_optima, ls='--', color='red')
# show the plot
pyplot.show()

运行示例将创建函数的折线图,并用红线标记最优值。

多模式函数 3

范围限定在 0.0 和 10.0 之间,最佳输入值为 7.9787。

# multimodal function
from numpy import sin
from numpy import arange
from matplotlib import pyplot# objective function
def objective(x):return -x * sin(x)# define range for input
r_min, r_max = 0.0, 10.0
# sample input range uniformly at 0.1 increments
inputs = arange(r_min, r_max, 0.1)
# compute targets
results = objective(inputs)
# create a line plot of input vs result
pyplot.plot(inputs, results)
# define optimal input value
x_optima = 7.9787
# draw a vertical line at the optimal input
pyplot.axvline(x=x_optima, ls='--', color='red')
# show the plot
pyplot.show()

不连续函数(非平滑)

函数可能具有不连续性,这意味着函数输入的平滑变化可能会导致输出的非平滑变化。 我们可能将具有此属性的函数称为非平滑函数或不连续函数。有许多不同类型的不连续性,但一个常见的例子是函数输出值的跳跃或方向急剧变化,这在函数图中很容易看出。

不连续函数,范围限定在 -2.0 和 2.0 之间,最佳输入值为 1.0。

# non-smooth optimization function
from numpy import arange
from matplotlib import pyplot# objective function
def objective(x):if x > 1.0:return x**2.0elif x == 1.0:return 0.0return 2.0 - x# define range for input
r_min, r_max = -2.0, 2.0
# sample input range uniformly at 0.1 increments
inputs = arange(r_min, r_max, 0.1)
# compute targets
results = [objective(x) for x in inputs]
# create a line plot of input vs result
pyplot.plot(inputs, results)
# define optimal input value
x_optima = 1.0
# draw a vertical line at the optimal input
pyplot.axvline(x=x_optima, ls='--', color='red')
# show the plot
pyplot.show()

运行示例将创建函数的折线图,并用红线标记最优值。

嘈杂的函数

函数可能具有噪声,这意味着每个评估可能具有随机成分,每次都会稍微改变函数的输出。通过向输入值添加小的高斯随机数,可以使任何非噪声函数产生噪声。以下函数的范围限制为-5.0和5.0,最佳输入值为0.0。

# noisy optimization function
from numpy import arange
from numpy.random import randn
from matplotlib import pyplot# objective function
def objective(x):return (x + randn(len(x))*0.3)**2.0# define range for input
r_min, r_max = -5.0, 5.0
# sample input range uniformly at 0.1 increments
inputs = arange(r_min, r_max, 0.1)
# compute targets
results = objective(inputs)
# create a line plot of input vs result
pyplot.plot(inputs, results)
# define optimal input value
x_optima = 0.0
# draw a vertical line at the optimal input
pyplot.axvline(x=x_optima, ls='--', color='red')
# show the plot
pyplot.show()

运行示例将创建函数的折线图,并用红线标记最优值。

用于函数优化的一维 (1D) 测试函数相关推荐

  1. 遗传算法求解函数优化及TSP问题

    本文的pdf文件:link        遗传算法是群智能算法中的一个分支,是一类基于种群搜索的优化算法,受自然界生物进化机制的启发,通过自然选择.变异.重组等操作,针对特定的问题取寻找出一个满意的解 ...

  2. python函数测试_python绘制评估优化算法性能的测试函数

    测试函数主要是用来评估优化算法特性的,这里我用python3绘制了部分测试函数的图像.具体的测试函数可以结合维基百科来了解.想要显示某个测试函数的图片把代码结尾对应的注释去掉即可,具体代码如下: im ...

  3. 计算智能——遗传算法的多维函数优化

    遗传算法函数优化的代码验证学习 一.遗传算法简介 二.遗传算法组成 2.1编码与解码 2.2个体与种群 2.3适应度函数 2.4遗传算子 2.5算法流程图 三.代码实现 3.1Griewank函数 3 ...

  4. matlab中fic算法,粒子群算法在函数优化问题中的应用最终版(全文完整版)

    <粒子群算法在函数优化问题中的应用.doc>由会员分享,可免费在线阅读全文,更多与<粒子群算法在函数优化问题中的应用(最终版)>相关文档资源请在帮帮文库(www.woc88.c ...

  5. 递归循环一个无限极数组_理解递归、尾调用优化和蹦床函数优化

    想要理解递归,您必须先理解递归.开个玩笑罢了, 递归 是一种编程技巧,它可以让函数在不使用 for 或 while 的情况下,使用一个调用自身的函数来实现循环. 例子 1:整数总和 例如,假设我们想要 ...

  6. Python数模笔记-模拟退火算法(1)多变量函数优化

    1.模拟退火算法 模拟退火算法借鉴了统计物理学的思想,是一种简单.通用的启发式优化算法,并在理论上具有概率性全局优化性能,因而在科研和工程中得到了广泛的应用. 退火是金属从熔融状态缓慢冷却.最终达到能 ...

  7. 蚁群算法解决多峰函数优化问题

    一.多峰优化问题概述         多峰函数优化问题在实际应用中大量存在,多峰函数是指有多个极值点的函数,这些极值点可能相同,也可能不同. 二.蚁群问题解决函数多峰寻优问题思想         以一 ...

  8. 【ML4CO论文精读】用于组合优化的机器学习:方法论之旅(Yoshua Bengio, 2021)

    Machine learning for combinatorial optimization: A methodological tour d'horizon 论文:Bengio Y, Lodi A ...

  9. matlab基于人工蜂群算法的函数优化分析【matlab优化算法十一】

    基于人工蜂群算法的函数优化分析 自然界中的群居昆虫,它们虽然个体结构简单,但是通过个体间的合作却能够表现出极其复杂的行为能力.受这些社会性昆虫群体行为的启发,研宄者通过模拟这些群体的行为提出了群集智能 ...

  10. Matlab遗传算法与普通函数优化问题的结合

    Matlab遗传算法与普通函数优化问题的结合 目录 Matlab遗传算法与普通函数优化问题的结合 准备 遗传算法+普通函数优化问题 种群初始化 计算适应度 个体选择 交叉 变异 插入子代记录最优解 算 ...

最新文章

  1. DataURL:实现原理及优缺点分析
  2. 洛谷2014 选课(树形DP)树形背包问题
  3. python学习笔记列表和元组(三)
  4. 首度公开!OceanBase存储系统架构的演进历程及工程实践
  5. 吴恩达|机器学习作业8.1.推荐系统(协同过滤算法)
  6. Android点赞头像列表
  7. sap 打印预览界面点击打印时记录打印次数_9个Excel打印神技巧!从此打印不求人!...
  8. 浅谈BeanDefinition、BeanDefinitionMap、RootBeanDefintion三者的关系
  9. app软件怎么申请软件著作权?
  10. 草根IT江湖路之三:希望,在坚持之中
  11. 扩展ACL ---王贝的学习笔记
  12. i5-1135g7是标压还是低压 i5 1135g7是集成显卡么
  13. python爬虫--小说爬取
  14. 哈工大软件构造笔记1
  15. Idea 2020.1如何改变JetBrains Runtime(jbr)
  16. Jquery监听onChange事件
  17. 儒略历--Java代码(附带发现了一些问题)
  18. 个人网站中个性时钟小flash插件(js)
  19. 食品行业渠道商商城系统渠道利益透明,加速企业资金回笼
  20. File类中的listFiles()方法

热门文章

  1. Laravel+DingoAPI+Passport使用邮箱或手机号或uid登录
  2. Confluence 6 workbox 的位置
  3. Rosalind工具库:使用EMBOSS处理生物数据
  4. Zookeeper中的ACL
  5. [译] TensorFlow 教程 #15 - 风格迁移
  6. IT忍者神龟之Java动态代理与CGLib代理
  7. samsung-smart app 开发
  8. python相关参考地址收藏
  9. 【转】一步一步学Linq to sql(十):分层构架的例子
  10. 关于ASp.NEt方面的好书,不得不看啊!!!