【发布时间】:2019-06-21 19:35:45
【问题描述】:
在做个人项目时,遇到了一个问题,我将在这里尝试概括。
给定一份不同价值的资源列表(例如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 的值不能是任意值而是需要取自@987654328 的约束@ (并且在解决方案中不会将相同的资源提供给多个人),因为我没有此模块的任何经验,也没有适用于此类问题的强大数学背景。
有没有用scipy 解决这个问题的简单方法?
【问题讨论】:
-
把人放在最小的堆里。对于每个资源,为堆顶部的人提供下一个可用资源,将它们从堆中删除并重新插入。这个想法是资源最少的人总是在顶部
-
您还应该对资源进行从大到小排序,以确保最终获得最佳分布
标签: python algorithm scipy scipy-optimize