Предположим, у меня есть 10 работников и 3 задания (j1, j2, j3).
У моих работников разные навыки, и я создал таблицу, могут ли они выполнять ту или иную работу.
Рабочий
j1
j2
j3
1
Y
Y
Y
2
Y
Y
Y
3
Y
Y
Y
4
Y
Y
Y
Y
5
Y
Y
Y
6
Y
Y
Y
7
Y
Y
Y
8
Н
Н
Y
9
Y
Н
Н
10
Y< /td>
Н
Н
j1 требуется 3 рабочих, j2 требуется 3 работника, j3требуется 4 работника.
Из таблицы видно несколько перестановок, которые будут работать, поскольку большая часть рабочей силы имеет разностороннюю квалификацию, но мне нужен только один.
Я использовал scipy.optimize.linear_sum_assignment
Если они не могут выполнить эту работу, я назначил высокую цену, чтобы попытаться их исключить .
Код: Выделить всё
M = np.array([[ 1, 1, 1],
[ 1, 1, 1],
[ 1, 1, 1],
[ 1, 1, 1],
[ 1, 1, 1],
[ 1, 1, 1],
[ 1, 1, 1],
[ 99, 99, 1],
[ 1, 99, 99],
[ 1, 99, 99],
])
row_ind, col_ind = linear_sum_assignment(M)
print(row_ind, col_ind)
Я не совсем уверен если я сделал что-то не так или неправильно интерпретирую результаты?
Спасибо,
Дэн
Подробнее здесь: https://stackoverflow.com/questions/785 ... rs-to-jobs