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


Posted in Python onJune 25, 2019

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

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


def draw_pic(X, Y, Z, z_max, title, z_min=0):
 fig = plt.figure()
 ax = Axes3D(fig)
 ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.cm.hot)
 # ax.contourf(X, Y, Z, zdir='z', offset=-2, cmap=plt.cm.hot)
 ax.set_zlim(z_min, z_max)
 ax.set_title(title)
 # plt.savefig("./myProject/Algorithm/pic/%s.png" % title) # 保存图片
 plt.show()


def get_X_AND_Y(X_min, X_max, Y_min, Y_max):
 X = np.arange(X_min, X_max, 0.1)
 Y = np.arange(Y_min, Y_max, 0.1)
 X, Y = np.meshgrid(X, Y)
 return X, Y


# rastrigin测试函数
def Rastrigin(X_min = -5.52, X_max = 5.12, Y_min = -5.12, Y_max = 5.12):
 A = 10
 X, Y = get_X_AND_Y(X_min, X_max, Y_min, Y_max)
 Z = 2 * A + X ** 2 - A * np.cos(2 * np.pi * X) + Y ** 2 - A * np.cos(2 * np.pi * Y)
 return X, Y, Z, 100, "Rastrigin function"


# Ackley测试函数
def Ackley(X_min = -5, X_max = 5, Y_min = -5, Y_max = 5):
 X, Y = get_X_AND_Y(X_min, X_max, Y_min, Y_max)
 Z = -20 * np.exp(-0.2 * np.sqrt(0.5 * (X**2 + Y**2))) - \
  np.exp(0.5 * (np.cos(2 * np.pi * X) + np.cos(2 * np.pi * Y))) + np.e + 20
 return X, Y, Z, 15, "Ackley function"


# Sphere测试函数
def Sphere(X_min = -3, X_max = 3, Y_min = -3, Y_max = 3):
 X, Y = get_X_AND_Y(X_min, X_max, Y_min, Y_max)
 Z = X**2 + Y**2
 return X, Y, Z, 20, "Sphere function"


# beale测试函数
def Beale(X_min = -4.5, X_max = 4.5, Y_min = -4.5, Y_max = 4.5):
 X, Y = get_X_AND_Y(X_min, X_max, Y_min, Y_max)
 Z = np.power(1.5 - X + X * Y, 2) + np.power(2.25 - X + X * (Y ** 2), 2) \
  + np.power(2.625 - X + X * (Y ** 3), 2)
 return X, Y, Z, 150000, "Beale function"


# Booth测试函数
def Booth(X_min = -10, X_max = 10, Y_min = -10, Y_max = 10):
 X, Y = get_X_AND_Y(X_min, X_max, Y_min, Y_max)
 Z = np.power(X + 2*Y - 7, 2) + np.power(2 * X + Y - 5, 2)
 return X, Y, Z, 2500, "Booth function"


# Bukin测试函数
def Bukin(X_min = -15, X_max = -5, Y_min = -3, Y_max = 3):
 X, Y = get_X_AND_Y(X_min, X_max, Y_min, Y_max)
 Z = 100 * np.sqrt(np.abs(Y - 0.01 * X**2)) + 0.01 * np.abs(X + 10)
 return X, Y, Z, 200, "Bukin function"


# Three-hump camel测试函数
def three_humpCamel(X_min = -5, X_max = 5, Y_min = -5, Y_max = 5):
 X, Y = get_X_AND_Y(X_min, X_max, Y_min, Y_max)
 Z = 2 * X**2 - 1.05 * X**4 + (1/6) * X**6 + X*Y + Y*2
 return X, Y, Z, 2000, "three-hump camel function"


# Hölder table测试函数
def Holder_table(X_min = -10, X_max = 10, Y_min = -10, Y_max = 10):
 X, Y = get_X_AND_Y(X_min, X_max, Y_min, Y_max)
 Z = -np.abs(np.sin(X) * np.cos(Y) * np.exp(np.abs(1 - np.sqrt(X**2 + Y**2)/np.pi)))
 return X, Y, Z, 0, "Hölder table function", -20



z_min = None
# X, Y, Z, z_max, title = Rastrigin()
# X, Y, Z, z_max, title = Ackley()
# X, Y, Z, z_max, title = Sphere()
# X, Y, Z, z_max, title = Beale()
X, Y, Z, z_max, title = Booth()
# X, Y, Z, z_max, title = Bukin()
# X, Y, Z, z_max, title = three_humpCamel()
# X, Y, Z, z_max, title, z_min = Holder_table()

