亲爱的用户,这是Geatpy2的一个重要的升级。本次升级了全新的进化算法内核,采用自研高性能矩阵库在性能上有大幅度的提升,尤其是在组合优化上性能提升超500%!为了带给您最稳定的体验,目前升级的版本为2.5.0rc0,即2.5.0的预览版。欢迎您进行更新!

安装方法 pip install geatpy==2.5.0rc0

【注:直接用pip install geatpy --upgrade 或者pip install geatpy安装的是2.4.0,欲安装2.5.0预览版,须采用上述方法~】

更新内容一览

【内核】
1. 全面重构进化算法内核,采用自研高性能矩阵库,大幅降低了空间复杂度以及提升了性能,尤其是在超大规模种群及超长染色体时拥有更加出众的表现,并且可以设置利用CPU并行来加快内核函数的运算性能(在调用内核函数时设置输入参数Parallel=True)。
涉及重构的内核函数一览如下:
boundfix, bs2int, bs2real, crowdis, crtip, crtpp, dup, indicator, mutbga, mutbin, mutde, mutgau, mutinv, mutmove, mutpolyn, mutpp, mutswap, mutuni, ndsortDED, ndsortESS, ndsortTNS, otos, recdis, recint, reclin, recndx, recsbx, refgselect, refselect, rws, sus, xovbd, xovdp, xovexp, xovox, xovpmx, xovsec, xovsh, xovsp, xovud。
上述大部分的内核函数的输入参数基本不变,并新增一个Parallel参数,用于控制是否使用并行来运行内核函数,可通过import geatpy as ea; help(ea.内核名)来查看该变化。并行计算使用方法案例如下:
NewChrom = ea.mutpolyn(Encoding, OldChrom, FieldDR, Pm, DisI, FixType, Parallel = True)

2. 因修改了输入参数而无法向下兼容的内核函数如下:
1) boundfix:将原输入参数Loop修改为FixType,作用是选择处理超出染色体元素设定范围的方式,详见help(ea.boundfix)。
2) 类似地,以“mut”开头的变异算子均将原输入参数Loop修改为FixType。详见help(ea.mutpolyn)等。
3) mutde:修改输入参数F的类型,修改为支持输入的F是float标量或list列表。详见help(ea.mutde)。
4) mutuni:删除原有的输入参数MutShrink。取消支持输入参数Alpha可以为2-D矩阵,修改为输入参数Alpha仅可为标量或Numpy一维行向量。
5) mutgau:删除原输入参数MutShrink。取消支持输入参数Sigma3可以为2-D矩阵,修改为输入参数Sigma3仅可为标量或Numpy一维行向量。
6) refselect:删除输入参数pseudorandom。

3. 新增crtri函数,它是crtrp和crtip两者的结合,可方便直接调用来生成混合实数、整数的染色体矩阵。

4. 修复了awGA和rwGA在缺省输入参数CV时出现的BUG。

5. 取消了二进制/格雷码编码中对对数刻度的支持。此后译码矩阵FieldD中的第五行元素(代表“是否采用对数刻度”)不再起作用,为向下兼容,暂时维持FieldD的数据结构不变。

6. 取消了某些需要传入目标函数值矩阵ObjV和违反约束程度矩阵CV的内核函数(如ndsortESS, ranking等)中对ObjV和CV非法值(如Nan、Inf等)的判断,并取消相应的惩罚措施:判断ObjV和CV是否存在非法值的工作交给算法模板类中新增的 call_aimFunc() 函数;对这些函数中原有的“对目标函数值出现非法值的个体进行惩罚”进行删除。

7. 大幅提升计算高维多目标中的超体积指标HV的性能,并支持并行计算。方法如下:
HV = ea.indicator.HV(NDSet.ObjV, PF, Parallel = True)

【框架】
1. 新增CV可以为None的支持。即当没有约束条件时,CV将被自动设置为None,而并非原来的一个全为0的列向量。

2. 删除了种群类的setChrom() 函数。

3. 为算法模板类新增一个函数:call_aimFunc(),作用是调用自定义问题类中的aimFunc()函数,并且判断ObjV和CV是否存在Nan、Inf等非法值。

4. 删除了种群类initChrom()函数中在初始化种群染色体后所进行的染色体解码操作。解码操作统一放在上面提到的call_aimFunc()中进行。

5. 新增3个差分进化算法模板类:
soea_DE_currentToBest_1_bin_templet,
soea_DE_currentToBest_1_L_templet,
soea_DE_currentToRand_1_templet。
分别对应DE/current-to-best/1/bin, DE/current-to-best/1/L 和 DE/current-to-rand/1。

6. 为面向对象的重组和变异算子类添加Parallel参数,用于控制是否使用CPU并行来进行重组和变异,详见operators文件夹

【案例更新】
1. 新增多目标测试集IMOP1、2、3、4,详见此链接
2. 新增基于先验知识进化优化的案例soea_demo10

注意事项
1. 使用该版本进行自定义目标函数计算时,需要比以往更加警惕浮点数精度带来的异常。例如设x允许取0,y在[0,1]之间,欲求x的y次方,此时不建议直接计算,而是修改为计算abs(x)的y次方。该方法可避免因浮点数精度而造成的数值异常(因为当x=0.0时有可能会被误变成诸如-1e-15的非常接近0的负数,从而导致x的y次方得到的是复数)。
2. 该版本暂不支持设置固定的随机数种子(此前版本均可以)。
3. Mac系统的Python3.5暂不支持geatpy 2.5.0内核函数的并行计算,此时若设置了传入内核函数的参数Parallel为True,依旧是采用串行计算。
4. 若在使用过程中出现ObjV或CV异常值的警告,首先需要检查决策变量矩阵(等价于传入aimFunc的种群对象的种群表现型矩阵Phen)中是否有Nan或Inf,假如没有,那么说明目标函数计算过程中可能因浮点数精度异常而导致计算结果出现非法值,或是因它本身计算有误。

若您在使用过程中遇到其他问题,欢迎到github上进行反馈。

感谢您的关注与支持!

Geatpy2.7.0正式发布

Geatpy2交流群

采用自研高性能矩阵库,体验极速的进化之旅!