2013-01-07 151 views
0

我正在将NSGA ii算法实施到我的Final Year项目中。部分算法将所有可能的解决方案分为前沿,即占主导地位的解决方案和未命名的解决方案ArrayList中的元素对同一列表中的元素排序

我在获得支配组时遇到问题。

在一分钟我使用嵌套for循环,从未排序列表中的第一个元素,检查列表中的每个项目。如果元素是未命名的,则意味着它的软约束或硬约束小于被检查的元素,或者两者都小于。我的想法是说如果这不是真正的脱离嵌套循环并转到第一个循环。如果它通过整个列表而不被支配,则会检查它是否已经被检查过,如果它已经被指定了。我希望这是有道理的!

只是寻求帮助的任何一点开始下载,感谢:-)

基本上把所有我想要做的是检查的条件和做的东西,如果条件吃了嵌套循环内的

满足
public void sortIntoFronts(ArrayList<Chromosome> c) 
    { 

    ArrayList<Chromosome> UnsortedSet = new ArrayList<Chromosome>(); 
    ArrayList<Chromosome> UndominatedSet = new ArrayList<Chromosome>(); 
    ArrayList<Chromosome> DominatedSet = new ArrayList<Chromosome>(); 

    UnsortedSet = c; 

    Chromosome a = new Chromosome(); 
    Chromosome b = new Chromosome(); 

    for (int x = 0; x<=UnsortedSet.size()-1; x++) 
    { 

     a=UnsortedSet.get(x); 

     for(int y = 0; y<=UnsortedSet.size()-1;) 
     { 

      b=UnsortedSet.get(y); 

      if(a.SoftConstraints<=b.SoftConstraints || a.hardConstraints<=b.hardConstraints) 
      { 
       y++; 
      } else 
      { 
       break; 
      } 

      if(y==UnsortedSet.size()-1) 
      { 
       UndominatedSet.add(a); 
      } 
     } 
    } 
} 

基本上把所有我想要做的是检查的条件和做的东西,如果条件吃了嵌套循环内得到满足,使用此代码some1能帮我

for (int x = 0; x<=UnsortedSet.size()-1; x++) 
{ 

    a=UnsortedSet.get(x); 

    for(int y = 0; y<=UnsortedSet.size()-1;y++) 
    { 

    b=UnsortedSet.get(y); 

    } 
} 
+2

您应该尝试遵循Java代码的Java编码约定。 – adarshr

回答

0

我真的不明白你的问题是什么。但要回顾:

  1. a是可悲的主宰b,当且仅当a.SoftConstraints<=b.SoftConstraints || a.hardConstraints<=b.hardConstraints成立。
  2. a是可悲的是在同一个主导的前面,b当且仅当a.SoftConstraints==b.SoftConstraints || a.hardConstraints==b.hardConstraints持有其他情况下基于a

b主宰这个你可以定义

  • 一个Comparator创建一个有序列表你的未分类集合。然后,您可以遍历该排序列表。你的内部循环只是对外部循环已经进行的子列表的迭代(或者取决于外部循环已经进行的排序顺序)。你必须采取行动,而不是每一次内循环的迭代。

  • 相关问题