5 / 5 / 1
Регистрация: 29.04.2018
Сообщений: 15
|
|
1 | |
Выбор агента из популяции по параметру29.04.2018, 09:02. Показов 3762. Ответов 5
Метки нет (Все метки)
Добрый день. Подскажите пожалуйста, как можно выбрать агента из популяции по определённому параметру?
Например, в модели технического обслуживания турбин. Если в агент Truck добавить параметр KR - коэффициент работы, который будет равен отношению времени его работы к времени жизни автомобиля (сколько он всего существует), то этот коэффициент будет показывать какой грузовик меньше или больше был на выезде. Как теперь сделать так, что бы на очередной вызов от турбин выезжал грузовик с наименьшим KR? Заранее спасибо за ответ!!!
0
|
29.04.2018, 09:02 | |
Ответы с готовыми решениями:
5
Выбор из строки по параметру Массив: выбор маршрута согласно параметру Как в AnyLogic сделать выбор ресурсов, в зависимости от вида агента? Выбор нужной информации из RichTextBox1.Text по определенному параметру |
1816 / 1030 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
|
|
29.04.2018, 12:51 | 2 |
Не все знакомы или помнят устройство модели работы турбин. Хорошо было бы Вам разместить архив с моделью на форуме и конкретизировать вопрос.
Выбор агента сделать очень просто. В конкретно вашей ситуации чтобы предложить способ нужно понимать как сейчас выбирается агент? Первый свободный в блоке Service или Seize? Если так, то необходимо настроить опцию "Выбор ресурса". Для выбора ресурса лучше всего создать отдельную функцию, которая бы возвращала при проверке подходит ли заявке конкретно этот ресурс или нет. Тело функции должно содержать цикл по коллекции грузовиков - в цикле под условие что ресурс свободен isIdle необходимо искать ресурс с минимальной загрузкой(коэф). Если индекс этого ресурса совпадает с индексом ресурса который проверяется в настоящий момент времени то функция должна возвращать правду - true, что ресурс подходит.
1
|
5 / 5 / 1
Регистрация: 29.04.2018
Сообщений: 15
|
|
29.04.2018, 17:52 [ТС] | 3 |
Выбор транспорта осуществляется в диаграмме действий в агенте МС.
Он активируется функцией sendRequest агента Turbine. Скриншоты прикрепил. Попытался сделать через сортировки списка sortAscending (популяция, значение), но как по этому списку осуществлять проверку агентов в цикле не могу додуматься. Я делаю не через блоки Service или Seize, а через диаграммы состояний. Пробовал через создание локальных переменных, что бы сравнивалось значение с ними, но всё равно не получается. Пробовал включить популяцию в коллекцию. Но результата нужного нет. Необходимо, что бы выезжал грузовик с самым маленьким коэффициентом работы, а выезжают с наименьшими индексами.
0
|
5 / 5 / 1
Регистрация: 29.04.2018
Сообщений: 15
|
|
29.04.2018, 18:24 [ТС] | 4 |
Можно как-то отсортировать агентов в популяции по этому параметру (KR), что бы в цикле они проверялись в соответствии с ним?
0
|
5 / 5 / 1
Регистрация: 29.04.2018
Сообщений: 15
|
|
01.05.2018, 10:14 [ТС] | 5 |
Получилось, но не так как планировал с начала. Воспользовался обратной переменной k=1-KR, где KR=twork/t. Переменную k обнуляю в момент выхода грузовика из состояния AtCenter, и рассчитывается вновь, при входе в это состояние. А в функции sendRequest прописал код Transport t = top (main.transport, tr -> tr.k); и ещё изменил наименование переменной на t1 в диаграмме действий. Кроме того в состояние AtCenter добавил внутренний переход, который регулярно пересчитывал значения нашего коэффициента работы.
Получилось, что у транспорта не в базе k=0 и он исключается из выбора. Остальной транспорт выбирается согласно коэффициента. Но мне кажется, что можно было всё сделать элегантнее и проще. Зачем же нужен метод sortAscending и как им можно воспользоваться в моём случае? Заранее спасибо за ответ и спасибо за уже оказанную помощь.
0
|
5 / 5 / 1
Регистрация: 29.04.2018
Сообщений: 15
|
|
07.11.2018, 14:01 [ТС] | 6 |
В мае месяце, когда я задавал этот вопрос, я в этой же теме упомянул, что пробовал сделать выбор агентов, первоначально отсортировав их. Тогда я нашёл более элегантный способ выбора агентов, тем более, что у меня их будет не очень много, но сейчас настал момент, когда мне необходимо было отсортировать несколько сотен агентов, и я опять начал пробовать через создание списка и метода sortAscending.
Но не понимал, как мне теперь выбрать агента из этого отсортированного списка. Ведь в списке содержаться объекты типа Object, а мне нужно работать с агентами моего типа, обращаться к ним, опрашивать и вызывать, проверять их параметры. Решение оказалось довольно простым и опять же достаточно знать только базовый уровень языка. Пишу для тех, кто может быть когда-нибудь столкнётся с необходимостью обращаться к агентом из отсортированного типа. Например, у нас есть популяция из 500 агентов agent, у каждого есть свой ресурс, который надо обновлять и в определённый момент нам нужно отсортировать этих агентов, по состоянию ресурса, чтобы спланировать и оптимизировать (или рационализировать) дальнейшую работу. Например, эти агенты могут находиться в другом агенте у которого тоже истекает какое-нибудь техническое обслуживание и нам надо совместить эти виды работ. Так вот для этого сортируем агентов методом sortAscending List sortagent = sortAscending(agents, a -> a.timeTO.getRest())//создали список, в котором агенты отсортировано в порядке возрастания интересующего нас параметра. Но как теперь извлечь самого агента. Ведь объекты в list имеют класс Object, а нам надо работать с классом Agent. Нужно привести их к типу: for (int i=0; i<sortagent.size(); i++) {Object obj = sortagent.get(i); Agent a = (Agent) obj; Наверное, вторая строчка и не нужна можно попробовать это сделать напрямую Agent a = (Agent) sortagent.get(i); Надо будет проверить, но смысл, надеюсь, понятен. Приношу извинения, что так много написан, наверное, не очень нужного текста, ну очень уж хотелось поделиться тем, что нашёл решения полугодовой давности!!!
3
|
07.11.2018, 14:01 | |
07.11.2018, 14:01 | |
Помогаю со студенческими работами здесь
6
Создание и использование параметров агента. Генерация агента блоком source вызов Ls-агента с показом диалогового окна из Java-агента Описать процедуру maxmin (x, y) присваивает параметру х большее из вещественных чисел x и y, а параметру у -- меньшее Выбор по параметру (артикулу) с одного листа-вывод на втором листе всех данных Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |