Почему треугольники изменят ваш взгляд на мир

Треугольник Серпинского - это алгоритм, демонстрирующий интересное свойство случайности (Python).

Ключевой вывод состоит в том, что кажущийся сложным паттерн возникает из чрезвычайно простого - частично случайного - паттерна.

Какие еще сложные структуры можно разбить на такой простой механизм?

Алгоритм

Треугольник Серпинского работает с 3 точками, однако могут возникнуть другие модели интереса с большим количеством (K) точек. Ниже приведены шаги алгоритма.

Вот шаги для 3 (и K) размерного случая:

  1. Произвольно разместите K точек на плоскости.
  2. Выберите СЛУЧАЙНУЮ точку на плоскости, чтобы установить ее в качестве текущей «фокусной точки».
  3. Выберите один из K узлов в RANDOM
  4. Вычислить и отметить среднюю точку (евклидово расстояние) между точкой фокусировки и выбранным узлом.
  5. Установите отмеченную точку в качестве новой точки фокусировки
  6. Повторите шаги 3-5 много раз (более 10'000)

Философия

Интуитивно мы не ожидаем, что из этого случайного паттерна возникнет что-то чудесное или интересное. Однако, когда мы запускаем алгоритм, потрясающие результаты вызывают 2 вопроса:

Сложность и появление

  • какие еще процессы (фракталы, органические / биологические системы и т. д.) могут быть вызваны возникающей сложностью? (см. мою статью об элементарных клеточных автоматах)

Математическая простота

  • В связи с вышеупомянутым, где еще в природе, обществе, промышленности или где-либо еще мы можем полностью описать сложные системы с помощью простых алгоритмов? Алгоритмы намного проще, чем кажущиеся составляющие системы.

Случайность

  • Интуитивно кажется странным, как такая структурированная система является производной от набора правил, управляемых случайными событиями. Это нетривиальным образом вызывает вопросы о природе детерминированных систем и их взаимосвязи со случайными процессами.

Реализация

Реализуем алгоритм на Python.

K = 3 узла

Выполните алгоритм, как указано выше

Визуализируйте результаты

Да, это произошло благодаря нашему алгоритму рандомизации. Этот тип паттерна называется треугольником Серпинского и является примером фрактала (паттерна, который повторяется бесконечно).

Расширение реализации до K узлов

Мы можем написать алгоритм, который динамически изменяется, позволяя указать любое количество входных узлов,

Выполните функцию узла K, измените переменную «points» и запустите код, чтобы увидеть вновь сгенерированные шаблоны.

Папоротник Барнсли

Более сложным примером алгоритма, который зависит от случайности и дает прекрасные результаты, является «Папоротник Барнли».

По сути, у нас есть 6 начальных точек, образующих 2 треугольника, и мы перемещаемся между точками с известной вероятностью - снова вычисляя и отмечая средние точки таким же образом. Полное описание доступно здесь.

Заключение

Возможно, эти возникающие, сложные, случайные, фрактальные последовательности откроют вам разум для новых механизмов мышления.

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