在处理个人项目时,我遇到了一个问题,在这里我将尝试概括一下。
给出了一系列具有不同价值的资源(例如resources = [1, 0.8, 1.5, 0.8, 1.2...]
),我想以一种尽可能公平的方式在一组N个人之间共享它们(即,没有人会ho积太多价值)而其他的则太少了。
我认为解决此问题的一种好方法是最小化功能:
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
解决此问题?
答案 0 :(得分:0)
这是Partition Problem的广义变体(优化变体是NP-hard)。
您的情况的不同:
现在,我会毫不犹豫地说,您的问题仍然是NP难题,尽管在需要证据时可以考虑上述差异(1.通常在温和的条件下容易;例如,在您的情况下:乘以10 ; 2.简单3.不确定我将如何解决这个问题。)
从wikis Partition article开始,它概述了基本结果和方法(您将看到:2分区和n> 2分区复杂度之间存在差异)。
由于这是一个离散优化问题(例如,公式化为二进制二次规划),因此scipy在精心选择的方法方面无法提供任何帮助:没有(二进制)整数编程。
与wiki链接一起提到的内容也将表明,评论中的方法不能保证最佳解决方案。