簡體   English   中英

使用結構/遺傳算法

[英]Using structs / genetic algorithm

作為我自己的練習,我正在嘗試創建一種遺傳算法來求解方程式。 到目前為止,我的程序可以生成隨機的“基因”,用這些“基因”填充個人,並使用這些基因進行一些基本的計算(目前,僅對“基因”求和)。

但是,我現在意識到我想實現我的適應功能,最好是為個人創建一個結構,因為我需要將基因和適應結果保持在一起,以使最適合的基因再次繁殖。

無論如何,這是我的代碼:

// GA.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <random>
#include <string>

const int population_size = 10;
const int number_of_variables = 7;

struct one_individual
{
    std::vector<std::vector<double>>individual;;
    double evaluation = 0;
    double fit = 0;
};


int main()
{
// Generate random number

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);

// Create vector that holds vectors called individual and fill size it to the amount of individuals I want to have.

std::vector<std::vector<double>>individual;

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));
    }
    individual.push_back(variables);
}

// Display entire population

for (auto &count : individual)
{

    for (auto &count2 : count)
    {
        std::cout << count2 << " ";
    }
    std::cout << "\n";
}

// Do calculation with population. At the moment I just add up all the genes (sum) and display the sum for each individual.


for (int i = 0; i < population_size; i++)
{
    int j = 0;
    std::cout << "Organism "<< i; 
    double sum = individual[i].at(j) + individual[i].at(j + 1) + individual[i].at(j + 2) + individual[i].at(j + 3) + individual[i].at(j + 4) + individual[i].at(j + 5) + individual[i].at(j + 6);
    std::cout << " is " << sum << "\n";
}

std::cout << "\n";
return 0;
}

我想我應該做的是這樣的:

for (int i = 0; i < population_size; i++)
{
    one_individual individual;
    std::vector<double>variables;
    for (int j = 0; j < number_of_variables; j++)
    {
        variables.push_back(dist(rng));
    }
    one_individual.individual.push_back(variables);
}

上面的代碼不起作用。 當我嘗試編譯時,會得到一個錯誤列表,我將其粘貼到pastebin中,因為它是一個很大的列表:www.pastebin.com/EVJaV0Ex。 如果我除去“創建個人零件”所需零件以外的所有零件,則剩下的錯誤是:www.pastebin.com/djw6JmXZ。 所有錯誤都在第41行上,這是最后一行one_individual.individual.push_back(variables);

為清晰起見,對此表示歉意。

考慮指令

one_individual.individual.push_back(variables);

其中one_individual類型struct one_individual )。

我想您應該使用one_individual類型的已定義變量 ,所以

individual.individual.push_back(variables);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM