Algorytm genetyczny. Proszę o pomoc

0

Treść zadania to
Napisać program symulujący ewolucję populacji osobników. Populacja może liczyć dowolną liczbę osobników. Każdy osobnik zawiera chromosom, który jest ciągiem liczb naturalnych. Chromosomy mogą być różnej długości. W każdym pokoleniu wylosowywanych jest k par osobników, które się następnie krzyżują.
Plik wejściowy ma następującą postać: Każda linia zawiera jednego osobnika. Osobnik charakteryzowany jest chromosomem, który jest przedstawiony jako ciąg liczb naturalnych rozdzielonych białymi znakami. Przykładowy plik wejściowy zawierający populację złożoną z czterech osobników:

2 9 84 9 5 6 25 12
2 98 56 2 54
5 2
8 5 22 5 48 6 1 9 8 7 554 25 235 32

Plik wyjściowy ma identyczny format.

Generalnie mam zrobione czytanie z pliku, lecz gdy go czyta to spacja jest traktowana jako następna linia przez endl, ale nie mam pomysłu jak zrobić to bez tego. Poza tym nie wiem czy poprawnie działa void, bo dane się wypisują, ale ma być tak, że każda linijka jest vektorem aby móc potem to dzielić w losowych miejscach. Kompletnie nie wiem jak to zaprogramować, niby w głowie mam pomysł, ale jak próbuję to jest kłopot. Proszę o pomoc i wyjaśnienie tego, gdyż jest to mi potrzebne.

2020-12-08 (1).png

#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include<sstream>
#include<time.h>
struct osobnik{
    std::vector<int> allel;
};
void wczytywanie()
{
    std::ifstream plik;
    plik.open("Chromosom.txt");
    if (plik.good() == false) std::cout << "Plki jest umieszczony w zlym folderze, lub nie istnieje";
    std::vector<osobnik> chromosom;
    std::string l;
    while (getline(plik, l)){
        int temp;
        std::stringstream pom(l);
        chromosom.emplace_back();
        while (pom >> temp){
            std::cout << temp << std::endl;
            chromosom.back().allel.push_back(temp);
        }

    }
    plik.close();
}
int main()
{
    wczytywanie();

    osobnik x;
    std::cout << "\n\n\n??? ";
    std::cout << "\n\nilosc elementow vektora : " << x.allel.size();

}

Plik wejściowy jest taki jak w poleceniu.
W załączniku jest to co wyświetla konsola.

0

Ale Ty masz problem z algorytmem genetycznym czy jezykiem programowania?

0

zamiast:

std::string l;
while (getline(plik, l)){
int temp;
std::stringstream pom(l);
chromosom.emplace_back();
while (pom >> temp){
std::cout << temp << std::endl;
chromosom.back().allel.push_back(temp);
}
}

Daj:

for(std::string line;getline(plik,line);cout<<endl)
{
    std::stringstream pom(line);
    chromosom.emplace_back();
    for(int temp;pom>>temp;std::cout<<temp<<' ') chromosom.back().allel.push_back(temp);
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0