私のコードを少しきれいにしようとしているうちに、私は理解できないような問題に遭遇しました。私は関数にベクトル値を渡そうとしているので、メインコードではなく関数で評価を行うことができますが、実際にベクトルを正しく渡す方法はわかりません。ベクトルを関数に渡す
#include "stdafx.h"
#include <vector>
#include <random>
#include <string>
#include <fstream>
#include <algorithm>
#include <iterator>
int population_size = 10;
int number_of_variables = 3;
struct one_individual
{
std::vector<std::vector<double>>chromosomes;
double evaluation1 = 0;
double evaluation2 = 0;
double evaluation3 = 0;
double fitness = 0;
double probability = 0;
};
std::vector<one_individual> individuals;
double evaluation(std::vector<one_individual> individuals[i])
{
individuals[i].evaluation1 = 1 * individuals[i].chromosomes[0].at(0) + 2 * individuals[i].chromosomes[0].at(1) + 3 * individuals[i].chromosomes[0].at(2);
individuals[i].evaluation2 = 1.5 * individuals[i].chromosomes[0].at(0) + 3 * individuals[i].chromosomes[0].at(1) + 4.5 * individuals[i].chromosomes[0].at(2);
individuals[i].evaluation3 = 2 * individuals[i].chromosomes[0].at(0) + 4 * individuals[i].chromosomes[0].at(1) + 6 * individuals[i].chromosomes[0].at(2);
individuals[i].fitness = 1/(individuals[i].evaluation1 + individuals[i].evaluation2 + individuals[i].evaluation3);
return individuals[i].fitness;
}
int main()
{
std::random_device rd;
std::mt19937 rng(rd()); // random-number engine (Mersenne-Twister in this case)
std::uniform_real_distribution<double> dist(-10.0, 10.0);
for (int i = 0; i < population_size; i++)
{
std::vector<double>variables;
for (int j = 0; j < number_of_variables; j++)
{
variables.push_back(dist(rng));
}
individuals[i].chromosomes.push_back(variables);
}
for (int i = 0; i < population_size; i++)
{
evaluation(individuals[i]);
std::cout << "Individual " << i << " has fitness of " << individuals[i].fitness;
}
}
私はそれを読んでても過言ではありませんように、できるだけ多くのコードを凝縮しようとした、私は実際にそこにする必要がありませんまだ、すべてを考えます。
とにかく、私はベクトルの値を関数に渡そうとしましたが、うまくいきませんでした。答えは私の間違いです。
ご協力いただければ幸いです。あなたはベクトルを反復処理し、一度に一つの要素を処理したい場合は
「ベクターを正しく渡す」とはどういう意味ですか? – GMichael
あなたの意図であれば、 'double evaluation(std :: vector個体[i])'を 'double evaluation(std :: vector 個体)'に変更する必要があります。私は代わりに参照を使用して値渡しを避けるだろう... –
@Gmichael、今すぐコードがコンパイルされないので、関数に正しくベクトルを渡していないと言うでしょう。私がしたいのは、 "染色体"を関数に渡して関数内で計算ができるようにすることです。 – Milan