geatpy
geatpy copied to clipboard
对geatpy项目的阶段性总结及建议
前言
这几天接触到geatpy,首先我想对开发者们表示深深的感谢。这真的是一个非常优秀的项目,尤其是在国内环境下,注释和文档非常详细,并且全部由中文撰写。对于决策变量的设置(三种编码、离散连续、等于不等于)以及目标函数的定义(aimFunc、evalVars)都非常方便,还提供了装饰器便于对二维数组操作不太熟练的新手更好理解。算法模板类的设置也非常便于更换不同算法,打印日志的设计更是充满了人性化,多种可视化绘图非常强大,允许用户传入自定义outFunc函数也很灵活,真的是一个不可多得的好项目。
bug
下面说说本人在使用过程中发现,并且本项目源码已经解决了的bug(pip源2.7.0仍存在,对新手不太友好)
- 装饰器只允许对evalVars修饰,对aimFunc修饰存在bug,目前已移除对aimFunc的修饰功能,有点可惜
- 多目标算法类中outFunc函数对于传入函数的检查使用
type,该方法返回的是类型对象而不是字符串,应该像单目标算法类一样使用callable进行检查,目前已github源码修复
PR
下面是本人在使用过程中发现,但是本项目源码还没有解决的小问题,详情请看#377,主要包括
- matplotlib高版本已移除对
Axes3D的支持,因此画3维pareto前沿图时一片空白,需要转用add_subplot方法 - 本人在使用
moea_NSGA2_templet进行较复杂多目标问题求解时最终求得的pareto解集中总是会出现重复解,且各个解顺序杂乱,不利于作出决策,因此增加NDSet = NDSet[np.unique(NDSet.ObjV,return_index=True,axis=0)[1]]对重复解进行排除,并且各个解按照大小顺序排列
修改后效果良好,已向项目提出PR,望采纳
待改进
下面是本人在使用过程中发现,但是本项目源码还没有解决的小瑕疵,主要包括
- 绘制迭代变化图像时是根据记录日志进行绘图,但是这时候出现一个问题,如果日志是按照每隔20代进行记录,那么最终绘制图像x轴坐标代数还是1,2,3,4等依次递增,并没有间隔
如上所示,本人设置迭代次数为100,每隔10次记录日志,最终绘制出的图像迭代次数只有9次,而且x轴坐标没有相应进行对应
这个问题目前我的idea是:
- 设置记录日志为每隔1代进行记录,勉强可以接受,但是不舒服
- 修改绘图时的x轴坐标,与日志中记录相隔代数保持一致
- 观察到单目标算法类中最终结果图的绘制采用的是trace属性进行绘制,保留了每一代数据,考虑多目标算法类也增加trace属性
- 尽管解决了上一个问题,但是我发现本项目数据并不是从第1代就开始记录(包括单目标trace属性、日志等),而是迭代最初的前几十代都没有被记录下来,如上图所示设置迭代次数为100,每隔10次记录日志,最终绘制出的图像迭代次数应该是10次,但是绘制出来只有9次,包括控制台打印出的日志也是从第20代开始,没有第10代的数据。why?这样的话绘出来的迭代变化图就更加迷惑了,是因为前几十代无可行解吗?不应该啊,就是无可行解也可以保留下来进行绘图啊
由于个人时间,上述2个问题没有进一步去研究和解决,希望开发者能够重视
总结
观察到本项目已经很久没有进行大的更新,平时的维护也寥寥无几,甚至通过减少功能来修复bug,对于issue也不太重视。当然,我完全能够理解,但还是希望开发者能够带着这个项目继续前进。对于本项目的网站,或许可以使用hexo、docusaurus等框架快速搭建,纯静态无需服务器,便宜的如.asia域名6元首年,目前仅有简陋的github源码及readme文件对于新手还是不够友好,不利于推广。衷心的希望geatpy项目能够越来越好!
非常感谢您的宝贵意见!计划于这几个月再出一版,把积累的问题尽数修复。
这个项目不接受PR的吗?我还想着有时间再帮忙搞个文档的官网
我觉得geatpy的中文官网真的弄的非常好,还有各种详尽的使用文档,对于我当初上手收益颇大。 可惜目前没有了,如果能把之前网页上的说明文档上传到github上就好了
@geatpy-dev 请问有文档的md格式吗,想着把官网搞一下
您好,您的邮件冯颖已收到!
Thank you. Your email is received and will be handled as soon as possible