Здравствуйте! Очень нужна помощь!
Возможно ли найти оптимальную стратегию из конечного числа
стратегий реорганизации производства?
К примеру, имеется:
1) определённое количество работающих агрегатов, приносящих
прибыль производству, но со временем эксплуатации агрегаты
выходят из строя;
2) рабочие, производящие ремонт либо замену агрегатов на более
производительные, но со временем работы из прибыли производства
вычитается зарплата рабочим.
Вопрос: сколько рабочих привлекать, когда и к какой именно
работе(ремонт/замена)? Т.е. вопрос сводится к выбору оптимальной
стратегии управления реорганизацией производства. В связи с
этим, каким подходом имитационного моделирования удобнее
воспользоваться для нахождения оптимальной стратегии
реорганизации? И как реализовать поиск, если количество рабочих
должно рассматриваться как динамическое значение, зависящее от
каждой конкретной стратегии?
Заранее спасибо!
Андрей Малыханов — 31.10.07
Здравствуйте, Олег!
AnyLogic позволяет оптимизировать значения параметров модели. Для
этого существуют эксперименты двух типов: Optimization (оптимизация) и
ParamVariation (вырьирование параметров). Вы также можете
визуализировать результаты запусков модели с различными
значениями параметров. Более подробно о таких экспериментах вы
можете почитать в [Руководстве пользователя AnyLogic5], в разделах 12, 15
и 16. В вашем случае я бы предложил следующее:
1. построить модель (скорее всего, для этого вам лучше
использовать библиотеку EnterpriseLibrary, то есть модель будет
дискретно-событийной);
2. определить целевую функцию (например, число выпущенных деталей
или чистая прибыль);
3. определить параметры стратегии (например, три параметра:
количество агрегатов, количество рабочих и доля заменяемых
агрегатов в единицу времени). Чем меньше будет пространство
допустимых значений параметров, тем эффективнее будет работать
оптимизация.
4. Запустить эксперимент ParamVariation на широком диапазоне
параметров, чтобы приблизительно оценить эффективность
стратегий и сузить пространство изменения параметров;
5. Запустить эксперимент Optimization на меньшем пространстве
изменения параметров.
Справочные руководства и примеры моделей помогут вам быстрее
выполнить вашу задачу.
Oleg — 31.10.07
Параметры будут варьироваться с каждой итерацией нового запуска,
если я правильно понимаю.. А количество рабочих может быть разным
в течении одной стратегии. Например, с 1 по 5-й день рабочие не
привлекались, с 6-го по 9-й работали двое ремонтников, с 10-го трое и
т.п. Как быть..?
Андрей Малыханов — 31.10.07
Можно промоделировать количество рабочих, например, с помощью
табличных функций. Таким образом, вы задаете расписание рабочих
большим количеством параметров. Пространство параметров
получается слишком большим не только для оптимизации, но и для
экспериментов с варьированием параметров. На вашем месте я бы
ввел в модель новое правило, определяющее количество рабочих в
данное время. Например, [На каждые 10 сломанных агрегатов
приходится X работников] или [Каждый день на ремонт выделяется X
человеко-часов]. Тогда оптимизация расписания работы сведется к
оптимизации по одному параметру.
Oleg — 31.10.07
Нет, тут немного не так. Количество рабочих во времени либо норма
человеко-часов не задаётся по условию, их надо определить. Что
тогда-то надо привлекать столько-то рабочих для того-то (ремонта
либо замены) и при этом обеспечивается максимальная прибыль за
время реорганизации. В этом и есть оптимальная стратегия.
А всё остальное известные - статические значения, которые
задаются до запуска эксперимента: число агрегатов, наработка на
отказ, производительность...
А вот как получить расписание рабочих..?
Андрей Малыханов — 01.11.07
Повторюсь, расписание (количество рабочих во времени) удобнее
всего задавать табличной функцией. Такая функция будет иметь
кусочно-линейный вид и будет однозначно задаваться точками
излома функции. В вашем примере:
>> Например, с 1 по 5-й день рабочие не
>> привлекались, с 6-го по 9-й работали двое ремонтников, с 10-го
трое
функция расписания задается точками (1,0), (6,2), (10,3). Таким образом,
расписание задается числом параметров, равным двойному числу
точек излома функции расписания. Получение "хорошего"
расписания заключается в следующем: вы создаете модель с
первоначальным вариантом расписания. Затем изменяете параметры
функции расписания (вручную или запустив оптимизационный
эксперимент и передав в него все или некоторые параметры функции)
и фиксируете изменения целевой функции. При моделировании
длительного периода количество параметров заданного таким
образом расписания возрастает. Оптимизировать при большом
количестве параметров очень сложно, однако, возможно, вы получите
результат при большом числе прогонов модели.
Технически вам может понадобиться динамическое создание
табличных функций (LookuTable). Класс LookupTable описан в справочнике
классов AnyLogic.
olga — 20.05.08
Здравствуйте. Я студенка, занимаюсь разработкой модели завода на
AnyLogic в рамках дипломного проектирования. Использую для
построения библиотеку Enterprise Library. Создала 3 новых класса, в каждом
из которых имеется анимация, добавлена сеть(network) и заявки внутри
класса заходят в сеть, прохотят обработку(delay) и выходят из сети.
Так же анимация есть в корневом классе Main. Когда на структуру
корневого объекта Main я добавляю 2 класса(без разницы каких),
последовательно соединенных, программа еще работает, но когда 3
класса - программа выдает ошибку "Exception during step:
java.lang.ArrayIndexOutOfBoundsException: 6". При необходимости могу прислать
созданную модель. Пожалуйста, помогите!
Pavel — 22.05.08
Ольга, я рекомендую Вам отправить модель Группе Технической
Поддержки, используя форму на сайте http://www.xjtek.ru/support/ask_question/