Поиск решения задачи с нуля - очень удобный процесс для разработчика. Полет творческой мысли ограничен лишь фантазией.
Но чаще приходиться сталкиваться с оптимизацией уже существующей системы: изменением её части, добавлением или удалением некоторых функций.
Некоторые функции устарели - в них нет уже необходимости. Что-то имеет современные аналоги, а старые практически не достать. Какие-то части можно заменить на новые детали, причем удалив ряд устаревших - модернизация, так сказать.
Плюс ко всему на текущий момент могут быть банальные ограничения в тех или иных ресурсах (изменился Функциональный Базис).
Поэтому в 'Сшивке' имеется функция "заморозки схемы". Неизменяемая часть загружается из отдельного файла. Затем проводится поиск решения, учитывая, что некоторые функции и связи между ними нельзя менять даже если существует более оптимальные решения.
Схемы схемами, а система "в железе" имеет более высокую ценность.
Как это выглядит на практике?
Из файла "schem.lst" (или из того, что задается в командной строке) загружается список соединений. Его формат можно узнать в репозитории. Проводится сопоставление функций по их параметрам, а так же по названию, используя расстояние Левенштейна (можно делать очепятки). Далее проводится поиск решения.
Ниже схема, в которой левая функция имеет price=100, хотя есть её функциональные аналоги с price=2 и price=20. "Заморозка" хромосом, поискового гена не дает их изменять алгоритму.
Если из "schem.lst" убрать связи любых блоков (в данном случае левого), то 'сшивка' найдет им достойную замену с price=2.
Если в строке только одна пара скобок [ФункцияЗаморожена], то именно функция я с таким именем, а не ее параметры (соединения), считается "замороженной" и используется в схеме в любом случае.
Так же можно в файлах базиса db*.txt к имени функции добавить {з}, тогда она так же считается "замороженной" и используется в схеме в любом случае.
Обратите внимание! "Замороженные" функции и их параметры становятся частью целевой функции (ЦФ), поэтому 'Сшивка' при автопроектировании ориентируется на них равно как и на параметры функции Target.
Ознакомится с деталями проекта и попробовать его в деле можно в репозитории.