geatpy-dev / geatpy

Evolutionary algorithm toolbox and framework with high performance for Python
http://www.geatpy.com
GNU Lesser General Public License v3.0
1.96k stars 724 forks source link

当无可行解时是如何处理的?应当在哪里改进。 #150

Open zypruc opened 3 years ago

zypruc commented 3 years ago

您好, 使用NSGA2时,由于约束条件较为严苛以及变量维度过高,同时种群数量设置较小(以保证时间开销)。 较难找到可行解,想知道这种情况算法内部是怎么处理的,以及我应该在哪里改良/定制,以提高种群没有可行解情况下的速度。

zypruc commented 3 years ago

两次遗忘之间需要的时间比单目标情形下慢很多很多

geatpy-dev commented 3 years ago

@zypruc 您好,NSGAII处理约束的方法见下文:K. Deb, A. Pratap, S. Agarwal and T. Meyarivan, "A fast and elitist multiobjective genetic algorithm: NSGA-II," in IEEE Transactions on Evolutionary Computation, vol. 6, no. 2, pp. 182-197, April 2002, doi: 10.1109/4235.996017. 内容截图: image

zypruc commented 3 years ago

请问那如何在程序里处理来提高不满足约束时速度呢?按理说我程序里单目标和双目标唯一区别就是多了一个目标函数,但不满足约束时迭代更快呢?

geatpy-dev commented 3 years ago

方法:玄学调参(比如调交叉、变异算子里的所有可调参数);换其他算法(比如换成NSGA3或者MOEA/D等);针对特定的问题设计在特定问题下效果更加好的改进算法(做到这一步可以发更好的paper了)。

bruce0715 commented 3 years ago

请问一下,如何在生成个体的时候就给条件限制。比如我想选一个个体是从100个人名中选择20个人名,我如何在生成这个个体时候就保证这个个体包含的20个人名没有重复,而不是最后通过CV得出无可行解。感谢~

geatpy-dev commented 3 years ago

@bruce0715 使用排列编码。