0

私は、遺伝的アルゴリズムの「交差」操作を実行するコードの作成に取り組んでいます。もっと簡単に言えば、2 つのベクトル 'a' と 'b' があり、それぞれが 2 つの部分に分割され、a は 'a1' と 'a2' になり、'b' は 'b1' と 'b2' になります。これらの部分は、a が 'b2' の次に 'a1' になり、'b' が 'a2' の次に 'b1' になるように再結合されます。

私が使用しているライブラリ ( EvolvingObjects ) のため、上記の操作を実行するクラスのインスタンスに「a」と「b」を渡す必要があります。このクラスで 'a1'、'a2'、'b1'、および 'b2' を作成するのに問題があります。だれかが理由を教えてくれることを期待していました。私のコードは以下です。

class Quad : public std::vector<int>
{
    public:
    Quad() : std::vector<int>(4,0) {
    }

}; 

class QuadInit : public eoInit<Quad>
{
    public:

    void operator()( Quad& q ) {
        for( unsigned int i=0, n=4; i<n; ++i) {
            // rng is the random number generator of EO
            q[i] = rng.random(10);
        }
    }
};

class QuadVec : public eoVector<double,Quad>
{};


class eoQuadCross: public eoQuadOp<QuadVec>{
public:
    std::string className() const {return "eoQuadCross";}
    QuadVec a1;
    QuadVec a2;
    QuadVec b1;
    QuadVec b2;

    bool operator() (QuadVec& a, QuadVec& b){

    int cross_position_a = rng.random(a.size()-1);
    int cross_position_b = rng.random(b.size()-1);

    for (int i = 0; i < cross_position_a; i++){
        a1.push_back(a[i]);
    }
    for (int i = cross_position_a; i < a.size(); i++){
        a2.push_back(a[i]);
    }

    for (int i = 0; i < cross_position_b; i++){
        b1.push_back(b[i]);
    }
    for (int i = cross_position_b; i < b.size(); i++){
        b2.push_back(b[i]);
    }

    //Return bool
    return true;
}
4

0 に答える 0