差分进化算法_想要学习启发式算法?推荐你看看这个价值极高的开源项目_weixin_39830387的博客-程序员秘密

技术标签: 差分进化算法  

dd0d911a0f7b047e8e544a96957e3ab5.png

许多学习算法的开发者在刷题或者练习的过程中都会遇到启发式算法,如果你恰好也正在学习算法,那么今天 Gitee 介绍的这款开源项目一定能对你的学习过程有所帮助,帮你更好的理解启发式算法。

启发式算法(heuristic algorithm)是相对于最优化算法提出的。一个问题的最优算法求得该问题每个实例的 最优解 。启发式算法可以这样定义:一个基于直观或经验构造的算法,在可接受的花费(指计算时间和空间)下给出待解决组合优化问题每一个实例的一个可行解,该可行解与最优解的偏离程度一般不能被预计。

项目名称:scikit-opt

项目作者:guofei9987

开源许可协议:MIT

项目地址:https://gitee.com/guofei9987/scikit-opt

项目简介

该项目是一个封装了7种启发式算法的 Python 代码库,包含了差分进化算法、遗传算法、粒子群算法、模拟退火算法、蚁群算法、鱼群算法、免疫优化算法。

特性

  • UDF(用户自定义算子)
  • GPU 加速
  • 断点继续运行

算法演示

差分进化算法

1.定义你的问题

