algorytmy genetyczne - generowanie tabeli

0

mamy tabela np 10x10
zalozenia sa takie:
-wypelnic tabele wartosciami ze zbioru np {0,1,2}
-suma wartosci w kazdym wierszu ma byc rowna 10
-suma wartosci w kazdej kolumnie ma byc 5

w sumie nie wie, co to moze byc osobnikiem, co genem itd...
zalozmy, ze osobnikiem jest kazda kolumna. jak powinna wygladac funkcja przystosowania dla dla takiego osobnika?
czy w ogole da sie to rozwiazac za pomoca AG?
przystosowania danego osobnika zalezy od innych osobnikow. jest to dosc ciezki (jak dla mnie) przypadek.
zwykle rozwiazuje sie problemy, gdzie srodowsko zycia osobnikow jest stale, a naszym zadaniem jest znalezienie osobnika najlepiej przystosowanego.
w moim przypadku trzeba znalezc grupe osobnikow wspolgrajacych ze soba.
a moze ja zle do tego podchodze? moze jako osobnika powienienem traktowac cala tabele?

0
Karolaq napisał(a)

mamy tabela np 10x10(...)
-suma wartosci w kazdym wierszu ma byc rowna 10
-suma wartosci w kazdej kolumnie ma byc 5

Dla tego typu wartości nigdy nie wymyślisz. Dlaczego?
10 wierszy o długości 10 to 100 komórek, czyli cała tabela.
10 kolumn o długości 10 to też 100 komórek, też cała tabela. Dla przykładu popatrz:

1 2 3 4 5 6 7 8 9 0
2 3 4 5 6 7 8 9 0 1
3 4 5 6 7 8 9 0 1 2
4 5 6 7 8 9 0 1 2 3
5 6 7 8 9 0 1 2 3 4
6 7 8 9 0 1 2 3 4 5
7 8 9 0 1 2 3 4 5 6
8 9 0 1 2 3 4 5 6 7
9 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 9

Suma w każdym wierszu wynosi 45, w każdej kolumnie 45. Łączna suma to 450. Nie da się, licząc poziomo, uzyskać łącznie dla wszystkich np. 450, a pionowo, 225. Czyli krótko mówiąc, (1+2)+(3+4) = (1+3)+(2+4).

A gdyby dać po równo, to byłoby prościutkie, na przykład w każdej kolumnie i wierszu 13 = 3+3+3+3+1+0+0+0+0+0, liczby z zakresu {0, 1, 2, 3} w tabeli 10x10 (coś jak tablica kodów w szyfrze Vinegera):

3 3 3 3 1 0 0 0 0 0  => 13
0 3 3 3 3 1 0 0 0 0  => 13
0 0 3 3 3 3 1 0 0 0  => 13
0 0 0 3 3 3 3 1 0 0  => 13
0 0 0 0 3 3 3 3 1 0  => 13
0 0 0 0 0 3 3 3 3 1  => 13
1 0 0 0 0 0 3 3 3 3  => 13
3 1 0 0 0 0 0 3 3 3  => 13
3 3 1 0 0 0 0 0 3 3  => 13
3 3 3 1 0 0 0 0 0 3  => 13
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
1 1 1 1 1 1 1 1 1 1
3 3 3 3 3 3 3 3 3 3

Czyli albo to jest nierozwiązywalne, albo da się rozwiązać bardzo prosto. Na pewno da się to rozwiązać algorytmem genetycznym, ale pytanie - po co?

0

Pytanie Karolaq bardzo przypomina mi zadanie konkursowe na ITPW z przed roku. Zwycięzca (lub jeden z czołówki) wykorzystał podobną tabelkę i natknął się na analogiczny problem do tego o którym wspominasz.

Opisał rozwiązanie bardzo dokładnie na forum, które niestety zostało wyczyszczone z racji nadchodzącej kolejnej edycji ITPW.

Poszukaj, a znajdziesz, jeśli bardzo Ci zależy. Z tego co pamiętam, opisał to w PDF'ie.

0

Karolq: w tym Twoim zadaniu oczywiście musi być coś nie tak bo suma w wierszach i w kolumnach łącznie nie może być nierówna, a z tego co piszesz wynika że ma być

Jeśli chodzi o algorytmy genetyczne w ujęciu klasycznym nie mam możliwości kontrolowania w jakiś sposób zarówno budowy jednego osobnika jak i całej populacji. Więc jeśli by przyjąć że osobniki to kolumny to nie da się kontrolować wierszy, a jeśli że wiersze to kolumn. W tej sytuacji do tego zadania - zakładając że coś z tymi liczbami w kolumnach i wierszach wyjaśni się - nie bardzo można te algorytmy zastosować.

Oczywiście można próbować z tworzeniem osobnika jednego z całej tabeli i pewnie coś uda się z tym zrobić ale to faktycznie takie na siłę wrzucanie tutaj algorytmu genetycznego.

0

Mój błąd, wybrałem te wartości bez zastanowienia. ale nie chodzi tu o wartości. Ja sie pytam tak ogólnie. Jest balica NxM w wierszach sumy mają wynosić ileś tam, w kolumnach ileś tam.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.