draw_pic(X, Y, Z, z_max, title, z_min)

以下是上述代码绘制的测试函数的图像:

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

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

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

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

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

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

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

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

感觉图像的颜色还不是很好看,等之后优化了来改

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python Tkinter GUI编程入门介绍
Mar 10 Python
Python生成密码库功能示例
May 23 Python
linux环境下python中MySQLdb模块的安装方法
Jun 16 Python
python操作redis方法总结
Jun 06 Python
Python Learning 列表的更多操作及示例代码
Aug 22 Python
浅谈python3.6的tkinter运行问题
Feb 22 Python
django框架使用方法详解
Jul 18 Python
Python使用python-docx读写word文档
Aug 26 Python
8段用于数据清洗Python代码(小结)
Oct 31 Python
如何在python中写hive脚本
Nov 08 Python
python文件名批量重命名脚本实例代码
Apr 22 Python
pytorch交叉熵损失函数的weight参数的使用
May 24 Python
Python基于机器学习方法实现的电影推荐系统实例详解
Jun 25 #Python
Python 中的参数传递、返回值、浅拷贝、深拷贝
Jun 25 #Python
pyqt5 删除layout中的所有widget方法
Jun 25 #Python
在Python中表示一个对象的方法
Jun 25 #Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
Jun 25 #Python
浅谈PyQt5 的帮助文档查找方法,可以查看每个类的方法
Jun 25 #Python
PyQt5根据控件Id获取控件对象的方法
Jun 25 #Python
You might like
咖啡产品发展的三大浪潮
2021/03/04 咖啡文化
PHP源码之explode使用说明
2011/08/05 PHP
Yii2使用自带的UploadedFile实现的文件上传
2016/06/20 PHP
Laravel使用swoole实现websocket主动消息推送的方法介绍
2019/10/20 PHP
javascript 获取所有id中包含某关键字的控件的实现代码
2010/11/25 Javascript
JavaScript中的alert()函数使用技巧详解
2014/12/29 Javascript
JavaScript闭包详解
2015/02/02 Javascript
深入理解requestAnimationFrame的动画循环
2016/09/20 Javascript
Javascript 实现放大镜效果实例详解
2016/12/03 Javascript
解析Vue2.0双向绑定实现原理
2017/02/23 Javascript
BootStrap模态框不垂直居中的解决方法
2017/10/19 Javascript
手把手教你使用vue-cli脚手架(图文解析)
2017/11/08 Javascript
Babel 入门教程学习笔记
2018/06/13 Javascript
vue实现点击当前标签高亮效果【推荐】
2018/06/22 Javascript
vue中如何实现后台管理系统的权限控制的方法示例
2018/09/19 Javascript
Javascript原型链及instanceof原理详解
2020/05/25 Javascript
javascript实现贪吃蛇小游戏
2020/07/28 Javascript
antd Select下拉菜单动态添加option里的内容操作
2020/11/02 Javascript
再也不怕 JavaScript 报错了,怎么看怎么处理都在这儿
2020/12/09 Javascript
Python实现的数据结构与算法之链表详解
2015/04/22 Python
Go语言基于Socket编写服务器端与客户端通信的实例
2016/02/19 Python
Python运行报错UnicodeDecodeError的解决方法
2016/06/07 Python
Python读写及备份oracle数据库操作示例
2018/05/17 Python
Python实现获取邮箱内容并解析的方法示例
2018/06/16 Python
python实现自动获取IP并发送到邮箱
2018/12/26 Python
Python装饰器限制函数运行时间超时则退出执行
2019/04/09 Python
Python函数递归调用实现原理实例解析
2020/08/11 Python
python 检测nginx服务邮件报警的脚本
2020/12/31 Python
为什么会有内存对齐
2016/10/10 面试题
计算机专业学生求职信分享
2013/12/15 职场文书
应聘文员自荐信范文
2014/03/11 职场文书
新闻报道策划方案
2014/06/11 职场文书
洗手间标语
2014/06/23 职场文书
2014公司年终工作总结
2014/12/19 职场文书
中秋节感想
2015/08/10 职场文书
JavaScript组合继承详解
2021/11/07 Javascript