Pareto非支配集和的选取-擂台赛方法

原理-方法如下:http://www.cqvip.com/read/read.aspx?id=43249935

具体代码如下:

 

 while (indivs.Count > 0)
            {


                #region 初始
                //每一次循环都要找到一个霸主,即非支配个体
                //int indexofbetterindiv = 0;
                //for (i = 1; i < indivs.Count; i++)
                //{
                //    if (IsBetter(indivs[i], indivs[indexofbetterindiv], objNum))
                //    {
                //        indexofbetterindiv = i;
                //    }
                //}
                //betterindivs.Add(indivs[indexofbetterindiv]);//非支配集添加每一轮新的霸主,以前出过BUG
                删除掉新的擂主所支配的个体
                //List<int> indexofdelteindiv = new List<int>();//保存被删掉的个体的下标
                //for (i = 0; i < indexofbetterindiv; i++)
                //{
                //    if (IsBetter(indivs[indexofbetterindiv], indivs[i], objNum))
                //    {
                //        indexofdelteindiv.Add(i);
                //    }
                //}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
                //for (i = 0; i < indexofdelteindiv.Count; i++)
                //{
                //    indivs.RemoveAt(indexofdelteindiv[i] - i);
                //}
                最后删除掉优胜个体,这里需要注意的是删除的下标问题
                //if (indexofbetterindiv >= indivs.Count)
                //{
                //    indivs.RemoveAt(indivs.Count-1);
                //}
                //else
                //{
                //    indivs.RemoveAt(indexofbetterindiv);
                //}
                #endregion 


                //每一次循环都要找到一个霸主,即非支配个体
                for (i = 0; i < indivs.Count; i++)
                {
                    //删除掉此轮擂主支配的个体
                    if (IsBetter(tempindiv, indivs[i], objNum))
                    {
                        indivs.Remove(indivs[i]);
                    }
                    //找到新的擂主
                    else if (IsBetter(indivs[i], tempindiv, objNum))
                    {
                        indivs[i].clone(ref tempindiv);
                        //删除掉非支配集和中是存在该擂主所支配的个体
                        if (betterindivs.Count != 0)
                        {
                            int t = 0;
                            for (j = 0; j < betterindivs.Count; j++)
                            {
                                if (IsBetter(tempindiv, betterindivs[j], objNum))
                                {
                                    betterindivs.RemoveAt(j-t);
                                    t++;
                                }
                            }
                        }
                    }
                    else//没有关系的时候加入非支配集和
                    {
                        betterindivs.Add(indivs[i]);
                        indivs.Remove(indivs[i]);
                    }
                }
               
            }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值