Рисунок 2.19 – Конфликт двух муравьев
2.4.1 Разрешение конфликтов
Можно предложить несколько способов разрешения конфликтов муравьев при доступе к одним ресурсам.
Например, можно назначить муравьям приоритеты – целые числа от 1 до V, где V – количество муравьев. Чем меньше число, тем выше приоритет. Таким образом, самый высокий приоритет имеет муравей, которому сопоставлено число 1, а самый низкий – муравей, которому сопоставлено число V. Если два муравья конфликтуют, то предпочтение отдается тому, у которого выше приоритет. Например, если у муравьев, изображенных выше на рис. 2.19, приоритеты назначены так, что муравей, находящийся на выходе c компонента C1, имеет приоритет 7, а муравей, находящийся на выходе c компонента C2, имеет приоритет 9, то их конфликт за выход c контекстной диаграммы системы разрешиться в пользу муравья, находящегося на выходе c компонента C1, который имеет более высокий приоритет по сравнению с муравьем, находящимся на выходе c компонента C2. Результат разрешения конфликта этих двух муравьев показан на рис. 2.20.
Рисунок 2.20 – Разрешение конфликта двух муравьев
Другим способом может быть разрешение конфликта, основанное на присоединении к свободной связи любой случайным образом выбранной "висящей" связи.
Наконец, предпочтение можно отдавать муравью, у которого больше "висящих" связей.
2.4.2 Пример перемещений нескольких муравьев
Пусть контекстная диаграмма системы имеет два входа (a и b) и два выхода (c и d), а муравей 1 находится в конце входа b, и муравей 2 – в начале выхода c, рис. 2.21).
Рисунок 2.21 – Размещение муравьев на контекстной диаграмме
Пусть в библиотеке компонентов находятся (рис. 2.22):
– компонент С1 с входами b, e и выходом g;
– компонент С2 с входом a и выходами e, f;
– компонент С3 с входами f, h и выходом c;
– компонент С4 с входом g и выходами h, d.
Рисунок 2.22 – Библиотека из четырех компонентов
Первое перемещение муравей 1 делает следующим образом.
Вначале он выбирает из библиотеки компонент С1, у которого есть вход b, который можно присоединить к входу b контекстной диаграммы.
После присоединения входа b компонента С1 к входу b контекстной диаграммы, муравей "переползает" по входу b на компонент С1. У компонента С1 остался "висящий" вход e и "висящий" выход g, в конце которого и размещается муравей 1 (рис. 2.23).
Рисунок 2.23 – Первый ход муравья 1
Первое перемещение муравей 2 делает следующим образом. Вначале он выбирает из библиотеки компонент С3, у которого есть выход c, который можно присоединить к выходу c контекстной диаграммы. После присоединения выхода c компонента С3 к выходу c контекстной диаграммы, муравей "переползает" по выходу c на компонент С3. У компонента С3 остались "висящие" входы h и f, в начале которого и размещается муравей 2 (рис. 2.24).
Рисунок 2.24 – Первый ход муравья 2
Второе перемещение муравей 1 делает следующим образом.
Вначале он выбирает из библиотеки компонент С4, у которого есть вход g, который можно присоединить к выходу g компонента С1.
После присоединения входа g компонента С4 к выходу g компонента С1, муравей "переползает" по входу g на компонент С4, выход h которого он соединяет с входом h компонента С3, а выход d – c выходом d контекстной диаграммы системы (рис. 2.25).
Рисунок 2.25 – Второй ход муравья 1
Второе перемещение муравей 2 делает следующим образом. Вначале он выбирает из библиотеки компонент С2, у которого есть выход f, который можно присоединить к входу f компонента С3. После присоединения выхода f компонента С2 к входу f компонента С3, муравей "переползает" по входу f на компонент С2, выход e которого он соединяет с входом e компонента С1, а вход a – c входом a контекстной диаграммы системы (рис. 2.26).
Рисунок 2.26 – Второй ход муравья 2
3. Пример использования MicrosoftExcel в процессе построения UFO-модели из заданных компонентов на основе алгоритма муравья
Пусть контекстная диаграмма системы имеет такой вид, как на рис. 3.1, и все муравьи расположены у входов в диаграмму.
Рисунок 3.1 – Начальное размещение трех муравьев
Пусть библиотека компонентов содержит шесть подсистем, таких, как показано на рис. 3.2.
Рисунок 3.2 – Библиотека из шести компонентов
В MicrosoftExcel данную библиотеку компонентов можно представить так, как показано на рис. 3.3, на листе "Библиотека компонентов".
Рисунок 3.3 – Представление библиотеки в MicrosoftExcel
Текущее положение муравьев в MicrosoftExcel можно представить так, как показано на рис. 3.4, на листе "Муравьи".
Рисунок 3.4 – Представление текущего положения муравьев в MicrosoftExcel
Для поиска в библиотеке компонентов того компонента, который может быть подключен муравьем к той "висящей" стрелке, на которой он сейчас находится, можно воспользоваться функцией ПРОСМОТР [45].
Функция ПРОСМОТР имеет две синтаксические формы: вектор и массив. Вектор – это диапазон, который содержит только одну строку или один столбец. Векторная форма функции ПРОСМОТР просматривает диапазон, в который входят значения только одной строки или одного столбца (так называемый вектор) в поисках определенного значения и возвращает значение из другого столбца или строки. Эта форма функции ПРОСМОТР используется, когда требуется указать интервал, в котором находятся искомые значения. Другая форма функции ПРОСМОТР автоматически использует для этой цели первую строку или первый столбец.
Синтаксис векторной формы функции ПРОСМОТР имеет следующий вид: ПРОСМОТР (Иск_знач; Просматриваемый_вектор; Вектор_результатов).
Иск_знач – это искомое значение, которое ПРОСМОТР ищет в первом векторе. Искомое значение может быть числом, текстом, логическим значением, именем или ссылкой, ссылающимися на значение. Просматриваемый_вектор – это интервал, содержащий только одну строку или один столбец. Значения в аргументе просматриваемый вектор могут быть текстами, числами или логическими значениями. Следует отметить, что значения в аргументе просматриваемый вектор должны быть расположены в порядке возрастания, в противном случае функция ПРОСМОТР может вернуть неверный результат. Тексты в нижнем и верхнем регистре считаются эквивалентными. Вектор_результатов – это интервал, содержащий только одну строку или один столбец. Он должен быть того же размера, что и просматриваемый вектор. Для поиска в библиотеке компонентов того компонента, который может быть подключен муравьем 1 к "висящей" стрелке a, на которой он сейчас находится, в ячейку Е3 введем формулу
=ПРОСМОТР(C3;'Библиотека компонентов'!$A$2:$A$7;
'Библиотека компонентов'!$B$2:$B$7),
которую затем распространим с помощью маркера заполнения в ячейки Е4 и Е5. Результат показан на рис. 3.5.
Рисунок 3.5 – Поиск компонентов в MicrosoftExcel
Заметим, что для муравья 3 результат поиска оказался неверным. Это связано с тем, что компоненты в библиотеке (рис. 3.3) упорядочены по возрастанию по системам, но не по входам, как это требует функция ПРОСМОТР. Поэтому функция ПРОСМОТР вернула неверный результат. Чтобы в дальнейшем получать правильные результаты, необходимо изменить представление библиотеки компонентов так, как показано на рис. 3.6.
Рисунок 3.6 – Измененная библиотека компонентов
Теперь MicrosoftExcel дает правильный результат (рис. 3.7).
Рисунок 3.7 – Верный результат поиска компонентов в MicrosoftExcel
Итак, MicrosoftExcel рекомендует (рис. 3.7):
– муравью 1 подключить к выходу a компонент С1;
– муравью 2 подключить к выходу b компонент С2;
– муравью 3 подключить к выходу c компонент С4.
Сделаем это (рис. 3.8):
Рисунок 3.8 – Первые перемещения муравьев
Заметим, что муравей 1 закончил свои перемещения, а муравей 2 перешел на стрелку g, и муравей 3 – на стрелку h.
Посмотрим, что теперь предложит MicrosoftExcel муравьям 2 и 3 (рис. 3.9).
Рисунок 3.9 – Вторая итерация поиска компонентов в MicrosoftExcel