Kodowanie zmiennych w Algorytmach Genetycznych

0

Cześć,
Przymierzam się do napisania Algorytmu Genetycznego i mam dylemat jak przechowywać zmienne w postaci binarnej.
Praktycznie w każdej analizowanej przeze mnie implementacji była tworzona tablica typu char lub bool i każda komórka przechowywała liczby 0 lub 1.
Takie rozwiązanie jest proste i bardzo czytelne.

Ja jednak rozważam czy nie lepiej byłoby utworzyć dla każdej optymalizowanej zmiennej dodatkową zmienną typu unsigned i przechowywać na jej bitach te informacje.
Takie rozwiązanie na pewno pozwoli zaoszczędzić sporo pamięci (do 8x) ale czy nie stracę na wydajności (która jest dla mnie priorytetem)?
Pytam, bo zdaje się, że wydobycie informacji z danego bitu jest dość kłopotliwe (wymaga tworzenia jakiś masek, przesunięć bitowych itp.) i nie wiem, czy jest sens się w to tak bawić?
W przypadku tablicy typu char/bool mam łatwy dostęp do każdego "bitu" i moje operacje ograniczają się praktycznie do jednego if-a i ew. przypisania nowej wartości (1/0)...

Co wy sądzicie na ten temat?
Znacie jakieś implementacje, gdzie jest to właśnie tak rozwiązane?
Zdaje się, że @_13th_Dragon w jednym z postów zasugerował, że profesjonaliści tak właśnie by zrobili - ale czy na pewno?

Drugie pytanie to jeśli zostać przy tablicy to czy ma znaczenie czy wybrać char czy bool? W sumie oba typy są jedno bajtowe...

Pozdrawiam i z góry dzięki za waszą pomoc.

1

vector<bool> Tb; - działa na bitach i w nic (przynajmniej jawnie) się nie bawisz.
Przy współczesnych rozmiarach pamięci kwestia oszczędzania pamięci jest mało sensowna.

0
_13th_Dragon napisał(a):

Przy współczesnych rozmiarach pamięci kwestia oszczędzania pamięci jest mało sensowna.

Pytałem głównie pod kątem wydajności - bo na tym głównie mi zależy - myślałem, że może będą jakieś minimalne różnice ;-)
Ale dobrze wiedzieć, że vector<bool> rozwiązuje mój dylemat :D

0

Wydajność w porównaniu do zwykłej tablicy bool ewidentnie spadnie.

0
_13th_Dragon napisał(a):

Wydajność w porównaniu do zwykłej tablicy bool ewidentnie spadnie.

Ale w porównaniu do tablicy statycznej czy również dynamicznej? Tzn. czy vector<char> będzie w takim razie lepszym rozwiązaniem? (nie zależy mi na pamięci).

0

Huh, sprawdziłem! Różnica jest kolosalna... Tzn. nie ma sensu bawić się z bool-em - przynajmniej w wersji vector<bool> ;] Lepiej zainwestować w char-a :)

1

Sugerowałbym:

vector<valarray<bool> > Generation(PopulationSize,valarray<bool>(GenomSize));
0

Huh, pomogło! Dzięki ;-)
Do tej pory nie znałem klasy valarray ;)
Ale wynik jest taki sam dla char-a ;P

0

Po kego masz kodować/dekodować char'a jeżeli masz bool

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