最近几年简单浏览和对比了一些智能算法的库。现将各种库的主要信息、相关优缺点简单整理如下,各位同学可根据自己的需求和喜好进行选择。
项目地址:https://github.com/DEAP/deap
安装:
pip install deap
优点:
缺点:
比如它是这样设置参数然后完成一个简单的函数最大优化的:
import random
from deap import creator, base, tools, algorithms
creator.create("FitnessMax", base.Fitness, weights=(1.0,))
creator.create("Individual", list, fitness=creator.FitnessMax)
toolbox = base.Toolbox()
toolbox.register("attr_bool", random.randint, 0, 1)
toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.attr_bool, n=100)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
def evalOneMax(individual):
return sum(individual),
toolbox.register("evaluate", evalOneMax)
toolbox.register("mate", tools.cxTwoPoint)
toolbox.register("mutate", tools.mutFlipBit, indpb=0.05)
toolbox.register("select", tools.selTournament, tournsize=3)
population = toolbox.population(n=300)
NGEN=40
for gen in range(NGEN):
offspring = algorithms.varAnd(population, toolbox, cxpb=0.5, mutpb=0.1)
fits = toolbox.map(toolbox.evaluate, offspring)
for fit, ind in zip(fits, offspring):
ind.fitness.values = fit
population = toolbox.select(offspring, k=len(population))
top10 = tools.selBest(population, k=10)
速度慢(许多人都反应有这个问题)
集成的算法少(当然也可以通过自定义来修改,但这样和完全自写没多大区别)
超过半年没有更新(最近更新也只是安装上的修改)
项目地址:https://github.com/thieunguyen5991/mealpy
安装:
pip install mealpy
优点:
from opfunu.type_based.uni_modal import Functions
from mealpy.evolutionary_based.GA import BaseGA
t1 = Functions()
## Setting parameters
objective_func = t1._sum_squres__
problem_size = 30
domain_range = [-15, 15]
log = True
epoch = 100
pop_size = 50
pc = 0.95
pm = 0.025
md = BaseGA(objective_func, problem_size, domain_range, log, epoch, pop_size, pc, pm)
best_position, best_fit, list_loss = md._train__()
print(best_fit)
缺点:
项目地址:https://github.com/guofei9987/scikit-opt
官文文档地址:https://scikit-opt.github.io/scikit-opt/#/zh/README
安装:
pip install scikit-opt
优点:
上手容易,代码简单,尤其许多用法很像Matlab。比如官方文档就提供了一些例子:使用遗传算法进行曲线拟合
中文文档,并且文档很全。大佬的CSDN主页。(作者自称是京东算法工程师,这个库也的确感觉得到一些情怀,方便实用的感觉)
在使用方便的基础上,也提供了不少接口用于自行修改。尤其可以自定义算子。
一些较好玩的特性:GPU加速、断点运行等。
缺点:
目前似乎还没有集成足够多的方法。大类有3类,共7种算法。
算法本身的优化似乎还不足(未仔细测试)
项目地址:https://github.com/geatpy-dev/geatpy
官网地址:http://geatpy.com/
安装:
pip install geatpy
或者强制版本
pip install geatpy==2.5.1
优点:
缺点:
XM
?等。def aimFunc(self, pop): # 目标函数
Vars = pop.Phen # 得到决策变量矩阵
XM = Vars[:,(self.M-1):]
g = 100 * (self.Dim - self.M + 1 + np.sum(((XM - 0.5)**2 - np.cos(20 * np.pi * (XM - 0.5))), 1, keepdims = True))
ones_metrix = np.ones((Vars.shape[0], 1))
f = 0.5 * np.fliplr(np.cumprod(np.hstack([ones_metrix, Vars[:,:self.M-1]]), 1)) * np.hstack([ones_metrix, 1 - Vars[:, range(self.M - 2, -1, -1)]]) * np.tile(1 + g, (1, self.M))
pop.ObjV = f # 把求得的目标函数值赋值给种群pop的ObjV
注:这个项目得多补充几句,目测应该是硕士生写的。总体的设计、DEMO、文档上给人感觉都远不如上面几个老练(尤其和DEAP相比)。但几个学生跨校合作,在不长的时间内能够完成如此完整的一个工作也实非易事。也希望他们能够继续进步。综合来看,这个项目个人认为属于国产良心。
项目地址:https://github.com/esa/pygmo2
安装:
pip install pygmo
注:安装还依赖如下环境
其它可能会用到的环境:
优点:
缺点:
注:这个库也吐槽一句,网传很厉害,但真没看出来除了看起来专业以外有何厉害之处。当然通常以C++为底层的东西有可能在大量级问题上的处理更加容易部署,但一般的用户也用不到。
项目地址:https://github.com/ljvmiranda921/pyswarms
安装:
pip install pyswarms
优点:
plot_contour(pos_history=optimizer.pos_history, mesher=m, designer=d, mark=(0,0))
pos_history_3d = m.compute_history_3d(optimizer.pos_history) # preprocessing
animation3d = plot_surface(pos_history=pos_history_3d,
mesher=m, designer=d,
mark=(0,0,0))
缺点:
项目地址:https://github.com/scipy/scipy
官网:https://www.scipy.org/
官方文档: https://docs.scipy.org/doc/
安装(当然其实当你装上Python的时候它就在了):
pip install scipy
特别说明: scipy作为一个相对严谨和‘传统’的数值计算库,基本上常用的数值计算方法都有涉及。当然数值计算型的库通常都不会把智能优化(启发式算法)作为重点。它集成了十分有限的几种优化算法:差分进化、模拟退火等。但它仍然有不少优点:
优点:
缺点:
经过一番调研,发现在Python的包库里面有质量的智能算法库还真是非常有限(除上述库以外,还有不少几个算法就成一个库的库,实在不敢恭维,简单玩玩就行了)。这里个人认为可能有以下几个方面:
或许就是以上原因导致现在我们看不到特别惊艳的库,目前稍做得好一些的也就是在辅助功能上集成得较好而已。
当然,不管怎样,目前有这些库的话,对于不是完全专业从事相关算法研究的人员而言也完全够用了。就个人目前体验而言,综合来看最推荐的库为scikit-opt
。当然终归到底,自己用着好就是最好。