Использование алгоритмов искусственного интеллекта в процессе построения UFO-моделей
Рисунок 2.3 – Контекстная диаграмма компонента
Входы и выходы контекстной диаграммы системы и компонентов имеют такую характеристику как тип. Существуют следующие правила соединения входов и выходов [11]. Вход In (n) контекстной диаграммы системы может быть присоединен к входу компонента , если тип In (n) совпадает с типом . Это условие совпадение типов можно записать в виде равенства (рис. 2.4).
Рисунок 2.4 – Соединение входа с входом
Выход Out (m) контекстной диаграммы системы может быть присоединен к выходу компонента , если тип Out (m) совпадает с типом . Это условие можно записать в виде равенства (рис. 2.5).
Рисунок 2.5 – Соединение выхода с выходом
Выход компонента может быть присоединен к входу компонента , если тип совпадает с типом. Это условие можно записать в виде равенства (рис. 2.6).
Рисунок 2.6 – Соединение выхода с входом
Пусть контекстная диаграмма системы имеет вход a и выход b (рис. 2.7).
Рисунок 2.7 – Пример контекстной диаграммы системы
Пусть в библиотеку компонентов входит компонент С1 с входом a и выходом c и компонент С2 с входом c и выходом b (рис. 2.8).
Рисунок 2.8 – Примеры контекстных диаграмм компонентов
Тогда вход a и выход b системы могут быть соединены с помощью компонентов С1 и С2 так, как показано на рис. 2.9.
Рисунок 2.9 – Примеры соединений компонентов
2.3 Элементарное перемещение муравья
2.3.1 Перемещение из входа контекстной диаграммы
Пусть изначально муравей находится в конце входной стрелки In (n). Он может случайным образом выбрать из библиотеки компонентов любой компонент , у которого есть вход , который можно присоединить к входу In (n). После присоединения входа компонента к входу In (n) контекстной диаграммы, муравей "переползает" по входу на компонент и пытается присоединять "висящие" входы компонента либо к еще свободным входам контекстной диаграммы системы, либо к еще свободным выходам других компонентов. Аналогично муравей пытается присоединять "висящие" выходы компонента либо к еще свободным выходам контекстной диаграммы системы, либо к еще свободным входам других компонентов (рис. 2.10).
Рисунок 2.10 – Присоединение компонента к входу системы
Если после вышеперечисленных действий муравья у компонента не осталось "висящих" входов и выходов, то муравей "выползает" из компонента по входу , через который он попал в этот компонент. На этом перемещения муравья прекращаются.
Если же у компонента остались "висящие" входы и выходы, то муравей случайным образом размещается на любом из них. Если муравей оказался в конце "висящего" входа компонента , то далее он должен действовать так, как описано ниже в пункте 2.3.3. Если муравей оказался в начале "висящего" выхода компонента , то далее он должен действовать так, как описано ниже в пункте 2.3.4.
2.3.2 Перемещение из выхода контекстной диаграммы
Пусть изначально муравей находится в начале выходной стрелки Out (m). Он может случайным образом выбрать из библиотеки компонентов любой компонент , у которого есть выход , который можно присоединить к выходу Out (m). После присоединения выхода компонента к выходу Out (m) контекстной диаграммы, муравей "переползает" по выходу на компонент и пытается присоединять "висящие" входы компонента либо к еще свободным входам контекстной диаграммы системы, либо к еще свободным выходам других компонентов. Аналогично муравей пытается присоединять "висящие" выходы компонента либо к еще свободным выходам контекстной диаграммы системы, либо к еще свободным входам других компонентов (рис. 2.11).
Рисунок 2.11 – Присоединение компонента к выходу системы
Если после вышеперечисленных действий муравья у компонента не осталось "висящих" входов и выходов, то муравей "выползает" из компонента по выходу , через который он попал в этот компонент. На этом перемещения муравья прекращаются.
Если же у компонента остались "висящие" входы и выходы, то муравей случайным образом размещается на любом из них. Если муравей оказался в конце "висящего" входа компонента , то далее он должен действовать так, как описано ниже в пункте 2.3.3. Если муравей оказался в начале "висящего" выхода компонента , то далее он должен действовать так, как описано ниже в пункте 2.3.4.
2.3.3 Перемещение из входа UFO-компонента
Пусть изначально муравей находится в начале входной стрелки компонента . Он может случайным образом выбрать из библиотеки компонентов любой компонент , у которого есть выход , который можно присоединить к входу . После присоединения выхода компонента к входу компонента , муравей "переползает" по выходу на компонент и пытается присоединять "висящие" входы компонента либо к еще свободным входам контекстной диаграммы системы, либо к еще свободным выходам других компонентов. Аналогично муравей пытается присоединять "висящие" выходы компонента либо к еще свободным выходам контекстной диаграммы системы, либо к еще свободным входам других компонентов (рис. 2.12).
Рисунок 2.12 – Присоединение компонента к входу компонента
Если после вышеперечисленных действий муравья у компонента не осталось "висящих" входов и выходов, то муравей "переползает" из компонента по выходу назад через вход в компонент . Если у компонента еще остались "висящие" входы и выходы, то муравей случайным образом размещается на любом из них. Иначе – покидает компонент по тому пути, по которому он на него попал.
Если же у компонента остались "висящие" входы и выходы, то муравей случайным образом размещается на любом из них.
2.3.4 Перемещение из выхода UFO-компонента
Пусть изначально муравей находится в конце выходной стрелки компонента . Он может случайным образом выбрать из библиотеки компонентов любой компонент , у которого есть вход , который можно присоединить к выходу . После присоединения входа компонента к выходу компонента , муравей "переползает" по входу на компонент и пытается присоединять "висящие" входы компонента либо к еще свободным входам контекстной диаграммы системы, либо к еще свободным выходам других компонентов. Аналогично муравей пытается присоединять "висящие" выходы компонента либо к еще свободным выходам контекстной диаграммы системы, либо к еще свободным входам других компонентов (рис. 2.13).
Рисунок 2.13 – Присоединение компонента к выходу компонента
Если после вышеперечисленных действий муравья у компонента не осталось "висящих" входов и выходов, то муравей "переползает" из компонента по входу назад через выход в компонент . Если у компонента