0

母集団から染色体を削除する方法を書こうとしています。私が書いた方法は以下です。コードを実行すると、範囲外のエラーが発生します。人口は で構築されますArrayList。このgetChromosomeFitnessメソッドはint値スコアを返します。誰かが私のエラーを見つけることができますか?

void removeWorst()
{   
  int worst = population.get(0).getChromosomeFitness();
  int temp = 0; 

  for(int i = 1; i < population.size(); i++)
  { 
    if (population.get(i).getChromosomeFitness() < population.get(worst).getChromosomeFitness())
    {
      worst = population.get(i).getChromosomeFitness();
      temp = i;
    }
  }
  Chromosome x = population.get(temp);
  population.remove(x);
}
4

5 に答える 5

3

きっと変わるはずです

if (population.get(i).getChromosomeFitness() < population.get(worst).getChromosomeFitness())

if (population.get(i).getChromosomeFitness() < worst)
于 2012-04-30T12:52:10.390 に答える
0

この問題は、オブジェクト自体ではなく、実際のフィットネスを得ているようです。問題は次の行にあります: int worst= population.get(0).getChromosomeFitness();. これは、あなたが言ったように、リストのサイズに関係のない整数値を返しています。これは染色体の適合性であり、リストのサイズをはるかに超える可能性があります。

これで問題は解決するはずです:

void removeWorst()
{  
  int temp=0;   

  for(int i=1; i <population.size();i++)
  { 
    if (population.get(i).getChromosomeFitness() < population.get(temp).getChromosomeFitness())
    {
      temp=i;
    }
  }
  Chromosome x= population.get(temp);
  population.remove(x);
}

そうは言っても、これを行うより適切な方法は、カスタム コンパレータを使用してリストを並べ替えてから、最後の要素を単純に削除することです。

于 2012-04-30T12:52:13.840 に答える
0

populationこの行にインデックス 0 の要素があることを保証しません。

int worst= population.get(0).getChromosomeFitness();

これをメソッドに追加してみてください:

void removeWorst() { 
   if (population.isEmpty()) {
      return;
   }
...
于 2012-04-30T12:49:13.403 に答える
0

コードには潜在的な問題がいくつかあります。

int worst= population.get(0).getChromosomeFitness();

population.isEmpty()それが偽であることを確認する必要があります

population.get(worst).getChromosomeFitness()

同じことを確認する必要があります(worst >= 0 && worst < population.size())

于 2012-04-30T12:51:35.350 に答える
-1

人口から何かを削除しようとする前に、そこに何かがあることを確認してください。

于 2012-04-30T12:56:34.897 に答える