我正在尝试为我的硕士论文实现与卫星星座设计有关的遗传算法.我想获得多个目标函数的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的随机人口.
>计算每个目标函数的每个人的适应度f.
>将每个人分类为非支配战线(非支配解决方案进入第一战线,然后在第一战线丢弃解决方案,下一组非支配解决方案进入第二战线,直到整个人口被分类为非支配组合锋).
>为每个解决方案分配排名,其中解决方案的排名i是主导解决方案i的解决方案的数量.
>对于所有i,计算解决方案i与解决方案i在同一前沿的下一个最接近解决方案之间的最小距离.
>根据前,距离和最小距离计算新的适应值F:
平均适应值Favg被分配到第一前线,其中Favg(i)= N,前面1中的所有解I,N =人口中的个体数
然后根据等级调整当前前面的每个个体的平均适合度,其中,当前前面的所有解i的Fadj(i)= Favg(i)-g(i),其中g(i)是解的数量在与解决方案I相同的前沿,其排名小于或等于解决方案i的排名
然后考虑密度因子,其中F(i)= Fadj(i)-1 / Min,其中Min是溶液I与溶液i在同一前方的下一个最接近的溶液之间的最小距离,并且F(i)是解决方案的最终适应值i
如果Fj是解j的最小适合度,则Fj >接下来执行遗传操作(基于比赛的选择,交叉和变异)以获得大小为N的子群体.
>计算每个目标函数的子群体中每个个体的适应度f.
>将父母群体和子群体组合成一组大小为2N的群体.
>接下来重复步骤3-6以分类和计算组合的父/子群体的适应度F.
>通过对合并人口的适合度值F进行排序来执行精英主义.选择将成为新的儿童人口的最佳N个人.
>从步骤3开始重复,直到达到最大代数.
最佳答案 “如果我在整个GA运行中采用每个解决方案的情节,那么在GA结束时的第一个非支配前沿中存在一些解决方案,这些解决方案由以前未被传递给下一代的个人主导.”
为了防止这种情况,您必须拥有永不占优势的解决方案的存档.否则,解决方案的几代人的后代可以做出有利于一个目标函数F1而不是另一个F2的权衡,然后他们可以以一种给出严格低于其祖先的结果的方式进行反向权衡.
这不仅仅是比较两代人还不够.没有有限数量的祖先世代可以保留用于比较,这将确保防止后代在目标函数值的空间中蠕动,直到它们最终进入由祖先统治的区域.