Рисунок 2.12 – Присоединение компонента
Если после вышеперечисленных действий муравья у компонента
Если же у компонента
2.3.4 Перемещение из выхода UFO-компонента
Пусть изначально муравей находится в конце выходной стрелки
Рисунок 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).