Розвиток генератора рельєфу місцевості


12

Нещодавно я задав це питання, і, мабуть, робиться висновок про те, що використання генетичного програмування ( GP ) для створення вмісту процедурних ігор насправді не робилося. Я хочу це змінити.

Я впевнений, що GP може бути розгорнутий, щоб допомогти знайти новий генератор рельєфу. Питання, яке я отримую, полягає в тому, як це можна досягти?

Усі загальні лікарі мають декілька основних частин, які можна узагальнити для всіх лікарів загальної практики (вибір батьків, рекомбінація, мутація, виживання). Я можу це зрозуміти самостійно. Питання виникає в конкретних проблемних частинах. Ось як ви представляєте проблему в коді (зазвичай для цього використовується дерево), і як ви оцінюєте, наскільки хорошим може бути генератор (це може бути одне або кілька значень).

Питання у двох словах:

  • Як би ви представляли генератор місцевості таким чином, який можна розібрати на дерево?

  • Який ландшафт мав би це створити? (карта висоти, графік вершин, ...)

    Чим менше це базується на високій карті, тим краще.

  • Що було б використано для оцінки придатності рішення?

    Наприклад: ми хочемо цікавого рельєфу, щоб ми могли мати одне із значень середня зміна норм для кожної вершини на місцевості.


1
Я дуже відчуваю, що ти не хочеш цього робити, але GA. Наприклад, алгоритми створення шуму справді важко створити на льоту, і створити функцію фітнесу важче, ніж було б створити систему, яка її задовольняє. GA більше підходить для налаштування параметрів існуючої системи.
DampeS8N

Лікар робить цікаві рішення, про які люди ніколи не думають. Ось що я шукаю. GP важко використовувати, і це, мабуть, не було б найкращим способом використання цього в галузі, але це показало б певну велику можливість, якщо виявиться.
Алекс Шепард

Відповіді:


11

Можливо, вам пощастить із підходом, подібним до генетичних образів Карла Сімса .

Він використовує простий набір операторів на мові, подібній до LISP, так що будь-який результат оператора може бути використаний для впливу на зображення, подібно до деяких шейдерних мов (наприклад, скаляр буде величиною сірого масштабу, а vector3буде RGBтощо. ).

Хоча я думаю, що це реалізація, тому, напевно, ви хочете, це його ключові слова, які (iirc) містять усі основи:

  • триггерні функції ( sin, cos, tanтощо)
  • позиція ( x, y)
  • основні математичні оператори ( sqrt, pow, abs, inverse)
  • шумові функції ( fBm, noise2, noise3)
  • інші фрактали ( mandelbrot, julia)
  • функції інтерполяції ( lerp, quad, step, smoothstep)

(Деякі з перерахованих вище, можливо, не знаходяться в його здійсненні; я знайшов його роботу давно і фактично зробив кілька спроб того, що ви описуєте протягом багатьох років - тому спогади можуть просочуватися :)

Тримаючи це цікаво (і швидко)

Мені пощастило з багатошаровим підходом, який значно зменшив кількість мертвих еволюцій.

  1. набір діапазонів генерується для кожного оператора (або мутується з попередніх раундів)
    • вони в ідеалі зберігають значення в межах "розумного" діапазону для кожної функції, але можуть перетворюватися на діапазони, які мають напрочуд корисні результати, що здається "правильним" ділом
  2. генерують кілька дерев алгоритму
    • для кожного з них генерують кілька графіків висоти у випадкових положеннях та оцінюють придатність
    • якщо у нас багато хороших матчів, то трохи розвиваємося вниз по цій гілці, трохи збурюючи діапазони від кроку 1 у кожної дитини
    • інакше у нас, ймовірно, погані діапазони, поверніться до кроку 1

Однак ...

Тепер я зручно пропустив алгоритм фітнесу , я здебільшого використовував підхід Карла Сімса до "неприродного відбору", де ви бачите поточне покоління на середній площі купки потомства (популяризоване електроінструментами Kai ще в той день - ось ось образ того , що я маю в виду ) ..

Однак, можливо, ви можете мати набір навчальних зображень, можливо, деякі із супутникових знімків та кілька штучних з певними якостями, а потім, можливо, використовувати на них вейвлет або 2D аналіз FFT порівняно з місцевістю, яку ви тестуєте?

Це цікава тема, але я сумніваюся, що вам потрібна відповідь на :)

РЕДАКТ: ах. довелося видалити купу посилань, тому що я новий користувач: - |


Це, мабуть, призводить до того ж, що я отримував, алгоритми призначені не для постійного випадкового генерування контенту, а для навчання покоління до єдиного або обмеженого набору результатів ... і все ж вимагає від людини вибір.
Джеймс

З того, що я можу зрозуміти, фітнес повинен був базуватися на статистичному аналізі результатів. Фактори, які я міг би придумати, - це кількість дисперсії всередині одного генерованого рельєфу в середньому по деякій кількості сформованих місцевостей (максимізований), і це значення стандартного відхилення (мінімізоване для стабільності дисперсії). Але тоді я думаю, що нам доведеться максимально змінити середню висоту між будь-якими двома генерованими рельєфами.
Алекс Шепард

1
@ Алекс, можливо, цей документ також зацікавить. Я думаю, якби ви повернули якусь із згаданих методик на її голову, ви могли б використовувати її для керівництва фітнесом. (Або це може бути саме те, що ви хочете :)
пентафоб

