0 / 0 / 0
Регистрация: 27.12.2016
Сообщений: 17
|
||||||
1 | ||||||
Работа с несколькими индивидуальными агентами (как сократить кол-во кода)27.12.2016, 10:50. Показов 1196. Ответов 1
Метки нет (Все метки)
Добрый день!
Очень интересует вопрос, как избавиться от прописывания условий для каждого из 10 агентов (заводов). Они все довольно индивидуальны (уровень запасов готовой продукции, мощности склада и т.п.) и приходится прописывать все индивидуально (отдельная переменная для каждого завода под уровень стока, отдельный параметр для каждого завода по мощности склада). Примеры: 1. Тут пишу условие в Event, для индикатора о заполнении склада.
Таких примеров куча. Как избежать этого всего и писать обобщенно для группы агентов? Или это норма? Добавлено через 27 минут И еще вопрос: как, допустим в диаграмме действий, сослаться не на конкретного агента (plants.get(3)), а чтобы действие происходило со всеми агентами, в зависимости от того, какой агент. Возможно что-то вроде: plants.get(), или как-то по-другому, объясните, пожалуйста. Добавлено через 4 минуты И туда же, чтобы не писать формулу для каждого завода: plant1Stock/plant1whCapacity<0.9 Как-то ведь можно создать одну переменную (наприме Stock и WarehouseCapacity в классе Plant), и чтобы они использовалась в зависимости от завода? Stock/whCapacity<0.9 и т.д. Добавлено через 1 час 42 минуты Нашел ответ. Все решается циклами. Пример: Вводим переменную plantStock Тип: другой = int[] Начальное значение: new int[] {сток1, сток2, и т.д.} Дальше, где нам необходимо применить переменную используем индикатор i, как индикатор завода.
0
|
27.12.2016, 10:50 | |
Ответы с готовыми решениями:
1
Как можно сократить кол-во исходного кода Как сократить кол-во почти одинаковых строчек кода? Как сократить строку с несколькими div, которым необходимо присвоить одинаковый стиль через JS Работа с агентами. |
1816 / 1030 / 285
Регистрация: 13.02.2012
Сообщений: 3,339
|
|
27.12.2016, 15:02 | 2 |
Добрый день.
Что такое plants у вас в примере? Походу это и есть ваш массив объектов -завод. В этом и смысл, что у вас есть коллекция заводов (10) штук - структура у всех одинаковая, а значения свойств объектов разные, что придаёт им индивидуальность. Далее все ваши условия сводятся к единому циклу с проверкой, в рамках которого проходит последовательная проверка всех объектов по заданному условию Код
for (Plant p: plants){ // эргономичный цикл по массиву plants, p - конкретный объект int plantStock = p.plantStock; // Получаем 1 раз значение переменной объекта, а не 100 раз обращаемся к объекту int plantwhCapacity = p.plantwhCapacity; double divide = plantStock/plantwhCapacity*1.0 ; // Делим 1 раз, а не 100 как у вас в каждом условии if(divide<0.8){ p.oval.setFillColor(green); } else { if(divide<0.9 && divide>0.8) { // Проверка divide>0.8 лишняя, т.к. > в 100% случаев p.oval.setFillColor(yellow); } else { p.oval.setFillColor(red); } } } Можно и из встроенной базы данных, можно из Excel файла, можно и в самом AnyLogic. Откройте класс завода и напишите действие при создании экземпляра данного класса (т.е. конкретного завода), там можно прописать код, где в зависимости от значения индекса завода в массиве можно знадать значения параметров, например Код
switch (this.getIndex()){ 0: plantStock = 100; break; 1: ... break; default: .... break; }
0
|
27.12.2016, 15:02 | |
27.12.2016, 15:02 | |
Помогаю со студенческими работами здесь
2
Работа с агентами и их копиями Как сократить размер кода? Как сократить объём кода? Как сократить повторяющиеся строки кода? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |