1

グローバル ベクトルを作成します。その後、push_back 関数で値を追加します。しかし、ベクトルの任意のインデックスを取得したい場合、プッシュされた最後の値が常に返されます。コードは次のとおりです。

struct Choromosome{
    float fitness;
    float selectionProb;
    bool isSelected;
    int conflictNum;
    int* geneCode;
};
int SIZE = 6;
int START_SIZE = 50;
vector<Choromosome> population;

void initialize(){
  for(int k = 0; k < START_SIZE; k++){
     Choromosome c;
     int* code = new int[SIZE];
     srand(time(NULL));
     for(int i = 0; i < SIZE; i++){
        code[i] = rand() % SIZE;
     }
     c.geneCode = code;
     population.push_back(c);
  }
  int rand1 = rand() % START_SIZE;
  int rand2 = rand() % START_SIZE;     
  std::ostream_iterator< int > output( cout, " " );
  std::copy( population[rand1].geneCode, population[rand1].geneCode+ SIZE, output );
  std::copy( population[rand2].geneCode, population[rand2].geneCode+ SIZE, output );
}
4

1 に答える 1

4

srand(time(NULL));問題は、反復ごとにシードしていることです。

生成された数値を確認すると、すべての で同じであることがわかりますChromosome

forそれを取り出すかsrand()、現在の時間パラメーターを与える必要があります。

于 2012-12-19T00:27:57.677 に答える