Линейное программирование управления ресурсами

Мне нужно решить простую проблему. Мне нужно распределить ресурсы по трем проектам таким образом, чтобы мы максимально эффективно использовали ресурсы. Мне нужна помощь в формулировании проблемы в виде целевой функции.

Подробнее о проблеме:

Все проекты продлятся 18 недель. Три списка ниже определяют потребность в ресурсах в течение 18 недель (18 x 5 = 90 дней) по 3 проектам.

Project_One =  [32  14  30  12  23  27  12  21  32  12  20  29  15  20  15  17  15  11] 
Project_Two =  [ 4  5   14  11  13  9   10  11  7   9   14  8   9   11  9   7   6   8]
Project_Three= [ 8  8   8   8   8   8   8   8   8   8   8   8   8   8   8   8   8   8];

У нас в общей сложности 48 подрядчиков. Мы можем упустить ресурсы, чтобы минимизировать потери, однако стоимость переобучения составляет 10 дней непродуктивности.

Как я могу сформулировать задачу линейного программирования, чтобы получить количество ресурсов, которое нам нужно хранить каждую неделю, чтобы минимизировать общие затраты. Целевая функция должна учитывать, лучше ли отпустить и переобучиться позже или оставить ресурсы для использования в последующие недели по мере роста спроса?

Некоторая ключевая информация:

1) Стоимость 1 ресурса 100 долларов в сутки. 2) Новые ресурсы обучаются путем слежки за существующими работниками. Для простоты мы предполагаем, что стоимость всего 10 рабочих дней = 1000 долларов США. 3) Стоимость простоя ресурсов - это количество дней между тем, как они не требуются ни в одном проекте, и до следующего всплеска спроса. В идеале мы не должны отпускать ресурс, если время простоя меньше 10 дней.


person Kal    schedule 07.06.2017    source источник
comment
Проблема неразрешима. Вам нужно более 48 ресурсов в период 3, и у вас нет времени на обучение новых. Я предполагаю, что все - дни (ваш вопрос касается 18 недель и 18 дней, что меня смущает).   -  person Erwin Kalvelagen    schedule 07.06.2017
comment
Эрвин Калвелаген. Большое спасибо за указание на это. Моя ошибка, это 18 недель, около 90 дней. Для простоты я оставил 18 недель, 90 дней, но обычно проект длится в среднем 180 дней.   -  person Kal    schedule 08.06.2017
comment
Я не думаю, что это можно сделать с чистым LP. Вам понадобятся некоторые двоичные переменные, чтобы получить модель MIP. Также вам понадобится некоторая информация о стоимости (стоимость простаивающих ресурсов, стоимость обучения).   -  person Erwin Kalvelagen    schedule 08.06.2017
comment
Спасибо за внимание @ErwinKalvelagen. Я посмотрю в МИП. Я добавил информацию о стоимости выше. Какими будут двоичные переменные?   -  person Kal    schedule 09.06.2017
comment
Я использовал h(i,t), чтобы указать, когда кого-то наняли, и r(i,t), чтобы указать, доступен ли ресурс (для обучения или для работы).   -  person Erwin Kalvelagen    schedule 09.06.2017


Ответы (1)


Моя попытка использовать модель MIP выглядит так:

введите здесь описание изображения

Результат:

введите здесь описание изображения

У нас есть 4 найма / стажера на 1-й неделе (обучение на 1-й и 2-й неделях, доступно для работы на 3-й неделе) и 3 найма на 7-й неделе. На рисунке видно, что количество рабочих увеличивается в начале 3-й недели и 9.

person Erwin Kalvelagen    schedule 10.06.2017
comment
Большое спасибо @ErwinKalvelagen. Решение выглядит очень хорошо. У меня один быстрый вопрос. Разве в целевой функции постоянная, умножающая количество наймов, не должна быть больше единицы? Если мы предположим, что стоимость найма и обучения выше, чем удержание ресурсов в течение 2 недель (это хорошее предположение, которое вы сделали), то я ожидаю, что константа будет выше 1? Спасибо. - person Kal; 13.06.2017
comment
r(i,t) работает, простаивает или тренируется, так что это уже есть. - person Erwin Kalvelagen; 13.06.2017
comment
Оранжевая линия - сумма r за вычетом стажеров. - person Erwin Kalvelagen; 13.06.2017