Pareto非支配集和的选取-擂台赛方法
2016-01-05 10:17
162 查看
原理-方法如下: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]);
}
}
}
具体代码如下:
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]);
}
}
}
相关文章推荐
- 单列设计模式,构造方法私有化
- 梅
- HTTP Status 404 Tomcat Apache & tomcat server location property is greyed in Eclipse
- http://www.sundxs.com/dxsst/jsj/sjk/4735.html
- 随机数 字母 数字
- GCD一些常用的方法
- B-spline Curves 学习之B样条曲线的导数(8)
- android
- 只能输入数字多种方法
- Extjs combox动态添加数据
- json解析
- Bootstrap引入在线路径
- 百度新闻推荐真的在推荐新闻吗
- QT学习 第一章:基本对话框--使用标准输入框
- 《程序员修炼之道》笔记
- 171. Excel Sheet Column Number
- memcached -- 运行memcached
- Android自定义控件(一)
- Android动画之补间动画(Tween Animation)实例详解
- Video streaming vs Progressive download or HTTP streaming