To może wyjaśnię dlaczego takie podejście zastosowałem. Algorytm genetyczny polega na wybraniu dwóch osobników, "złamaniu" ich w tym samym miejscu (lub kilku miejscach) i wymiana pomiędzy nimi odpowiednich fragmentów. Na starcie losowo więc wypełniamy cały 64-polowy chromosom liczbami od 1 do 8 co tworzy "ścieżkę przejścia". Zastosowanie "kodowania polami" sprawiłoby, że na złamaniu po wymianie genomu w dużym stopniu skok byłby niemożliwy do wykonania wedle zasad. Zakodowanie ruchami sprawia, że dla algorytmu nieistotna jest pozycja końcowa ruchu, ale sam ruch, czyli po wymianie materiału ścieżka jest możliwa do prześledzenia. Może być lepsza, może być gorsza, ale na pewno możliwa do sprawdzenia. Po etapie wymiany materiału genetycznego może nastąpić mutacja (z pewnym prawdopodobieństwem), czyli niekontrolowana zmiana jakiejś pozycji w chromosomie. To przy kodowaniu ruchami też nie jest problemem

Najważniejsza z punktu algorytmu część następuje teraz: funkcja oceny. To ona wyznacza najlepsze osobniki. Przy ruchu skoczka oceni ona ile pól przeszedł według zasad. Gdy to się zakończy cały proces jako kolejna epoka następuje od początku. Czyli wybranie najlepszych parami i krzyżowanie, mutacja, ocena. Trwa do albo do padu kompa, albo przy dobrze dobranych parametrach skończy się szybciutko i znajdzie w końcu osobnika, który przeszedł wszystkie pola jednokrotnie. Jego chromosom to właśnie droga z rozwiązaniem

Z prac doszedłem do wniosku, że powinno być wiele takich chromosomów (około 10-15k) i przy łamaniu w jednym miejscu najlepiej gdy prawdopodobieństwo mutacji jest w miarę wysokie, bo bez tego szybko dochodzi do sytuacji, że większość chromosomów waha się między 56-62 polami i dopiero mutacje coś zmieniają na plus.
Jako bonus dodam, że jest dział AI, który nazywa się "programowanie genetyczne" i działa na identycznej zasadzie

Problemem algorytmów genetycznych jest ścisłe dopasowanie do problemu i nie są one uniwersalne niestety.
A wracając do zakodowania tablicy jako dwuwymiarowej, to uważam to za przerost formy nad treścią. To dokładnie to samo co jednowymiarowa z indeksami modulo 8

Ruch piona to tylko dodanie lub odjęcie konkretnej wartości (bicie to odchyłka jej o +/-1). Tak naprawdę więc całość jest jedynie zbiorem operacji dodawania i odejmowania oraz sprawdzania pól na których można stanąć po tych operacjach. Kombinowanie z manipulacją dwoma indeksami tablicy jednocześnie (tak jest nawet w ruchu wieżą, tyle że jednemu z nich nakazujesz +0) jest IMHO niepotrzebne, skoro mozna je zredukować do prostszej postaci.
Ostatecznie uważam, że tak naprawdę zależy to od tego, czemu ma służyć rozwiązanie problemu. Może się okazać, że Twoje podejście będzie w określonym przypadku skuteczniejsze, ale dla problemu skoczka, uwierz, że algorytmy bez specjalnych modyfikacji potrafią utknąć na wspomnianym przypadku. Znajdą drogę przez 63 pola i dalej będą liczyły bez efektu. Można nawet próbować tak modyfikować algorytm, by obliczał on sam pewne parametry na podstawie zdefiniowanej wielkości planszy. Ale może nie rozgrzebujmy problemu skoczka szachowego, bo to pewnie nie z nim się mierzy autor. Ale jesli tak, to myślę, że w necie znajdzie nie tylko podpowiedzi, ale gotowy kod, jeśli tylko pogrzebie pod "knight tour" w google

Gdy zaś mowa o szachach jako całości to można już przemyśleć wariant dwuwymiarowy, bo kilka problemów on rozwiązuje w przystępniejszy sposób, ale tylko dla kogoś kto ma problem z "widzeniem" ruchu przy zwykłym dodawaniu i odejmowaniu. Dla reszty użycie jedno- lub dwuwymiarowej formie to tylko inna notacja i nic więcej. Jak już wspomniałem, zwykłe modulo 8 z 1-wymiarowej robi 2-wymiarową, a mnożenie wiersza razy 8 i dodawanie drugiego indeksu zrobi działanie odwrotne. To tylko notacja i nic więcej