我正在尝试为我的硕士论文实施与卫星星座设计有关的遗传算法。我想获得多个目标函数的pareto-fronts。我正在编写自己的算法,该算法基于Ashish Ghosh和Mrinal Kanti Das(http://www.isical.ac.in/~ash/Mrinal-fi-08.pdf)基于非支配秩的排序遗传算法,该算法基于NSGA-II。该算法通过将父母和子女群体组合成一组个体(大小为2N),然后选择N个最佳个体成为新的子群体来使用精英主义,其中N是初始群体的大小。适应性基于非支配前线,每个前线内的排名,以及前方个体之间的间距。
我编写的算法工作正常,直到组合的父/子群体中的几乎每个人都处于第一个非支配的前线(它们都是非支配的)。当这种情况发生时,区分每个人之间适应性的唯一因素是个体之间的间隔。因此,我可以让一个人表现得非常好并且应该传递给下一代,但是它没有被选中,因为它可能接近另一个人。如果我在整个GA运行中绘制每个解决方案的图表,那么在GA结束时的第一个非支配前沿中存在一些解决方案,这些解决方案由之前没有传递给下一代的个人主导。这可能是我的代码的问题,但在考虑算法的工作方式后,我想知道这是否是算法的问题。
感谢您的帮助!
这是我的伪代码:
初始化大小为N的随机人口。
计算每个目标函数的每个人的适应度。
将每个人划分为非支配战线(非支配解决方案进入第一战线,然后在第一战线丢弃解决方案,下一组非支配解决方案进入第二战线,直到整个人口分类为一组非支配战线)。
为每个解决方案分配排名,其中解决方案i的排名是主导解决方案i的解决方案的数量。
计算解决方案i与解决方案i在同一前方的下一个最接近的解决方案之间的最小距离,对于所有i。
根据前方,等级和最小距离计算新的适应度值F:
平均适合度值Favg被分配到第一个前沿,其中Favg(i)= N表示前面1中的所有解,而N =人口中的个体数
然后根据等级调整当前前面的每个个体的平均适合度,其中Fadj(i)= Favg(i)-g(i)对于当前前面的所有解i,并且其中g(i)是与溶液I相同前沿的溶液数量小于或等于溶液i的等级
然后考虑密度因子,其中F(i)= Fadj(i)-1 / Min,其中Min是解决方案I与解决方案i和F(i)在同一前沿中的下一个最接近解决方案之间的最小距离)是解决方案i的最终适应值
如果Fj是解j的最小适合度,则Fj 为下一个前方指定Favg值,Favg(ii)= Favg(i)-e,其中e是一些小值,从而确保前f的适应值小于前f的任何解的适应值。 1
接下来执行遗传操作(基于锦标赛的选择,交叉和变异)以获得大小为N的儿童人口。
计算每个目标函数中儿童人口中每个人的适应度。
将父母群体和子群体合并为一组大小为2N的小组。
接下来,重复步骤3-6,对父母/子女群体的健康状况进行分类和计算。
通过对合并人口的适合度值F进行排序来执行精英主义。选择将成为新的儿童人口的最佳N个人。
从步骤3开始重复,直到达到最大代数。
答案 0 :(得分:2)
“如果我在整个GA运行中绘制每个解决方案的图表,那么在GA结束时的第一个非支配前沿中存在一些解决方案,这些解决方案由之前的个人主导,但未被传递到下一个代“。
要防止这种情况发生,您必须拥有永不占主导地位的解决方案的存档。否则,几代人的解决方案的后代可以做出有利于一个目标函数F1而不是另一个F2的权衡,然后他们可以以一种严格低于其祖先的结果的方式进行反向权衡。
这不仅仅是比较两代人还不够。没有大量的祖先世代,你可以保留进行比较,这些比较可以确保防止后代在目标函数值的空间中蠕动,直到它们最终进入一个由祖先统治的区域。