Добрый день.
Есть такая задача: Вычислительная система включает три ЭВМ. В
систему в среднем через 30 с поступают задания, которые попадают в
очередь на обработку к первой ЭВМ, где они обрабатываются около 30
с. После этого задание поступает одновременно во вторую и третью
ЭВМ. Вторая ЭВМ может обработать задание за 14 ± 5 с, а третья — за 16
± 1 с. Окончание обработки задания на любой ЭВМ означает снятие ее
с решения с той и другой машины. В свободное время вторая и третья
ЭВМ заняты обработкой фоновых задач.
Смоделировать 4 ч работы системы. Определить необходимую емкость
накопителей перед всеми ЭВМ, коэффициенты загрузки ЭВМ и функцию
распределения времени обслуживания заданий. Определить
производительность второй и третьей ЭВМ на решении фоновых задач
при условии, что одна фоновая задача решается 2 мин.
Так вот. Построение общей схемы СМО затруднений не вызвало.
Выглядит это вот так:
http://pic.ipicture.ru/uploads/090330/qG530oVHZH.jpg
Не могу понять:
1. Как сделать так, что при выполнении заявки на одной из ЭВМ она
снималась и с другой.
2. Как привязать ко всему этому выполнение фоновой задачи.
Буду очень признателен за подсказку..
Александр — 30.03.09
Хотя мне кажется, что вместо связок queue1 -> ЭВМ2 и queue2 -> ЭВМ3 в
моем случае нужно использовать ProcessQ и Resource ?
Павел — 14.04.09
Здравствуйте,
Предлагаю Вам заменить объекты "Delay" на блоки "Queue". Из
последних Вы сможете удалять заявки в любой момент времени,
используя метод "queue.remove(номер_заявки_в_очереди)". Время
нахождения заявки в очереди можно регулировать с помощью
таймера, т.е. при входе заявки в очередь, активизируется таймер,
который через заданное время осуществляет выемку заявки из одной
очереди с помощью блока "Enter" и удаление заявки из второй
очереди.
Фоновые задачи могут быть представлены в виде заявок от другого
источника, которые поступают в ЭВМ только тогда, когда она
пустая.
P.S.: Я рекомендую Вам перейти на AnyLogic 6. Там эти же задачи можно
решить более простым способом.
Александр — 15.04.09
Павел, спасибо за коментарий.
Я так понимаю, что queue.remove() используется как действие при выходе?
Про таймер не совсем понял? Как его активизорвать?
У меня стоит AnyLogic6, на нем тоже пытаюсь решить задачу.
Одновременный вывод заявок из блоков Delay пытался реализовать при
помощи "действия при выходе".
У первого блока : delay2.remove(Entity)
А на выходе второго: delay1.remove(Entity)
При компиляции ошибок не выдало, но почему-то одновременно заявки
так и не покинули блоки ((
Алексей — 17.07.09
Александр,
А в чем смысл вызывать эти методы при выходе заявки из "Delay",
ведь заявка уже покидает объект? Лучшим вариантом здесь будет
использование блоков "Enter" и "Exit". Они позволяют
реализовать свой собственный алгоритм маршрутизации. Более
подробно об этом написано в разделе Справка|Содержание
справки|Справочные руководства по библиотекам|Справочное
руководство по Enterprise Library|Объекты Enterprise Library|Exit. С помощью событий
Вы сможете активировать требуемый блок "Enter" и забирать
заявку из очереди, перенаправлять ее.