Аксиома
Первая рекурсия
Вторая рекурсия
Третья рекурсия
Четвертая рекурсия
Седьмая рекурсия, уменьшенная в десять раз
Эта статья поднимает множество проблем. Пожалуйста, помогите улучшить его или обсудите эти вопросы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения ) |
L-система или система Линденмайера — это параллельная система перезаписи и тип формальной грамматики . L-система состоит из алфавита символов, которые можно использовать для создания цепочек , набора продукционных правил , расширяющих каждый символ в некоторую большую цепочку символов, исходной цепочки « аксиом », с которой начинается построение, и механизма построения. перевод сгенерированных строк в геометрические структуры. L-системы были введены и разработаны в 1968 году венгерским биологом - теоретиком и ботаником Аристидом Линденмайером .Утрехтский университет . [1] Линденмайер использовал L-системы для описания поведения растительных клеток и моделирования процессов роста при развитии растений . L-системы также использовались для моделирования морфологии различных организмов [2] и могут использоваться для создания самоподобных фракталов .
Как биолог Линденмайер работал с дрожжами и нитчатыми грибами и изучал закономерности роста различных типов бактерий , таких как цианобактерии Anabaena catenula . Первоначально L-системы были разработаны для формального описания развития таких простых многоклеточных организмов и для иллюстрации отношений соседства между растительными клетками. Позднее эта система была расширена для описания высших растений и сложных ветвящихся структур.
Рекурсивная природа правил L-системы приводит к самоподобию , и поэтому фракталоподобные формы легко описываются с помощью L-системы. Модели растений и естественные органические формы легко определить, так как при увеличении уровня рекурсии форма медленно «растет» и становится более сложной. Системы Линденмайера также популярны при создании искусственной жизни .
Грамматики L-системы очень похожи на грамматику полу-Туэ (см. Иерархия Хомского ). L-системы теперь широко известны как параметрические L-системы, определяемые как кортеж
где
Правила грамматики L-системы применяются итеративно, начиная с начального состояния. Максимально возможное количество правил применяется одновременно за итерацию. Тот факт, что на каждой итерации используется как можно больше правил, отличает L-систему от формального языка , порожденного формальной грамматикой , которая применяет только одно правило на итерацию. Если бы продукционные правила применялись только по одному, можно было бы просто сгенерировать язык, а не L-систему. [ требуется уточнение ] Таким образом, L-системы являются строгими подмножествами языков. [ нужно уточнение ]
L-система является контекстно-свободной , если каждое продукционное правило относится только к отдельному символу, а не к его соседям. Таким образом, контекстно-свободные L-системы задаются контекстно-свободной грамматикой . Если правило зависит не только от одного символа, но и от его соседей, оно называется контекстно-зависимой L-системой.
Если для каждого символа существует ровно одна продукция, то L-система называется детерминированной (детерминированная контекстно-свободная L-система обычно называется D0L-системой ). Если их несколько и каждый выбирается с определенной вероятностью на каждой итерации, то это стохастическая L-система.
Использование L-систем для генерации графических изображений требует, чтобы символы в модели относились к элементам рисунка на экране компьютера. Например, программа Fractint использует графику черепахи (подобную той, что используется в языке программирования Logo ) для создания экранных изображений. Он интерпретирует каждую константу в модели L-системы как команду черепахи.
Оригинальная L-система Линденмайера для моделирования роста водорослей.
который производит:
n=0: Старт (аксиома/инициатор) / \ n=1: AB — исходный одиночный A, порожденный в AB по правилу (A → AB), правило (B → A) не может быть применено /| \ n = 2: бывшая строка ABA AB со всеми примененными правилами, A снова породила AB, бывшая B превратилась в A / | | | \ n=3: ABAAB отмечает, что сначала все A создают свои копии, а затем B, что оказывается... / | | | \ | \\ n = 4: ABAABABA ... в A поколением позже, начиная появляться/повторяться/рекурсивно, а затем
Результатом является последовательность слов Фибоначчи . Если мы посчитаем длину каждой строки, мы получим известную последовательность чисел Фибоначчи (пропустив первую 1 из-за нашего выбора аксиомы):
Если мы не хотим пропускать первую 1, мы можем использовать аксиому B . Это поместит узел B перед самым верхним узлом ( A ) на графике выше.
Для каждой строки, если мы отсчитываем k -ю позицию от левого конца строки, значение определяется тем, попадает ли в интервал кратное золотому сечению . Отношение А к В также сходится к золотой середине.
Этот пример дает тот же результат (с точки зрения длины каждой строки, а не последовательности A s и B s), если правило ( A → AB ) заменить на ( A → BA ), за исключением того, что строки зеркально отражены.
Эта последовательность является локально катенативной последовательностью , потому что , где n -е поколение.
Форма строится путем рекурсивной подачи аксиомы через продукционные правила. Каждый символ входной строки проверяется по списку правил, чтобы определить, какой символ или строку следует заменить в выходной строке. В этом примере «1» во входной строке становится «11» в выходной строке, а «[» остается прежним. Применяя это к аксиоме «0», мы получаем:
аксиома: | 0 |
1-я рекурсия: | 1[0]0 |
2-я рекурсия: | 11[1[0]0]1[0]0 |
3-я рекурсия: | 1111[11[1[0]0]1[0]0]11[1[0]0]1[0]0 |
… |
Мы видим, что эта строка быстро растет в размере и сложности. Эту строку можно нарисовать как изображение с помощью графики черепахи , где каждому символу назначается графическая операция, которую черепаха должна выполнять. Например, в приведенном выше примере черепахе можно дать следующие инструкции:
Нажатие и выталкивание относятся к стеку LIFO (в более технической грамматике будут отдельные символы для «положения толчка» и «поворота налево»). Когда интерпретация черепахи встречает '[', текущая позиция и угол сохраняются, а затем восстанавливаются, когда интерпретация встречает ']'. Если несколько значений были «протолкнуты», то «выталкивание» восстанавливает самые последние сохраненные значения. Применяя графические правила, перечисленные выше, к предыдущей рекурсии, мы получаем:
Аксиома
Первая рекурсия
Вторая рекурсия
Третья рекурсия
Четвертая рекурсия
Седьмая рекурсия, уменьшенная в десять раз
Пусть A означает «тянуть вперед», а B означает «двигаться вперед».
Это дает знаменитый фрактал Кантора, расположенный на реальной прямой линии R .
Вариант кривой Коха, в которой используются только прямые углы.
Здесь F означает «протянуть вперед», + означает «повернуть налево на 90°», а − означает «повернуть направо на 90°» (см. рисунок черепахи ).
Треугольник Серпинского , построенный с использованием L-системы.
Здесь F означает «тянуть вперед», G означает «тянуть вперед», + означает «повернуть налево на угол», а - означает «повернуть направо на угол».
п = 2
п = 4
п = 6
Также возможно аппроксимировать треугольник Серпинского с помощью L-системы кривой стрелы Серпинского .
Здесь A и B означают «тянуть вперед», + означает «повернуть налево на угол», а - означает «повернуть направо на угол» (см. Рисунок черепахи ).
Кривая дракона, нарисованная с использованием L-системы.
Здесь F и G означают «тянуть вперед», + означает «повернуть налево на угол», а - означает «повернуть направо на угол».
Здесь F означает «продвинуться вперед», − означает «повернуть направо на 25 °», а + означает «повернуть налево на 25 °». X не соответствует никакому действию рисования и используется для управления эволюцией кривой. Квадратная скобка «[» соответствует сохранению текущих значений позиции и угла, которые восстанавливаются при выполнении соответствующей «]».
Был разработан ряд усовершенствований этой базовой техники L-системы, которые можно использовать в сочетании друг с другом. Среди них стохастические грамматики , контекстно-зависимые грамматики и параметрические грамматики.
Модель грамматики, которую мы до сих пор обсуждали, была детерминированной, то есть для любого символа в алфавите грамматики существовало ровно одно правило вывода, которое всегда выбиралось и всегда выполняло одно и то же преобразование. Одна альтернатива состоит в том, чтобы указать более одного правила производства для символа, задав каждому вероятность появления. Например, в грамматике Примера 2 мы могли бы изменить правило перезаписи «0» с:
к вероятностному правилу:
При таком производстве всякий раз, когда во время перезаписи строки встречается «0», с вероятностью 50% он будет вести себя, как описано ранее, и с вероятностью 50% он не изменится во время производства. Когда стохастическая грамматика используется в эволюционном контексте, целесообразно включать случайное начальное число в генотип , чтобы стохастические свойства изображения оставались постоянными между поколениями.
Контекстно-зависимое производственное правило рассматривает не только изменяемый символ, но и символы в строке, появляющиеся до и после него. Например, производственное правило:
преобразует "a" в "aa", но только если "a" встречается между "b" и "c" во входной строке:
Как и в случае стохастических производств, существует несколько производств для обработки символов в разных контекстах. Если для данного контекста не удается найти правила производства, предполагается производство тождества, и символ не изменяется при преобразовании. Если контекстно-зависимая и контекстно-свободная продукция существуют в одной и той же грамматике, предполагается, что контекстно-зависимая продукция имеет приоритет, когда она применима.
В параметрической грамматике каждый символ в алфавите имеет связанный с ним список параметров. Символ вместе со своим списком параметров называется модулем, а строка в параметрической грамматике — это набор модулей. Пример строки может быть:
Параметры могут использоваться функциями рисования, а также продукционными правилами. Производственные правила могут использовать параметры двумя способами: во-первых, в условном операторе, определяющем, будет ли применяться правило, и, во-вторых, производственное правило может изменять фактические параметры. Например, посмотрите:
Модуль a(x,y) претерпевает преобразование по этому продукционному правилу, если выполняется условие x=0. Например, a(0,2) подвергнется преобразованию, а a(1,2) — нет.
В части преобразования производственного правила можно повлиять как на параметры, так и на целые модули. В приведенном выше примере к строке добавляется модуль b(x,y) с начальными параметрами (2,3). Также трансформируются параметры уже существующего модуля. Согласно приведенному выше производственному правилу,
становится
поскольку параметр «x» в a (x, y) явно преобразуется в «1», а параметр «y» в a увеличивается на единицу.
Параметрические грамматики позволяют определять длину строк и углы ветвления с помощью грамматики, а не методов интерпретации черепах. Кроме того, если в качестве параметра для модуля указан возраст, правила могут меняться в зависимости от возраста сегмента растения, что позволяет создавать анимации всего жизненного цикла дерева.
Двунаправленная модель явно отделяет систему символьной перезаписи от присвоения формы. Например, процесс перезаписи строки в Примере 2 (Фрактальное дерево) не зависит от того, как графические операции назначаются символам. Другими словами, к данной системе перезаписи применимо бесконечное количество методов рисования.
Двунаправленная модель состоит из 1) прямого процесса, который строит дерево вывода с продукционными правилами, и 2) обратного процесса, реализующего дерево с формами поэтапно (от листьев к корню). Каждый шаг обратного вывода включает в себя существенные геометро-топологические рассуждения. С помощью этой двунаправленной структуры ограничения и цели дизайна закодированы в переводе формы грамматики. В приложениях для архитектурного дизайна двунаправленная грамматика обеспечивает согласованную внутреннюю связность и богатую пространственную иерархию. [3]
Есть много открытых проблем, связанных с изучением L-систем. Например:
L-системы на прямой R :
Известными L-системами на плоскости R 2 являются:
Викискладе есть медиафайлы, связанные с L-системами . |