Geatpy2.7.0更新日志

简介:本次更新在保持整体向下兼容2.6.0版本的情况下大幅优化了进化算法框架,同时移除了对scipy的依赖,大幅提升算法性能。之后您可以通过以下写法快速定义和求解问题:

更新内容一览:

【内核】

  • 修复了mutbga的压缩率错误问题。
  • 修正了crtri,当类型设定全为整数时,返回的染色体矩阵的元素改为整型。
  • 彻底移除对scipy的依赖。大幅提升性能。
  • 修复powing函数传入参数与其他同类函数不一致的问题。
  • 修复了refselect函数的内存泄露问题。

【框架】

  • 增强了种群类get、set方法的传入参数index的类型检查。
  • 新增开源的绘图函数PointScatter和ParCoordPlotter,支持保存gif动画。
  • 把现有的测试问题全部放在benchmarks文件夹中,可以被直接import。并修正了部分测试函数的错误。
  • 大幅修改Algorithm类的构造函数【向下兼容】。
  • 新增optimize函数。执行脚本可以通过调用optimize函数快速部署和求解问题。
  • 修改了种群类。第二个传入参数Field可以直接传入一个由问题类的varTypes, ranges和borders组成的tuple。此时将自动调用crifld创建种群的译码矩阵。
  • 为PsyPopulation类添加EncoIdxs属性,用于表示每个染色体分别编码哪些变量。
  • 完善Algorithm类的构造函数。
  • 为算法类新增参数stopMsg和dirName。分别用于记录算法停止的原因、文件保存的路径。
  • 修正了Problem.pygetReferObjV()函数的逻辑,当没有目标函数参考值时,不再会照样生成名为referenceObjV的文件夹。
  • 为问题类新增另一种目标函数的定义方法:定义evalVars(Vars)函数,它传入一个决策变量矩阵Vars。返回对应的目标函数值矩阵ObjV和违反约束程度矩阵CV。evalVars和原有的aimFunc同样都是用于计算目标函数值和违反约束程度矩阵,仅仅只是接口不同,两种方法性能基本没有差异,在使用时只需选择定义其中一个即可。
  • 为问题类新增装饰器single。在自定义问题类时,通过给目标函数加上single装饰器,可以实现只需在目标函数中计算单个个体的目标函数值和违反约束程度值。如果给evalVars(Vars)加上single装饰器,则传入参数将会是一个Numpy ndarray一维数组。然后返回值ObjV和CV可以是Numpy ndarray一维数组,也可以是标量(当只有一个优化目标、只有一个约束条件时。)
  • 大幅提升RVEA的算法性能。
  • 支持使用pyinstaller进行打包。您可以用pyinstaller对您的项目文件进行直接打包。

【案例】
新增案例:
soea_quick_start_aimFunc
soea_quick_start_aimFunc_single
soea_quick_start_evalVars
soea_quick_start_evalVars_loop
soea_quick_start_evalVars_single
moea_quick_start
moea_demo6

【文档】
目前文档正在陆续更新中,其中重写了快速入门的教程。

Geatpy官网迁移通知

Geatpy2交流群

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