@phobius WOAH !! Класно. Мені потрібно ще трохи вивчити це, але це виглядає дійсно багатообіцяюче. Тепер, щоб перетворити це на проблему пошуку ...
Алекс Шепард

2

Я не впевнений, що ви можете відповісти на це питання, але я вважаю, що це може бути досить корисною відповіддю. Отже, відповіді в двох словах:

  • Ви хочете вибрати генерацію рельєфу місцевості, де певні його аспекти можуть просто базуватися на значеннях даних. Це не важко зробити, але це вимагає від вас вибору покоління місцевості. Оскільки область, в якій я працюю, складається з генерації вокселів, такі речі, як частота дискретизації, проходження тунелів, рівні висоти тощо, - це речі, які можна вводити в дані і «еволюціонувати».
  • Вигляд йде рука об руку з першою частиною. Насправді не важливо, з якою формою покоління ви переходите до тих пір, поки зможете встановити різні його властивості. Цей вибір повинен мати більше спільного з типом гри, яку ви хочете зробити.
  • Ось де воно розпадається. Я не можу придумати спосіб виміряти це осторонь від людини, яка насправді дивиться на світ і переходить "О, це добре". Але це видаляє комп'ютер, роблячи власну самоітерацію. Це також означає, що ви збираєтесь використовувати цю форму покоління для створення єдиного світу, врешті-решт, шукаючи "найкращого", а не випадкового кожного разу.

Генетичні алгоритми зазвичай використовуються для вирішення відомої проблеми, де можна визначити середовище за допомогою правил. Потім ви можете створити набори даних, які представляють різні властивості, які впливають на те, як все реагує на правила. Потім комп’ютер відтворює "раунд" з початковим набором даних, вибирає верхнє число X, змішує їх значення після з'єднання їх разом і робить ще один раунд. Загальним прикладом цього є "розведення кращого троля" (проведення розведення на знайти набір значень, де троль, як правило, дуже добре працює у своєму оточенні (вміє полювати і їсти, або вбивати, або триматися подалі від односельчан, може збирати награбоване і збирати всі блискучі предмети, які він бажає тощо).

Я просто не впевнений, що ти намагаєшся застосувати в царині генерації місцевості. Єдине, що я можу придумати, - це різновиди оцінювання вмісту гри, де ви не хотіли планувати світ, але хотіли зробити таке, щоб шлях AI можна було обчислити добре або щось подібне. Навіть з цим, однак, ти шукаєш єдиний або принаймні обмежений набір світів.


Ах ... я думаю, ви плутаєте еволюційні алгоритми з генетичними програмами. EA використовуються для оптимізації та налаштування входів до алгоритму. ГП використовуються для побудови самого алгоритму, і саме це я шукаю. Хоча хороша відповідь. Як зауваження: ці місцевості не повинні бути реалістичними, а просто цікавими.
Алекс Шепард

Якщо ви не можете визначити "цікаве" програмно, то у вас виникне проблема, на яку я намагаюся отримати відповідь.
Джеймс

0

Який ландшафт мав би це створити? (карта висоти, графік вершин, ...)

Безумовно, вершинний графік (сітка), він є компактним для зберігання і може бути растрований (тесельований) на вимогу.

Як би ви представляли генератор місцевості таким чином, який можна розібрати на дерево?

Стільникові автомати. Я можу придумати дві реалізації:

  1. Автомати, встановлені правилами, можливо, з елементами кінцевих автоматів (коли враховується поточний стан, як лічильник спроб або час простою).

    • Кожен вузол ініціалізується випадковим станом
    • До кожного вузла додається екземпляр розв’язувача
    • Кожен розв'язувач продовжує обчислювати наступний стан, поки не вичерпається правил або не досягне свого ідеального стану (я закінчив тут)
    • Усі наступні стани розраховуються спочатку, а потім застосовуються всі відразу до наступних обчислень, тому порядок обчислення не має значення

Сам набір правил може бути представлений у вигляді розгалуженого дерева рішень або простої пакетів команд (не впевнений, чи буде він працювати)

Це лише одне правило, встановлене для кожного вузла

  1. Світобудівники. Замість застосування solver для кожного окремого вузла ви можете створити лише купу з них та дозволити їм орієнтуватися по сітці.

    • У кожного будівельника є свій набір правил
    • Не дозволяйте їм потрапляти у вузол, зайнятий іншим будівельником
    • Кожен будівельник може бути представлений у вигляді гілки дерева
    • Під час еволюції будівельники можуть дублювати

Я все ж боюся, що другий підхід потребує підкріплення першого: початкову випадковість потрібно згладити, і я не впевнений, чи зможуть будівельники зробити трюк. У всіх живих клітинах все-таки є мітохондрії.

Що було б використано для оцінки придатності рішення?

Цілісність отриманої місцевості - вона не повинна бути схожою на м’ясну кашку. І різноманітність - загалом ми хочемо, щоб якомога більше доступних варіантів було представлено наскільки це можливо (плоскі пустирі від одного краю до іншого не весело). Можливо, щось складніше, як те, як сусідні вузли підходять один одному (тундра посеред пустелі, що?)

Потрібно спробувати це для себе з моїм сітчастим генератором, коли / якщо є вільний час =)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.