Есть 22 драйвера.Каждый водитель должен работать не менее 7,6 часов и может работать не более 10 часов.Стоимость каждого драйвера и производительность разные.
Если какой-то водитель работает сверхурочно (более 7,6 часов), за первые 2 часа нам нужно заплатить 1,5 раза.За оставшиеся 0,4 часа нам нужно заплатить 2 раза.
195 часов работы должны выполнить 22 водителя.Нам нужно составить расписание таким образом, чтобы затраты можно было минимизировать.
Driver,Cost,Productivity
A,70,0.8
B,22,0.8
C,24,0.8
D,26,0.8
E,28,0.8
F,30,0.8
G,32,0.8
H,34,0.8
I,36,0.8
J,38,0.8
K,40,0.8
L,42,0.9
M,44,0.9
N,46,0.9
O,48,0.9
P,50,0.9
Q,52,0.9
R,54,0.9
S,56,0.9
T,58,0.9
U,60,0.9
V,62,0.5
Переменные решения:
X1, X2 ........ X22 представляет общее количество часовназначается каждому водителю
Функция цели:
Мин. Z = 20 * X1 + 22 * X2 ...... 62 * X22
Ограничения:
X1> = 7,6, X2> = 7,6 .... X22> = 7,6
X1 <= 10, X2 <= 10 .... X22 <= 10 </p>
X1 +X2 ..... + X22 <= 195 </p>
Я до сих пор пробовал следовать программе на Python.
import pulp
import pandas as pd
def main():
model = pulp.LpProblem("Cost minimising scheduling problem", pulp.LpMinimize)
totalHours = 192
minHourEachDriver = 7.6
maxHourEachDriver = 10
# importing data from CSV
drivers = pd.DataFrame.from_csv('csv/drivers.csv', index_col=['Driver', 'Cost', 'Productivity'])
# Decision Variables
drv = pulp.LpVariable.dicts("driverName", indexs=((i) for i, j, k in drivers.index), lowBound=0,
cat='Continuous')
# Objective
model += pulp.lpSum([j * (1 / k) * drv[i] for i, j, k in drivers.index]), "Cost"
# Constraints
# total no of hours work to be done
model += pulp.lpSum([drv[i] for i, j, k in drivers.index]) == totalHours
for i, j, k in drivers.index:
# minimum hours driver has to work
model += drv[i] >= minHourEachDriver
# Maximum hour driver can work
model += drv[i] <= maxHourEachDriver
model.solve()
# model status
print(pulp.LpStatus[model.status])
# Total Cost
print(pulp.value(model.objective))
# No of hrs allocated to each driver
for i, j, k in drivers.index:
var_value = drv[i].varValue
# print(var_value)
print("The number hours for driver {0} are {1}".format(i, var_value))
if __name__ == '__main__':
main()
Но я не могу понять, как мы можем поставить следующиеограничение.
Если какой-то водитель работает сверхурочно (более 7,6 часов), за первые 2 часа нам нужно заплатить 1,5 раза.За оставшиеся 0,4 часа нам нужно заплатить 2 раза.