W ramach zadania będę musiał napisać algorytm programowania genetycznego , który prognozuje poziomy zanieczyszczeń atmosferycznych. Ponieważ nie mam doświadczenia, czy ktoś może mi wskazać propozycje języków programowania, w których pisane będą programy ewoluujące .
Wyjaśnienie: Nie pytam, w jakim języku będę pisać sam algorytm genetyczny (ponieważ będę mógł sam podjąć decyzję), pytam w jakim języku programowania powinny być tworzone programy ewoluujące.
Mój instruktor zasugerował Lispa, ale nie podoba mi się ten pomysł - po pierwsze musiałbym popracować nad jakimś abstrakcyjnym drzewem składni, po drugie niezawodnie wykonywanie skrzyżowań na strukturze drzewa może być piekłem.
Wolę używać coś, że jest przeznaczony do programowania genetycznego jak slash / A . SlashA nie wymaga pracy na AST-ach. Programy w kodzie bajtowym to tylko tablica liczb całkowitych, które można zmienić w dowolnej niezbędnej wersji, ponieważ każda tablica liczb wewnętrznych reprezentuje jakiś program slash / A.
Dodatkowe uwagi:
- Chciałbym uniknąć manipulowania AST!
- Ten problem jest trudny (może nie tak trudny jak przewidywanie wartości zapasów). Wynika to z faktu, że (najprawdopodobniej) nie mamy wystarczającej ilości informacji wejściowych (istnieją pewne ukryte parametry). Stworzenie modelu, który ma lepszą wydajność niż ten, który zwraca średnią, jest nieco wyzwaniem (średnie modele mają 35% MAPE), większość modeli ma MAPE około 25%, najlepiej 20%.
- Chciałbym mieć język, który zarządza zestawami danych z wieloma funkcjami, przy założeniu, że nie jestem pewien, które są ważne. (Slash / A ma tutaj wadę --- w tym języku funkcje wprowadzania są odczytywane sekwencyjnie --- więc niektóre funkcje będą używane z większym prawdopodobieństwem).
- Chciałbym móc to zaprogramować w Pythonie, więc biblioteki Pythona byłyby świetne --- ale mogę tworzyć powiązania dla C / C ++ (bez Java, bez Matlaba itp.).
Jestem świadomy, że jest to pytanie ankietowe, więc jeśli jest za wcześnie na takie pytanie, proszę je zamknąć, ale uważam, że jest wystarczająco szczegółowe.
Jeśli zamierzasz ewoluować program, prawdopodobnie i tak będziesz manipulował drzewem składni; w ten sposób każdy ewoluowany program będzie automatycznie poprawny składniowo.
Wybierając język, musisz pamiętać o dwóch rzeczach.
Z podobnych powodów głosowałbym przeciwko językowi asemblera, chociaż maszyny wirtualne, takie jak JVM i CLR, powinny zapewnić ci coś w rodzaju siatki bezpieczeństwa.
Prawdopodobnie będziesz chciał użyć języka docelowego, który już znasz. Sam nie znam Python, ale AFAIK spełnia powyższe kryteria, więc powinien być dobrym wyborem dla twojego języka docelowego.
źródło