Sudoku (3). Zamrznutá evolúcia a inteligentný dizajnér

17. novembra 2015, Tibor Menyhért, programovanie sudoku

1. časť 2. časť

V skripte sudoku2 som doplnil možnosť zadať  číslice, ktoré musia byť na svojich miestach a test, či nehrozí prekročenie maximálnej doby vykonávania skriptu, ak hrozí, skript sa zastaví a používateľ kliknutím na tlačítko Pokračuj spustí nový beh skriptu s aktuálne dosiahnutou generáciou. Narazil som pritom na ďalšie obmedzenie servera na hostingu, ktorým je maximálna veľkosť dát odovzdaných metódou Post (metódou Get ich možno odovzdať ešte menej). Preto som obmedzil maximálnu veľkosť generácie na 900 jedincov. Toto obmedzenie by sa dalo obísť uložením potomkov do súboru a jeho načítaním v novom behu skriptu alebo komprimáciou odovzdávaného reťazca.

Keďže ide o nedeterministické riešenie problému, tak algoritmus riešenie niekedy nájde a niekedy nie, pričom parametre zadania sú tie isté.

Keď som sa začal zaoberať myšlienkou riešenia sudoku pomocou genetického algoritmu, povedal som priateľke matematičke: Pokiaľ  to bude fungovať, bude to dôkazom neexistencie Boha.

Bolo to viac než trúfalé tvrdenie a ona ho ihneď spochybnila. I keď algoritmus v podstate funguje, o existencii – neexistencii Boha to nehovorí nič. Je však matematickou ukážkou toho, že krížením a mutáciami pôvodne neusporiadaného súboru  „organizmov“ možno evolúciou dospieť k veľmi usporiadanému a na prvý pohľad veľmi nepravdepodobnému organizmu.

Skript obvykle vyrieši napríklad nasledujúce zadanie:
zadanie1

Sivou sú označené bunky, ktoré sú dopredu vyznačené a sú pevné dané, nemôžu mutovať, zelenou sú označené bunky, ktoré sú v konflikte, ak je bunka pevne daná a je v konflikte, je označená sivou, bielou sú označené bunky, ktoré nie sú v konflikte.

Počas evolúcie riešenia, niekedy dôjde k „zamrznutiu“‚ evolúcie, niekoľko generácii po sebe nevznikne potomok, ktorý by mal lepšiu životaschopnosť než najlepší predok v predchádzajúcich generáciách a tiež niekoľko generácií po sebe sa priemerná životaschopnosť nemení (ak sa priemerná životaschopnosť generácií zlepšuje, nazval by som to podpovrchovou alebo podhladinovou evolúciou, ktorá v niektorej z nasledujúcich generácií vyraší do prudkého vývoja najlepších jedincov), respektíve kolíše okolo nejakej dosiahnutej hodnoty. Podobná situácia nastáva neraz i v prírode. Spočiatku sa druh pomerne rýchlo vyvíja, ale po čase dosiahne nejaké lokálne evolučné optimum a vo vývoji ustrnie. V jednom z behov skriptu sa po 20 generáciách dosiahla životaschopnosť najlepšieho jedinca 2 a potom ďalších 39 generácií nedošlo k žiadnemu zlepšeniu, až v šesťdesiatej:riesenie1

Červenou bodkou je označený úsek zdedený od matky, predchádzajúce bunky sú zdedené od otca.

Ako by sa dali biologicky interpretovať riadkovitosť, stĺpcovitosť a štvorcovitosť?

Napríklad: Na počiatku boli po planéte roztrúsené prvotné generácie organizmov. Niektoré sa ocitli v bažine, iné vo veľmi suchom a iné v normálnom prostredí. V bažine bola výhodou riadkovitosť, v suchu stĺpcovitosť a normálnom prostredí štvorcovitosť. V každom z prostredí sa časom presadila vlastnosť najvýhodnejšia pre dané prostredie. Keď sa však tieto organizmy vyskytli v prostredí, ktoré bolo nejaký čas bažinaté, potom veľmi suché a potom normálne, a takáto zmena klímy sa pravidelne či sporadicky opakovala, organizmy iba s jednou vlastnosťou neprežili, kým organizmy, ktoré mali kombináciu všetkých vlastností áno.