Рисунок 2.12 – Присоединение компонента
к входу компонентаЕсли после вышеперечисленных действий муравья у компонента
не осталось "висящих" входов и выходов, то муравей "переползает" из компонента по выходу назад через вход в компонент . Если у компонента еще остались "висящие" входы и выходы, то муравей случайным образом размещается на любом из них. Иначе – покидает компонент по тому пути, по которому он на него попал.Если же у компонента
остались "висящие" входы и выходы, то муравей случайным образом размещается на любом из них.2.3.4 Перемещение из выхода UFO-компонента
Пусть изначально муравей находится в конце выходной стрелки
компонента . Он может случайным образом выбрать из библиотеки компонентов любой компонент , у которого есть вход , который можно присоединить к выходу . После присоединения входа компонента к выходу компонента , муравей "переползает" по входу на компонент и пытается присоединять "висящие" входы компонента либо к еще свободным входам контекстной диаграммы системы, либо к еще свободным выходам других компонентов. Аналогично муравей пытается присоединять "висящие" выходы компонента либо к еще свободным выходам контекстной диаграммы системы, либо к еще свободным входам других компонентов (рис. 2.13).Рисунок 2.13 – Присоединение компонента
к выходу компонентаЕсли после вышеперечисленных действий муравья у компонента
не осталось "висящих" входов и выходов, то муравей "переползает" из компонента по входу назад через выход в компонент . Если у компонента еще остались "висящие" входы и выходы, то муравей случайным образом размещается на любом из них. Иначе – покидает компонент по тому пути, по которому он на него попал.Если же у компонента
остались "висящие" входы и выходы, то муравей случайным образом размещается на любом из них.2.3.5 Пример перемещений муравья
Пусть контекстная диаграмма системы имеет два входа (a и b) и два выхода (c и d), а муравей находится в конце входа b (рис. 2.14).
Рисунок 2.14 – Контекстная диаграмма с двумя входами и двумя выходами
Пусть в библиотеке компонентов находятся (рис. 2.15):
– компонент С1 с входами b, e и выходом d;
– компонент С2 с входом a и выходами e, f;
– компонент С3 с входом f и выходом c.
Рисунок 2.15 – Пример библиотеки компонентов
Первое перемещение муравей делает следующим образом.
Вначале он выбирает из библиотеки компонент С1, у которого есть вход b, который можно присоединить к входу b контекстной диаграммы.
После присоединения входа b компонента С1 к входу b контекстной диаграммы, муравей "переползает" по входу b на компонент С1 и присоединяет "висящий" выход d компонента С1 к еще свободному выходу d контекстной диаграммы системы.
У компонента С1 остался "висящий" вход e, в начале которого и размещается муравей (рис. 2.16).
Рисунок 2.16 – Первый ход муравья
Второе перемещение муравей делает следующим образом.
Вначале он выбирает из библиотеки компонент С2, у которого есть выход e, который можно присоединить к входу e компонента С1.
После присоединения выхода e компонента С2 к входу e компонента С1, муравей "переползает" по входу e на компонент С2 и присоединяет "висящий" вход a компонента С2 к еще свободному входу a контекстной диаграммы системы.
У компонента С2 остался "висящий" выход f, в конце которого и размещается муравей (рис. 2.17).
Рисунок 2.17 – Второй ход муравья
Третье перемещение муравей делает следующим образом.
Вначале он выбирает из библиотеки компонент С3, у которого есть вход f, который можно присоединить к выходу f компонента С2. После присоединения входа f компонента С3 к выходу f компонента С2, муравей "переползает" по выходу f на компонент С3 и присоединяет "висящий" выход c компонента С3 к еще свободному выходу c контекстной диаграммы системы (рис. 2.18).
Рисунок 2.18 – Третий ход муравья
У компонента С3 не осталось "висящих" входов и выходов. Поэтому муравей "переползает" обратно по связи f на компонент С2. У компонента С2 тоже не осталось "висящих" входов и выходов. Поэтому муравей "переползает" обратно по связи e на компонент С1. У компонента С1 тоже не осталось "висящих" входов и выходов. Поэтому муравей "переползает" обратно по связи b на вход b контекстной диаграммы системы.
Муравей вернулся в начальное положение, поэтому его перемещения на этом прекращаются.
Присоединяя "висящие" входы или выходы компонента, муравей в первую очередь должен пытаться их присоединять к еще свободным входам или выходам контекстной диаграммы системы, а уже потом – к "висящим" входам или выходам других компонентов.
Наконец, из библиотеки компонентов муравью, вероятно, следует выбирать для присоединения тот компонент, у которого в результате окажется меньше "висящих" входов и выходов. Хотя такая локальная оптимальность вовсе не гарантирует того, что процесс построения системы из заданных компонентов закончится быстрее.
2.4 Перемещение нескольких муравьев
Естественно, что сборка системы из заданных компонентов будет производиться гораздо быстрее, если ее будет осуществлять не один муравей, но несколько. Количество муравьев может задаваться произвольным образом. Например, их можно разместить по одному в конце каждого входа и в начале каждого выхода контекстной диаграммы системы. Однако при этом возникает проблема разрешения конфликтов при попытке разных муравьев присоединить, например, к одному свободному выходу контекстной диаграммы, "висящие" выходы своих компонентов (рис. 2.19).