Niedawno zadałem to pytanie i wydaje się, że wniosek jest taki, że wykorzystanie programowania genetycznego ( GP ) do tworzenia proceduralnych treści gier nie zostało tak naprawdę zrobione. Chcę to zmienić.
Jestem pewien, że GP może zostać wdrożony, aby pomóc znaleźć nowy generator terenu. Pytanie, które zadaję, brzmi: w jaki sposób można to osiągnąć?
Wszystkie GP mają kilka podstawowych części, które można uogólnić dla wszystkich GP (selekcja rodziców, rekombinacja, mutacja, przeżycie). Mogę je rozwiązać na własną rękę. Problem pojawia się w określonych częściach problemu. Oto jak reprezentujesz problem w kodzie (zwykle używa to drzewa) i jak oceniasz, jak dobry może być generator (może to być jedna lub więcej wartości).
Pytania w skrócie:
Jak przedstawilibyście generator terenu w sposób, który można sparsować do drzewa?
Jakiego rodzaju teren musiałby to wygenerować? (mapa wysokości, wykres wierzchołków, ...)
Im mniej jest to oparte na mapie wysokości, tym lepiej.
Jaka byłaby wykorzystana do oceny przydatności rozwiązania?
np .: chcemy interesującego terenu, aby jedną z wartości była średnia zmiana wartości normalnych dla każdego wierzchołka w terenie.
źródło
Odpowiedzi:
Możesz mieć trochę szczęścia w podejściu podobnym do obrazów genetycznych Karla Simsa .
Używa prostego zestawu operatorów w języku podobnym do LISP, dzięki czemu dane wyjściowe dowolnego operatora mogą być wykorzystane do wpływania na obraz, podobnie jak w niektórych językach modułu cieniującego (tj. Skalar byłby wartością w skali szarości,
vector3
byłbyRGB
itd. ).Chociaż myślę, że to są rzeczy związane z implementacją, więc prawdopodobnie potrzebujesz jego słów kluczowych, które (iirc) zawierają wszystkie podstawy:
sin, cos, tan
itp.)x, y
)sqrt, pow, abs, inverse
)fBm, noise2, noise3
)mandelbrot, julia
)lerp, quad, step, smoothstep
)(Niektóre z powyższych mogą nie być w jego implementacji; znalazłem jego pracę dawno temu i faktycznie podjąłem kilka prób tego, co opisujesz przez lata - więc wspomnienia mogą przeciekać :)
Dzięki temu jest interesujący (i szybki)
Miałem trochę szczęścia dzięki wielowarstwowemu podejściu, które znacznie zmniejszyło liczbę martwych ewolucji.
Jednak...
Teraz wygodnie pominąłem algorytm fitness , najczęściej stosowałem podejście Karla Simsa do „nienaturalnej selekcji”, w której obecna generacja znajduje się na środkowym kwadracie grona potomków (spopularyzowanych przez Elektronarzędzia Kaia w ciągu dnia - oto obraz tego, co mam na myśli ) ..
Jednak prawdopodobnie mógłbyś mieć zestaw zdjęć treningowych, być może niektóre ze zdjęć satelitarnych i kilka sztucznych o szczególnych cechach, a następnie może użyć na nich analizy falkowej lub 2D FFT w stosunku do testowanego terenu?
To ciekawy temat, ale wątpię, na co potrzebowałeś odpowiedzi :)
EDYCJA: ahh. musiałem usunąć kilka linków, ponieważ jestem nowym użytkownikiem: - |
źródło
Nie jestem pewien, czy potrafisz odpowiedzieć na to pytanie, ale wyjaśniam, dlaczego odpowiedź może być wystarczająco pomocna. Tak więc odpowiedzi w skrócie:
Algorytmy genetyczne są zwykle używane do rozwiązania znanego problemu, w którym można zdefiniować środowisko za pomocą reguł. Następnie możesz utworzyć zestawy danych reprezentujące różne właściwości, które wpływają na to, jak rzeczy reagują na reguły. Następnie komputer rozgrywa „rundę” z początkowym zestawem danych, wybiera górny numer X, miesza ich wartości po sparowaniu ich ze sobą i wykonuje kolejną rundę. Typowym przykładem tego jest „hodowanie lepszego trolla” (robienie znajdź zestaw wartości, w których troll ogólnie radzi sobie bardzo dobrze w swoim otoczeniu (jest w stanie polować i jeść, zabijać lub trzymać się z dala od mieszkańców wioski, może zbierać łupy i gromadzić wszystkie lśniące przedmioty, których pragnie itp.).
Po prostu nie jestem pewien, czy to, co próbujesz osiągnąć, ma zastosowanie w dziedzinie generowania terenu. Jedyne, co mogę wymyślić, to oceny zawartości gry, w których nie chciałeś planować świata, ale chciałeś stworzyć taki, w którym ścieżki AI można obliczyć ładnie lub coś w tym rodzaju. Mimo to szukasz jednego lub co najmniej ograniczonego zestawu światów.
źródło
Zdecydowanie wykres wierzchołkowy (siatka), jest kompaktowy pod względem pamięci i może być rasteryzowany (mozaikowy) na żądanie.
Automaty komórkowe. Mogę wymyślić dwie implementacje:
Automaty z zestawami reguł, być może z elementami automatów skończonych (gdy brany jest pod uwagę stan obecny, np. Licznik prób lub czas bezczynności).
Sam zestaw reguł może być reprezentowany jako rozgałęzione drzewo decyzyjne lub prosta partia poleceń (nie jestem pewien, czy zadziała)
To tylko jeden zestaw reguł dla każdego węzła
Światowi budowniczowie. Zamiast stosować solver dla każdego węzła, możesz utworzyć tylko kilka z nich i pozwolić im poruszać się po siatce.
Mimo to obawiam się, że drugie podejście musi być poparte pierwszym: początkowa losowość musi zostać wygładzona i nie jestem pewien, czy budowniczowie poradzą sobie z tym. W końcu każda żywa komórka ma mitochondria.
Integralność powstałego terenu - nie powinno to wyglądać jak miszmasz. I różnorodność - generalnie chcemy, aby jak najwięcej dostępnych wariantów było reprezentowanych (płaskie pustkowie z jednej krawędzi na drugą nie jest zabawne). Może coś bardziej złożonego, jak na przykład sąsiednie węzły (tundra na środku pustyni, co?)
Muszę spróbować sam z moim generatorem siatki, kiedy / jeśli mam trochę wolnego czasu =)
źródło