Создайте бесконечную линию с помощью теории цепей Маркова

Итак, позвольте мне объяснить мою проблему немного лучше (пожалуйста, откройте этот вопрос снова). Я услышал о теории цепей Маркова, когда думал о методе генерации процедурных линий для построения ландшафта.

Главное, что генерируется, это карта, которая может простираться до бесконечности. Сначала я построил демонстрацию с процедурными картами на основе перлина, имеющими множество различных особенностей местности. Он даже должен был быть изометрическим, больше похожим на Sentinel. Это оказалось слишком запутанным, чтобы играть с механикой движения, которую я имел в виду. Мне пришлось сократить его до гораздо более простой системы, основанной на тайлах. Это не только легче понять и ориентироваться, но и выглядит намного лучше.

Карта генерируется с помощью цепи Маркова. Алгоритму подается короткая последовательность ландшафта, созданная человеком. Затем он продолжает и создает карту любого размера, имитирующую структуру ввода.

Таким образом, пример визуального вывода может выглядеть так, как вы видите на следующем изображении.

введите здесь описание изображения

На самом деле я испытал нечто подобное, описанное в цитате, заканчивающейся этими случайными строками:

введите здесь описание изображения

Поэтому вместо этой случайной линии я ищу решение для создания маленьких каньонов из первой картинки. В первый раз, когда я прочитал о цепи Маркова, я подумал: ВАУ! Возьмите линию, созданную человеком, в качестве входных данных и дайте алгоритму продолжить работу, звучит блестяще.

Так как же теория цепей Маркова помогает в создании такой местности? Если вы считаете, что есть лучший способ сделать это, пожалуйста, предложите.

Карта генерируется с помощью цепи Маркова.

... смутил меня, и я подумал, что на самом деле это алгоритм цепи Маркова.


person Upvote    schedule 29.05.2011    source источник


Ответы (1)


Я не уверен, знаете ли вы, что такое цепь Маркова. Цепь Маркова — это система, определяемая переходами состояний на основе вероятностей. Следующее состояние (по определению) основано на предыдущем состоянии.

Цепь Маркова не является преобразованием. Это не алгоритм модификации системы, он просто описывает систему.

Чтобы описать вашу линейную систему, вам нужно посмотреть на отдельные индексы в вашем массиве и рассчитать вероятность «скачка». В итоге у вас останется что-то вроде этого:

idx 1: 20% chance for a jump
idx 2: 0% chance for a jump
idx 3: 15% chance for a jump
idx 4: 55% chance for a jump
...

Это тривиально для программирования, но это не поможет вам сделать линии прямыми. Чтобы линии были прямыми, вам даже не нужна цепь Маркова, достаточно перебрать все индексы и сделать их равными предыдущему индексу. Трудно понять, что именно вы пытаетесь здесь сделать.

person David Titarenco    schedule 29.05.2011
comment
То, что вы описываете, не является цепью Маркова. В MC у вас будет вероятность перехода, зависящая от состояния (в данном случае, скорее всего, либо от высоты, либо от ее производной), а не от текущего времени (индекс в множество). - person Fred Foo; 30.05.2011
comment
На самом деле я пытаюсь сгенерировать ландшафт, и разработчик сказал, что он использует алгоритм цепи Маркова для создания процедурных случайных линий, как вы видите на моем рисунке, поскольку линия или точки представлены координатами, я подумал, что есть алгоритм, который может это сделать. ... по своей идее алгоритм цепи Маркова кажется действительно подходящим для этой задачи; @larsmans, почему бы вам не предоставить то, что вы знаете, в качестве ответа вместо того, чтобы просто проголосовать за закрытие этого вопроса ...? - person Upvote; 30.05.2011
comment
@ArtWorkAD: извините, но, по моему мнению, вы сами недостаточно исследовали это. Манипуляции с массивом на основе алгоритма Маркова ничего не значат. Если бы вы сказали генерировать случайный вывод на основе цепи Маркова, тогда я мог бы дать ему шанс. - person Fred Foo; 30.05.2011
comment
@ArtworkAD: FWIW, я уже объяснил алгоритм выборки цепи Маркова в другом месте: stackoverflow.com/questions/5502688/ (пропустите алгоритм обучения, если хотите добавить вероятности вручную) - person Fred Foo; 30.05.2011
comment
Я отредактировал свой вопрос и надеюсь, что голоса снова его откроют... - person Upvote; 30.05.2011
comment
@larsmans и др. др. Вы считаете, что этот вопрос стоит того, чтобы его снова открыть? - person John Saunders; 05.06.2011
comment
Справедливо, проголосовал за открытие. - person Fred Foo; 05.06.2011