2014-12-11 11 views
11

do badań nad programowaniem genetycznym, chciałbym wdrożyć system ewolucyjny na podstawie llvm i zastosować mutacje kodu (być może na poziomie IR).Modyfikacja kodu na podstawie llvm dla programowania genetycznego?

Znalazłem llvm-mutate, który jest całkiem przydatny przy wykonywaniu mutacji punktowych. O ile zrozumiałem, instrukcje są zliczane/numerowane, można wtedy np. usuń numerowaną instrukcję.

Jednak wprowadzenie nowych instrukcji wydaje się możliwe jako jedno z dostępnych stwierdzeń w kodzie. Prawdziwa mutacja umożliwiłaby jednak wstawienie dowolnej dozwolonej instrukcji IR, niezależnie od tego, czy jest używana w kodzie, który ma zostać zmutowany. Ponadto powinno być możliwe wstawianie wywołań funkcji bibliotek połączonych bibliotek (nie używane w bieżącym kodzie, ale prawdopodobnie dostępne, ponieważ biblioteka została połączona w klang).

Czy przeoczyłem to w llvm-mutate lub czy to naprawdę nie jest możliwe do tej pory?

Czy są jakieś projekty próbujące/już mają implementację (ed) takich mutacji dla llvm?

llvm ma wiele narzędzi do analizy kodu, które powinny umożliwić wdrożenie wyżej wymienionego podejścia. llvm jest ogromny, więc jestem trochę zdezorientowany. Wszelkie wskazówki, które narzędzia mogą być pomocne (np. Uzyskanie listy dostępnych funkcji bibliotecznych itp.)?

Dzięki Alex

Odpowiedz

2

Bardzo ciekawe pytanie. Intryguje mnie możliwość programowania genetycznego na poziomie binarnym przez jakiś czas. W odniesieniu do tego, o co pytasz:

Z ich dokumentacji wynika, że ​​mutacja LLVM nie może zrobić tego, o co prosisz. Uważam jednak, że mądrze jest, jeśli tego nie robimy. Moje rozumowanie jest takie, że każdy program genetyczny w języku maszynowym nieuchronnie napotkałby na "Halting Problem", np. nie byłoby możliwe dowiedzieć się, czy losowo wygenerowana instrukcja całkowicie zawiedzie cały komputer (na przykład przypisując wartość wskaźnikowi zarezerwowanemu dla systemu operacyjnego), lub może działać wiecznie i wykonywać wszystkie cykle procesora. Twierdzenie Turinga mówi nam, że nie można z góry wiedzieć, czy dany program by to zrobił. Pamiętajcie, że mutacja LLVM może spowodować, że całkowicie nieszkodliwy program nadal będzie się zawieszał lub będzie działać wiecznie, ale sądzę, że ich podejście czyni to mniej prawdopodobnym, jedynie poprzez przyjmowanie istniejących instrukcji.

jednak coś takiego jak „niemożliwości” tylko odstrasza naukowcy, inżynierowie nie: -) ...

Co mam na myśli to: W naturze, prawdziwe mutacje dużo pracować bardziej jak LLVM-mutować tak jak to, co robimy w normalnym Programowaniu Genetycznym. Innymi słowy, po prostu wymieniają litery z bardzo ograniczonego zestawu (A, T, C, G) i każda możliwa zmiana wynika z tego. Możemy mieć program lub zestaw programów z początkowym zestawem instrukcji oraz zestaw "możliwych funkcji" powiązanych lub zdefiniowanych w programie. Większość z tych funkcji nie byłaby faktycznie używana, ale będą one dostępne w celu zapewnienia "surowego DNA" dla mutacji, tak jak w przypadku our DNA. Ten zestaw funkcji miałby kompletny (lub częściowo kompletny) zestaw możliwych funkcji dla przestrzeni problemowej. Następnie po prostu używamy podstawowych operacji, takich jak te w mutacie LLVM.

Możliwe problemy mimo:

  • Biorąc pod uwagę ilość możliwej zmienności, jedynym sposobem, aby mieć dopuszczalne czasy wykonania byłoby mieć ogromne ilości mocy obliczeniowej. Możliwy do osiągnięcia w chmurze lub z procesorami graficznymi.

  • Nadal musiałbyś walczyć z problemem zatrzymania pana Turinga. Jednak myślę, że można to rozwiązać, uruchamiając rozwiązania w "Piaskownicy" o numerze , która nie zawiedzie, jeśli rozwiąże się problem: Coś jak jednorazowa maszyna wirtualna lub pojemnik podobny do Dockera, taki jak , z ograniczenie czasowe (aby wydostać się z nieskończonych pętli). RozwiĘ ... zanie, które zawiesza się lub przestaje działać, byłoby najgorsze z możliwoś ci , tak, że programy byłyby odbiegajĘ ... ce od tych ś cieżek .

Na pytanie dlaczego to zrobić w ogóle, widzę szereg interesujących wniosków: programy samouzdrawiania, programy, które samo optymalizacji dla konkretnego środowiska, programu „szczepienie” przed lukami, mutowania wirusy, jakość zapewnienie, itp.

Myślę, że istnieje tutaj potencjalny projekt open source. Byłby szalony, niebezpieczny i porywający wir: tylko mój rodzaj projektu. Licz mi, jeśli ktoś to robi.

+0

Czy próbowałeś tego dokonać? O ile mogę powiedzieć, nikt nie ma. Znalazłem slash/A, który jest innym podejściem do programowania genetycznego nie opartego na AST. –

Powiązane problemy