Ja bym w ogóle nie użył genetic algorytmu do drzewa, bo co najwyżej overfitting wyjdzie, ale można użyć, chodź użycie po prostu standardowego sposobu uczenia drzewa czyli maksymalizacja information gain to powszechnie używany sposób.
Zrobienie takich mutacji żeby ilość pod gałęzi też się czasem zwiększała lub redukowała to znacznie trudniejsze do zaimplementowania.
Ogólnie w genetycznym musisz w jakiś sposób zrobić kodowanie najlepiej do binarnego kodu, wtedy krzyżowanie jest proste do wykonania, bo tylko bierzesz powiedzmy kilka bitów od jednego i drugiego rodzica genów i razem masz nowy genom dziecka.
Każdy osobnik populacji to jedno drzewo, w sumie to by wyszło coś podobnego jakbyś wygenerował losowe 100 drzew i wyuczył, każde każde koduje wszystkie 3 feature, ale przy bootstrapowaniu features jak to jest w random forest czasem wartości się powtarzają.
Teoretycznie wyjdzie to coś podobnego do tego jakbyś po prostu wygenerował 100 drzew, dopasował do danych i wybrał 10 najlepszych.
Jeśli by drzewo zawsze przechodziło 3 rozgałęzienia.
To kodujesz bitowo np. operacja i wartość, potem dla następnego, potem dla następnego.
Funkcję oceny robisz tak, że pierwszy warunek sprawdzasz z pierwszym feature i jak true to 0 jak false to kolejne pod rozgałęzienie, jak true 0 jak false itp. i na końcu 1.
Ewentualnie możesz dodać dodatkowe bity, które by określały czy w prawo się rozrasta czy w lewo drzewo czy inaczej to zakodować, bo nie ma tu ograniczeń w kreatywności.
Ale ja tak tylko mówię jak to można zrobić, bo w matematyce to dowolny sposób jest prawidłowy nie ma żadnych ograniczeń musisz jakoś zakodować informacje tak, żeby łatwo można było modyfikować funkcję, którą potem odkodujesz z tych bitów.
I mutację dawaj nie większą niż 1%, czyli losowego flipnięcia bita bo to po prostu psuje już później wyniki.