Форум программистов, компьютерный форум, киберфорум
AnyLogic
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
5 / 5 / 1
Регистрация: 29.04.2018
Сообщений: 15
1

Выбор агента из популяции по параметру

29.04.2018, 09:02. Показов 3762. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Подскажите пожалуйста, как можно выбрать агента из популяции по определённому параметру?
Например, в модели технического обслуживания турбин. Если в агент Truck добавить параметр KR - коэффициент работы, который будет равен отношению времени его работы к времени жизни автомобиля (сколько он всего существует), то этот коэффициент будет показывать какой грузовик меньше или больше был на выезде. Как теперь сделать так, что бы на очередной вызов от турбин выезжал грузовик с наименьшим KR?
Заранее спасибо за ответ!!!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.04.2018, 09:02
Ответы с готовыми решениями:

Выбор из строки по параметру
Здравствуйте. Как можно выбрать нужное мне? Есть переменная k равная к примеру 2, то из стоки...

Массив: выбор маршрута согласно параметру
Здравствуйте, Я никогда раньше не сталкивалась с такой задачкой в VBA Exсel. Все что получается с...

Как в AnyLogic сделать выбор ресурсов, в зависимости от вида агента?
как в AnyLogic сделать выбор ресурсов, в зависимости от вида агента, воспользовавшись одним...

Выбор нужной информации из RichTextBox1.Text по определенному параметру
Есть информация (вложенный текстовой файл) - она помещена в RichTextBox1.Text. и есть второй...

5
1816 / 1030 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
29.04.2018, 12:51 2
Цитата Сообщение от nord_0 Посмотреть сообщение
Как теперь сделать так, что бы на очередной вызов от турбин выезжал грузовик с наименьшим KR?
Не все знакомы или помнят устройство модели работы турбин. Хорошо было бы Вам разместить архив с моделью на форуме и конкретизировать вопрос.

Выбор агента сделать очень просто. В конкретно вашей ситуации чтобы предложить способ нужно понимать как сейчас выбирается агент? Первый свободный в блоке 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.11.2018, 14:01
Помогаю со студенческими работами здесь

Создание и использование параметров агента. Генерация агента блоком source
Здравствуйте! У меня AnyLogic 7.2.0. Прошу помочь, кто знает: Как создавать агента с помощью...

вызов Ls-агента с показом диалогового окна из Java-агента
есть Java-агент, надо в нем показать диалоговое окно (картинку в нем показать и поле для ввода),...

Описать процедуру maxmin (x, y) присваивает параметру х большее из вещественных чисел x и y, а параметру у -- меньшее
Процедура maxmin (x, y) присваивает параметру х большее из вещественных чисел x и y, а параметру у...

Выбор по параметру (артикулу) с одного листа-вывод на втором листе всех данных
Здравствуйте, помогите пожалуйста с такой проблемой в Excel. Есть файл, для примера там всего 10...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru