Python Pulp Query — распределите задачу в пределах временного диапазона для достижения цели по минимизации количества реPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Python Pulp Query — распределите задачу в пределах временного диапазона для достижения цели по минимизации количества ре

Сообщение Anonymous »

Цель
Минимизировать количество ресурсов для обработки всех требований.
Вводные данные, которые у нас есть, — это список требований, которые необходимо назначить любому ресурсу из списка. ресурсов, которые можно сопоставить.
Каждое требование должно быть распределено по продолжительности в соответствии с количеством запрошенных часов и в пределах диапазона дат, указанных в запросе.
Задача
Код, которым я поделился ниже, выделяет ресурс с даты начала (Доступный диапазон (день начала)) на входе, он не находит этого из заданного диапазона дней (Доступный диапазон (день начала) Доступный диапазон (день окончания)), какую дату лучше всего использовать в качестве даты начала, чтобы можно было свести к минимуму общее количество производимых автомобилей.
Например: В приведенном ниже примере входных данных — требование 1 может быть выделено для любого ресурса и на любые 3 недели из предоставленного диапазона. Количество недель в запросе 1 составляет 3 недели (120/40), которые можно распределить от
22W211 до 22W235 или от 22W221 до 22W245 или от 22W231 до 22W255 или от 22W241 до 22W265 и т. д.
Пример ввода



Идентификатор запроса
Количество часов для выделения
Доступный диапазон (день начала)
Доступный диапазон (конечный день)
Список ресурсов, с которыми можно сопоставить требование




1
120
22W211
22W305
RES1, RES2, RES3, RES4


2
40
22W211
22W225
RES1, RES2 , RES3, RES4


3
80
22W211
22W305
RES1, RES2, RES3, RES4


4
8
21W231
21W255
RES1, RES2, RES3, RES4


5
24
21W231
21W255
RES2, RES3, RES4

6
16
21W231
21W255
RES2, RES3, RES4


7
120
22W251
22W275
RES2, RES3, RES4


8
240
22W211
22W305
RES2, RES3, RES4


9
40
22W211
22W225RES2, RES3, RES4


10
120
22W211
22W255
RES2


Код: Выделить всё

RES_LIST
= уникальный набор ресурсов, упомянутый в таблице.
мы создали копию списка ресурсов, чтобы одни и те же ресурсы можно было создавать несколько раз. ресурс можно принять за роботов, мы можем иметь несколько копий одного и того же робота, если это может уменьшить количество покупаемых роботов.

Код: Выделить всё

# Create a linear programming problem using pulp
prob = pulp.LpProblem("RES_Scheduling", pulp.LpMinimize)

# Binary variables to indicate if a res is used or not
RES_LIST = pulp.LpVariable.dicts('RES_LIST', res_list, cat='Binary')

# Binary variables to indicate if a copied res is used or not
RES_LIST_copied = pulp.LpVariable.dicts('RES_LIST_copied', [item for sublist in copied_res.values() for item in sublist],
cat='Binary')

# BInary variables to indicate assignment of res to requirement
ASSIGNMENT = pulp.LpVariable.dicts('ASSIGNMENT', (range(len(Requirements)), range(len(RES_LIST) + len(RES_LIST_copied))), cat='Binary')
# print(ASSIGNMENT)
# Objective function: Minimize the number of res used

prob += pulp.lpSum([RES_LIST[RES] for RES in RES_list]) + pulp.lpSum([RES_LIST_copied[RES] for RES in RES_LIST_copied])

# Constraint: Ensue each test need is assigned 1 RES or copied RES
for i, need in enumerate(Requirements):
prob += pulp.lpSum([ASSIGNMENT[i][j] for j, RES in enumerate(RES_List+ list(RES_LIST_copied)) if RES.split('-')[0] in need['RES']]) == 1
# Constraint: Ensure assignment variables are consistent with usage variables
for j, RES in enumerate(RES_List+ list(RES_LIST_copied)):
if RES.split('-')[0] in need['RESs']:
if '-' in RES: # If its a copied RES
prob += ASSIGNMENT[i][j] 

Подробнее здесь: [url]https://stackoverflow.com/questions/78993084/python-pulp-query-allocate-task-within-timerange-to-achieve-objective-to-minim[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»