Я пытаюсь решить проблему MIP.Я пытаюсь определить количество экзаменов, которые должны быть выполнены каждым специалистом на дату за неделю, путем минимизации общего времени, используемого для удовлетворения спроса.
У меня есть спрос, время, затраченное каждой технологией, список техникови т. д. в отдельных фреймах данных.
Я могу найти количество экзаменов для минимизации цели, однако я хочу добавить ограничение на максимальное количество технологий, которое будет использоваться как 8.
Я добавил несколько двоичных переменных, чтобы добавить условие, однако я не могу связать его с целевой функцией.
Ниже приведен мой код:
model = pulp.LpProblem("Time minimizing problem", pulp.LpMinimize)
capacity = pulp.LpVariable.dicts("capacity",
((examdate , techname, region) for examdate, techname, region in tech_data_new.index),
lowBound=0,
cat='Integer')
for examdate, techname,region in tech_data_new.index:
var = capacity[(examdate,techname,region)]
var.upBound = tech_data_new.loc[(examdate,techname,region), 'Max Capacity']
model += pulp.lpSum(capacity[examdate,techname, region] * tech_data_new.loc[(examdate,techname, region), 'Time taken'] for examdate,techname, region in tech_data_new.index)
for date in demand_data.index.get_level_values('Exam Date').unique():
for i in demand_data.loc[date].index.tolist():
model += pulp.lpSum([capacity[examdate,techname,region] for examdate, techname, region in tech_data_new.index
if (date == examdate and i == region)]) == demand_data.loc[(demand_data.index.get_level_values('Exam Date') == date) & (demand_data.index.get_level_values('Body Region') == i), shiftname].item()
И это двоичные файлыЯ попытался добавить переменные, но не смог соотнести их с целью, поскольку умножение сделает ее нелинейной.
techs = pulp.LpVariable.dicts("techs",
(techname for techname in tech_data_new.index.get_level_values('Technologist Name').unique()),
cat='Binary')
days = pulp.LpVariable.dicts("day",
(examdate for examdate in tech_data_new.index.get_level_values('Exam Date').unique()),
cat='Binary')
Любое преимущество будет оценено.Заранее спасибо.Пожалуйста, дайте мне знать, если требуется какая-либо другая поддержка.