Форум программистов, компьютерный форум, киберфорум
AnyLogic
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/26: Рейтинг темы: голосов - 26, средняя оценка - 4.69
1 / 1 / 2
Регистрация: 30.09.2014
Сообщений: 80
1

Создание и использование параметров агента. Генерация агента блоком source

06.10.2015, 13:46. Просмотров 5269. Ответов 10
Метки нет (Все метки)

Здравствуйте! У меня AnyLogic 7.2.0. Прошу помочь, кто знает:

Как создавать агента с помощью блока Source, и при этом на каждом агенте сохранять значение (этап), которую можно изменять в процессе?

У меня вот такая задача:

Один агент должен проходить один SelectOutput5 несколько раз. И в зависимости от этапа должен выходить оттуда по разным путям. Примерно набросал:
Создание и использование параметров агента. Генерация агента блоком source
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.10.2015, 13:46
Ответы с готовыми решениями:

Пешеходная библиотека. Создание параметров для каждого агента
Добрый день всем. Интересует следующий вопрос. Имеем вход, и 3 зоны ожидания после него. Сделан...

Создание заявок Source из "стороннего" агента
Доброе время суток. Имеется source с значением "Вызовам функции inject()", новый агент и тип...

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

Проблема запуска Агента из агента!
Доброго времени суток! Ситуация такова запускю агента из другого агента, при запуске в строке...

10
Модератор
1808 / 1022 / 285
Регистрация: 13.02.2012
Сообщений: 3,334
06.10.2015, 16:28 2
Добрый день.
Вначале на рабочий лист с палитры вытаскиваете агента - указываете его класс, название массива где будут храниться агенты - число агентов указываете 0. Заходите в агента - создаёте параметр или переменную этап, значение целое =0. Со структурой агентов разобрались.

вытаскиваем на главную рабочую область (где массив агентов) - source - настраиваем время появления агентов и указываем класс заявок которые формирует этот источник - ваш класс агентов - и чтобы они добавлялись в эту коллекцию (массив). Собственно сделано. Далее с Селект-оутпутом разберётесь - при каждом проходе будете делать для текущей-обслуживаемой заявки (агента) agent.этап++; Ну и проверку сделаете, если пройдены этапы, то перенаправление.
1
1 / 1 / 2
Регистрация: 30.09.2014
Сообщений: 80
06.10.2015, 20:18  [ТС] 3
Спасибо получилось. Но еще одна проблема:
Создание и использование параметров агента. Генерация агента блоком source

Внутри Вала и Корпуса создал переменную "этап". И в Транспортировке хочу увеличивать значения этапа на два так:
agent.этап = agent.этап + 2

Но выводится ошибка как в картинке.

Получается я не могу задавать одинаковые имена переменных в одном потоке?
0
Модератор
1808 / 1022 / 285
Регистрация: 13.02.2012
Сообщений: 3,334
06.10.2015, 20:29 4
1. НЕ увидел на рабочем листе массив агентов и есть ли у него параметр этап. Для создания агентов используйте популяцию агентов с палитры "Агент".
2. В объекте где вы хотите обращаться к свойствам агента (в очереди или селект-оутпуте) нужно указать класс агентов с которым работает, обслуживает блок. Специфические - Тип агента.

Можно напрямую указать какой тип агента - путём приведения типов Java
((MyAgent)agent).этап
Указываем что имеем дело с объектом Агент класса MyAgent тогда система программирования понимает о чём идёт речь и понимает параметр этап. Иначе agent может быть и других классов ... (ну у вас нет, но в целом да).
1
1 / 1 / 2
Регистрация: 30.09.2014
Сообщений: 80
06.10.2015, 20:52  [ТС] 5
То есть указав в специфическом один агент, например, Вал, я не смогу использовать этот блок для другого агента, например, для Корпуса?

Вот, постарался показать переменные внутри агентов (слева):
Создание и использование параметров агента. Генерация агента блоком source
0
Модератор
1808 / 1022 / 285
Регистрация: 13.02.2012
Сообщений: 3,334
07.10.2015, 07:52 6
Цитата Сообщение от Makhambet Посмотреть сообщение
То есть указав в специфическом один агент, например, Вал, я не смогу использовать этот блок для другого агента, например, для Корпуса?
Вообще сделать можно всё что угодно.
Для вашего случая можно попробовать выбирать агентов не из списка, а перед списком нажать знак = и задать "динамическое" значение - т.е. попробовать через запятую указать 2а класса обслуживаемых блоком заявок.

