Последовательность действий важна.
Наш мир опутан многочисленными невидимыми связями, которые мы не ощущаем и, зачастую, не понимаем. И если сделать неверный шаг, результат будет…
Неожиданным!
Как минимум. Цель будет не достигнута, а могут быть и более плачевные последствия.
Фундамент — стены — крыша.
Иначе дом не построить, хотя есть варианты. В итоге, появляются интересные свойства и возможности системы.
Эксперт может менять последовательность действий, технологию. На то он и эксперт. Он понимает, как устроена та или иная область знаний. Суть вещей в некотором объеме.
Любую систему, выраженную математически через граф (даже с циклами) или схему, можно легко уложить в список. Электрическую или UML схему, искусственную нейросеть и даже… Вселенную!
Граф — последовательность.
Системы обычно имеют связи, которые несут в себе функциональную нагрузку. В идеале, их не надо соединять или смешивать:
— горячая и холодная вода — 2 разные трубы или связи подсистем
— ноль и фаза в электрике
— ADC, PCINT, INT, PWM (шина данных) в микроконтроллере.
Ранее на простом примере было показано как сложные взаимосвязи, в итоге, выражаются простыми списками.
Функциональный базис уже определен.
Всё сводиться к комбинаторной задаче о рюкзаке.
Варианты соединений схемы. U1, U2, U3 — функции/блоки. A, B, C — типизированные параметры функций. 1, 2, 3 — номера входов и выходов блоков.
Задача решается с помощью генетического алгоритма.
Так же используются некоторые методики уменьшения пространства поиска, эмпирические правила. Прописана целевая функция.
Но самое главное — в какой последовательности проводятся взаимосвязи.
Варианты соединений в виде таблицы (гена и комбинаций хромосом).
Обратите внимание! Если начинать соединять справа налево, то решение найдется сразу. Если наоборот — придется перебирать варианты.
Это, пожалуй, ключевой момент во всем решении. Связи «конкурируют за ресурсы». И если мы проводим соединение, захватывая ресурс (пин микросхемы или вход/выход функции), то другие «потребители» уже не могут на него претендовать. Хотя и для них есть варианты, меньше чем изначально, но это нам только на руку — количество комбинаций снижается и, как следствие, уменьшается время на расчет решения.
Варианты соединений для каждого параметра функционального блока. Информации стало больше, но так видно все возможные варианты — с дубликатами и (или) «пересечениями» соединений. Осталось выбрать правильные решения.
Такое представление более применимо, так как в предыдущей таблице соединения ведутся относительно U1. В реальной схеме, скорее всего, не будет базового блока.
Эмпирические правила заменяются случайной сортировкой списка «претендентов на трон». Как ни странно, это помогает находить решение очень быстро. Не имея Опыта, знаний о системе и даже навыков проектирования, в первом приближении.
Не важно, какие есть взаимосвязи в системе: хаос + последовательность находят решение.
На выходе работы алгоритма мы получаем список взаимосвязей, которые формируют новую систему — схему с заданными заранее входными и выходными параметрами. Нам остается соединить блоки согласно списку или загрузить список в некую IT систему.
Как в детстве: делайте так — понимание придет потом.
Мы не можем всего знать и всё понимать, но если есть пошаговая инструкция к незнакомому нам устройству или для действий в незнакомой обстановке — лучше ее выполнять. Ведь эта последовательность, скорее всего, является результатом опыта… многих часов раздумий и попыток других людей и (или) машин.
Почему бы нам, двигаясь к цели, это время не сэкономить?