'''min f(x1, x2, x3) = x1^2 + x2^2 + x3^2s.t.    x1*x2 >= 1    x1*x2 <= 5    x2 + x3 = 1    0 <= x1, x2, x3 <= 5'''def obj_func(p):    x1, x2, x3 = p    return x1 ** 2 + x2 ** 2 + x3 ** 2constraint_eq = [    lambda x: 1 - x[1] - x[2]]constraint_ueq = [    lambda x: 1 - x[0] * x[1],    lambda x: x[0] * x[1] -

2.做差分进化算法

from sko.DE import DEde = DE(func=obj_func, n_dim=3, size_pop=50, max_iter=800, lb=[0, 0, 0], ub=[5, 5, 5],        constraint_eq=constraint_eq, constraint_ueq=constraint_ueq)best_x, best_y = de.run()print('best_x:', best_x, '', 'best_y:', best_y

遗传算法

1.定义你的问题

import numpy as npdef schaffer(p):    '''    This function has plenty of local minimum, with strong shocks    global minimum at (0,0) with value 0    '''    x1, x2 = p    x = np.square(x1) + np.square(x2)    return 0.5 + (np.sin(x) - 0.5) / np.square(1 + 0.001 * x

2.运行遗传算法

from sko.GA import GAga = GA(func=schaffer, n_dim=2, size_pop=50, max_iter=800, lb=[-1, -1], ub=[1, 1], precision=1e-7)best_x, best_y = ga.run()print('best_x:', best_x, '', 'best_y:', best_y)

3.用 matplotlib 画出结果

import pandas as pdimport matplotlib.pyplot as pltY_history = pd.DataFrame(ga.all_history_Y)fig, ax = plt.subplots(2, 1)ax[0].plot(Y_history.index, Y_history.values, '.', color='red')Y_history.min(axis=1).cummin().plot(kind='line')plt.show()
63de2aed4186659f0dd9fc9ac9244590.png

粒子群算法

1.定义问题

def demo_func(x):    x1, x2, x3 = x    return x1 ** 2 + (x2 - 0.05) ** 2 + x3 ** 2

2.做粒子群算法

from sko.PSO import PSOpso = PSO(func=demo_func, dim=3, pop=40, max_iter=150, lb=[0, -1, 0.5], ub=[1, 1, 1], w=0.8, c1=0.5, c2=0.5)pso.run()print('best_x is ', pso.gbest_x, 'best_y is', pso.gbest_y)

3.画出结果

import matplotlib.pyplot as pltplt.plot(pso.gbest_y_hist)plt.show()
205eeda4cef178ade5cbd0c4af628c2a.png
f11c49890d81cd1c6483a2db3a4d98b2.gif

模拟退火算法

模拟退火算法用于多元函数优化

1.定义问题

demo_func = lambda x: x[0] ** 2 + (x[1] - 0.05) ** 2 + x[2] ** 2

2.运行模拟退火算法

from sko.SA import SAsa = SA(func=demo_func, x0=[1, 1, 1], T_max=1, T_min=1e-9, L=300, max_stay_counter=150)best_x, best_y = sa.run()print('best_x:', best_x, 'best_y', best_y)

3.画出结果

import matplotlib.pyplot as pltimport pandas as pdplt.plot(pd.DataFrame(sa.best_y_history).cummin(axis=0))plt.show()
66978008d7193b8ef137889fcf7b44c5.png

蚁群算法

蚁群算法(ACA, Ant Colony Algorithm)解决TSP问题

from sko.ACA import ACA_TSPaca = ACA_TSP(func=cal_total_distance, n_dim=num_points,              size_pop=50, max_iter=200,              distance_matrix=distance_matrix)best_x, best_y = aca.run(
b7c88079b460bfb60d09990667ca01ec.png

免疫优化算法

from sko.IA import IA_TSPia_tsp = IA_TSP(func=cal_total_distance, n_dim=num_points, size_pop=500, max_iter=800, prob_mut=0.2,                T=0.7, alpha=0.95)best_points, best_distance = ia_tsp.run()print('best routine:', best_points, 'best_distance:', best_distance)
4b6dfc8fcb40b01ce9c54d2c912195c1.png

人工鱼群算法

def func(x):    x1, x2 = x    return 1 / x1 ** 2 + x1 ** 2 + 1 / x2 ** 2 + x2 ** 2from sko.AFSA import AFSAafsa = AFSA(func, n_dim=2, size_pop=50, max_iter=300,            max_try_num=100, step=0.5, visual=0.3,            q=0.98, delta=0.5)best_x, best_y = afsa.run()print(best_x, best_

想要学习更多算法类开源项目?点击下方了解更多前往 Gitee 看看。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39830387/article/details/109883443

智能推荐

ffmpeg下载安装 多段ts视频m3u8下载_桃之夭夭ღ的博客-程序员资料_ffmpeg m3u8下载

如何下载多段ts视频 m3u8 ffmpeg资源破解ffmpeg下载下载地址源码git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg安装安装方法脚本,环境变量,执行器文档ffmpeg文档代码# 下载方法:# ffmpeg -i 网页 输出文件ffmpeg -i http://xxx/index.m3u8 output.mp4# 带其他参数的版本# ffmpeg 命令# -i 跟输入网页# -acodec 跟音频解码 -

outlook阅读为html,Office 2010: outlook中设置邮件格式为HTML、RTF、纯文本_星光居士的博客-程序员资料

所有的电子邮件应用程序都不相同,因此需要使用收件人的应用程序支持的邮件格式。Microsoft Outlook 提供了灵活的邮件格式,以满足不同情况下的需要。所选择的邮件格式决定了您是否可以添加带格式文本(如粗体、彩色字体和项目符号)以及是否可以将图片添加到邮件正文中。不过,仅仅选择可以让您添加这些功能的邮件格式并不表示收件人将能看到这些功能。这是因为一些电子邮件应用程序不支持带格式的邮件或图片。...

Android获取SystemProperties方法_Amosstan的博客-程序员资料_获取systemproperties

一、前言Android API从21后开始,不再直接支持通过SystemProperties.get/set方式来获取/设置系统属性。目前有两种方式可以获取/设置系统属性,分别为通过反射方法及AndroidStudio中通过引入jar包来解决。二、方法一通过反射方式来进行系统属性操作,代码如下:package com.example.SystemPropertiesUtils;import java.lang.reflect.Method;public final class System

在开发板上进行图片循环播放c语言(800*480)_JiayinX的博客-程序员资料_arm开发板实现图片循环显示

在开发板上进行图片循环播放c语言(800*480)代码如下:#include &lt;sys/types.h&gt;#include &lt;sys/stat.h&gt;#include &lt;fcntl.h&gt;#include &lt;stdio.h&gt;#include &lt;error.h&gt;#include &lt;unistd.h&gt;#include &lt;sys/mman.h&gt;#include &lt;stdlib.h&gt;char* buf[10

linux进程间通信signal,Linux 进程间通信 信号(signal)_徐祯先生的博客-程序员资料

1. 概念:1)信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式2)信号可以直接进行用户空间进程和内核进程之间的交互,内核进程也可以利用它来通知用户空间进程发生了哪些系统事件。3)如果该进程当前并未处于执行态,则该信号就由内核保存起来,直到该进程恢复执行再传递给它;如果一个信号被进程设置为阻塞,则该信号的传递被延迟,直到其阻塞被 取消时才被传递给进程。2.用户进程对信号的响应方式:1)忽...

R包开发实例_lihao_ahu的博客-程序员资料

R包文件结构简而言之,R包可以理解为以特定结构组织的R代码、数据等文件。下图展示R包最为常见的7个部分开发环境配置R包的开发环境包括R运行环境、R包开发工具(roxygen2,devtools和usethis)。同时根据项目需要需要配置依赖。本文使用集成开发环境Rstudio进行R包开发,Rstudio集成了R解释器、R包开发工具。这里默认读者R解释器的安装,首先介绍R包开发工具的安装配置。roxygen2引用官方文档的介绍,“在函数定义上方的注释中描述您的函数,roxygen2将处理您的源代码

随便推点

Python:08编写可实现增删改查,存储功能的通讯录(面向对象)_Yummyik的博客-程序员资料

问:制造一个简易通讯录,可以存储人名和电话号码,编写程序完成通讯录的增删改查功能,并且实现文件存储功能。telbooks={}f=open("Phonebooks.txt","r")content = f.read()telbooks = eval(content)f.close()#定义打印界面的函数def printInfo(): print("="*30) p...

应用层协议---HTTP协议简单认识_拥抱@的博客-程序员资料

写在前面OS七层参考模型:物理层链路层网络层传输层会话层表示层应用层TCP/IP五层参考模型:物理:光电信号的传输,以太网协议,集电器链路:相邻设备之间的数据帧传输,以太网协议,交换机网络 :地址管理和路由选择传输 :端与端之间的数据传输,TCP/UDP应用:应用程序的沟通;http/ftp/ssh本文以TCP/IP五层参考模型为基础,介绍相关层的知名协议:应用层...

利用JDBC完成简易版登录校验_天乔巴夏丶的博客-程序员资料

以下参考自黑马培训视频的一个很基本的案例,通过JDBC连接数据库,完成简单的登录校验。结合自己之前在网上看到的一些管理系统的步骤,感觉之后会用到类似的,特此整理一下。一、将配置文件jdbc.properties放至src目录下,配置相关信息:url,user,password,driver等。二、封装一个工具类JDBCUtils。import java.io.FileReader;imp...

9行代码制作一个简单的油猴插件_猪猪侠要增肥的博客-程序员资料

原文地址9行代码制作一个简单的油猴插件-知识学堂相信许多同学都有用过油猴这个谷歌插件吧,还没有了解过的朋友也可以去谷歌应用商店安装试一下,真的是一款非常牛逼的插件,强力推荐!!!今天我就和大家分享怎么用油猴自己来写一个简单的脚本吧。我要实现的是就是在原有百度搜索的下方增加一个时间展示。效果图如下:那么我们一起开始制作:1.第一步:安装好油猴插件,谷歌应用商店搜索Tampermonkey即可找到(已...

后端PHP最简洁教程(多注释)之读取文本文件_我是一株草我有三颗心的博客-程序员资料

&lt;html&gt;&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;&lt;body&gt;&lt;?php//方法一$file = fopen("C:\Users\yjkj\Desktop\Alahp\aa.txt", "r") or exit("无法打开文件!");// 读取文件每...

推荐文章

热门文章

相关标签