Классы могут быть неоднородными, т.е. у них параметры могут быть разными, поэтому приводить агента к определённому классу всё же придётся я думаю в коде блока. Сначала необходимо узнать класс агента, а потом уже работать с агентом (привести его к типу и вызвать его параметр, присвоить значение).

Как узнать класс агента хз, нужно экспериментировать, все эти агенты и блоки должны быть унаследованы в объектно-ориентированном программировании от класса Object у которого должен быть метод определения класса для текущего объекта

((Object)agent).getClass() или getType или ещё как-то - покрутите, посмотрите в среде какие методы есть у объекта, может быть напрямую можно вынуть agent.getType() - вернёт класс.

Если не разберётесь - пишите, вечером гляну.
Если разберётесь тоже пишите, форумчанам и гостям пригодится.
1
1 / 1 / 2
Регистрация: 30.09.2014
Сообщений: 80
07.10.2015, 15:28  [ТС] 7
Здравствуйте! Для агентов Корпус и Вал создал функции с одинаковыми именами (get_way). Эта функция возвращает булево значение. Таким способом кажется можно все сделать. Но одна проблема, не могу обратиться к функции get_way текущего агента:

Создание и использование параметров агента. Генерация агента блоком source


Я попробовал ((Object) agent).getClass(). Это вернул class винт.Корпус или class винт.Вал. Но, не понял для чего нужно это, так как для selectoutput нужен текущий объект, а не класс.

Прошу помочь обращаться к функции агента находящемся в блоке selectoutput.

Спасибо.
0
Модератор
1808 / 1022 / 285
Регистрация: 13.02.2012
Сообщений: 3,334
07.10.2015, 16:43 8
Пока только так
Код
Class className = ((Agent)agent).getClass(); // Получаем класс обрабатываемого агента
traceln(className); // Выводим в консоль имя класса обслуживаемого агента
traceln(className.getName()); // Выводим в консоль имя класса обслуживаемого агента
if (className.equals(MyAgent1.class)) {
	((MyAgent1)agent).parameter1 = 1.0; // Приводим к типу агента1
} else {
	((MyAgent2)agent).parameter1 = 1.0; // Приводим к типу агента2
}
Запись типа
Код
((className)agent).parameter1 = 1.0; // Не приводится к типу - хз
Почему-то не работает, поэтому выше предложил с ИФами.
0
1 / 1 / 2
Регистрация: 30.09.2014
Сообщений: 80
07.10.2015, 19:33  [ТС] 9
Мне такую идею предложили.

Нужно создать суперкласс с функцией get-way() и потом унаследовать от этого два агента, с переопределением функции. Как этого унаследования можно добиться на anylogic 7.2.0. Я что-то не могу найти опции унаследования.

Спасибо.
0
Модератор
1808 / 1022 / 285
Регистрация: 13.02.2012
Сообщений: 3,334
07.10.2015, 20:08 10
Хорошая идея через наследование. Наследование.

Создать класс агента (сейчас можно вытащить именно значок класс агента).
например MyAgent0. внутри класса вытянуть функцию - get_way.

Наследование ваших классов от этого класса задаётся в свойствах наследующих агентов- Специфические - Расширяет тип агента и указываете ваш родительский (супер) класс.

В принципе теперь в блоках можно писать agent.get_way(); без приведения классов.
Чтобы переопределить метод get_way() в подчинённых классах думаю можно просто создать такой-же с таким-же именем.
Аналогично поступить и с переменной (параметром).
1
1 / 1 / 2
Регистрация: 30.09.2014
Сообщений: 80
07.10.2015, 23:25  [ТС] 11
С методом наследования решил задачу. Спасибо.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.10.2015, 23:25

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Использование планировщика заданий Windows 8.1 как альтернатива SQL агента
Добрый день! Уважаемые форумчане, подскажите решение нижеописанной задачи: Требуется...

Создание подобия поискового агента
Здравствуйте. Решил сделать какую-нибудь поделку на тему поиска информации в интернете....

Создание агента на стороне сервера
Всем привет! Возник такой вопрос: нужно при поступлении почты (клиент закрыт, т.е. работает только...

Отключение агента?
Написала агентика, который запускается по расписанию и типа шерстит базу, и если есть...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.