Почему треугольники изменят ваш взгляд на мир
Треугольник Серпинского - это алгоритм, демонстрирующий интересное свойство случайности (Python).
Ключевой вывод состоит в том, что кажущийся сложным паттерн возникает из чрезвычайно простого - частично случайного - паттерна.
Какие еще сложные структуры можно разбить на такой простой механизм?
Алгоритм
Треугольник Серпинского работает с 3 точками, однако могут возникнуть другие модели интереса с большим количеством (K) точек. Ниже приведены шаги алгоритма.
Вот шаги для 3 (и K) размерного случая:
- Произвольно разместите K точек на плоскости.
- Выберите СЛУЧАЙНУЮ точку на плоскости, чтобы установить ее в качестве текущей «фокусной точки».
- Выберите один из K узлов в RANDOM
- Вычислить и отметить среднюю точку (евклидово расстояние) между точкой фокусировки и выбранным узлом.
- Установите отмеченную точку в качестве новой точки фокусировки
- Повторите шаги 3-5 много раз (более 10'000)
Философия
Интуитивно мы не ожидаем, что из этого случайного паттерна возникнет что-то чудесное или интересное. Однако, когда мы запускаем алгоритм, потрясающие результаты вызывают 2 вопроса:
Сложность и появление
- какие еще процессы (фракталы, органические / биологические системы и т. д.) могут быть вызваны возникающей сложностью? (см. мою статью об элементарных клеточных автоматах)
Математическая простота
- В связи с вышеупомянутым, где еще в природе, обществе, промышленности или где-либо еще мы можем полностью описать сложные системы с помощью простых алгоритмов? Алгоритмы намного проще, чем кажущиеся составляющие системы.
Случайность
- Интуитивно кажется странным, как такая структурированная система является производной от набора правил, управляемых случайными событиями. Это нетривиальным образом вызывает вопросы о природе детерминированных систем и их взаимосвязи со случайными процессами.
Реализация
Реализуем алгоритм на Python.
K = 3 узла
Выполните алгоритм, как указано выше
Визуализируйте результаты
Да, это произошло благодаря нашему алгоритму рандомизации. Этот тип паттерна называется треугольником Серпинского и является примером фрактала (паттерна, который повторяется бесконечно).
Расширение реализации до K узлов
Мы можем написать алгоритм, который динамически изменяется, позволяя указать любое количество входных узлов,
Выполните функцию узла K, измените переменную «points» и запустите код, чтобы увидеть вновь сгенерированные шаблоны.
Папоротник Барнсли
Более сложным примером алгоритма, который зависит от случайности и дает прекрасные результаты, является «Папоротник Барнли».
По сути, у нас есть 6 начальных точек, образующих 2 треугольника, и мы перемещаемся между точками с известной вероятностью - снова вычисляя и отмечая средние точки таким же образом. Полное описание доступно здесь.
Заключение
Возможно, эти возникающие, сложные, случайные, фрактальные последовательности откроют вам разум для новых механизмов мышления.
И то, и другое бросает вызов вашей предвзятой интуиции о взаимосвязи между случайностью и детерминизмом и открывает ваш разум идеям сложности и возникающих явлений.