许多学习算法的开发者在刷题或者练习的过程中都会遇到启发式算法,如果你恰好也正在学习算法,那么明天 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, '\\n', '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, '\\n', '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()

粒子群算法

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()

模拟退火算法

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

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()

蚁群算法

蚁群算法(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(

免疫优化算法

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)

人工鱼群算法

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 看看:https://gitee.com/explore/mathlibs