Работая над личным проектом, я столкнулся с проблемой, которую постараюсь обобщить здесь.
Учитывая список ресурсов разной ценности (например, resources = [1, 0.8, 1.5, 0.8, 1.2...]
), я хочу поделиться ими с группой из N человек так, чтобы это было настолько справедливо, насколько это возможно (т.е. никто не заканчивает тем, что накапливает слишком большую ценность, в то время как другие слишком мало).
Полагаю, хорошим способом решения этой проблемы является минимизация функции:
f(r1,...,rN) = (avg - r1)^2 + (avg - r2)^2 + ... + (avg - rN)^2
Где avg = sum(resources) / N
и rx
- ресурсы, назначенные человеку x
.
Я наткнулся на scipy.optimize.minimize
, и я думаю, что это может быть полезно, но я не могу понять, как описать ограничение, что значения r1, ..., rn
не могут быть произвольными, а вместо этого должны быть взяты из resources
(и таким образом, что один и тот же ресурс не предоставляется более чем одному человеку в решении), поскольку у меня нет ни опыта работы с этим модулем, ни достаточных математических знаний, применимых к решению проблем такого типа.
Есть ли простой способ решить эту проблему с помощью scipy
?