【发布时间】:2018-06-25 20:57:40
【问题描述】:
我正在尝试优化空间有限的试用成员的分组/选择,但遇到了一些麻烦。我已经准备好进行优化的 pandas 数据帧,并且可以毫无问题地运行线性优化,除了我需要添加一个约束。我正在尝试使用二进制文件进行选择(但出于任何原因,我并不依赖于此,所以如果用不同的方法解决这个问题,我可以切换)从一个大列表中。我需要尽量减少下一轮试验中选择的组合试验时间,但由于实验的性质,一些受试者已经进行了多次试验。我想根据最小化时间选择最佳主题组合,但允许某些主题多次出现在列表中以进行优化(因此我不必事先手动删除它们)。例如:
Name Trial ID Time (ms) Selected?
Mary Smith A 11001 33 1
John Doe A 11002 24 0
James Smith B 11003 52 0
Stacey Doe A 11004 21 1
John Doe B 11002 19 1
是否有某种方法可以允许 2 个 John Doe 条目进行优化,但将输出限制为仅他的一个选择?感谢您的宝贵时间!
【问题讨论】:
-
您不必“手动”删除它们。您可以只使用
df.sort_values(['Name', 'Time (ms)']).drop_duplicates('Name'),然后每个人的时间最短。 -
对,对不起,我想我应该澄清一下。由于试验和数据集的性质,我需要记录每个试验的删除,所以即使我可以放弃差的分数,我也必须手动记录,这将是非常耗时的。所以我认为我主要受制于这种纸浆格式。
-
这是我在
pulp中的做法:使用熊猫我会识别每个重复的主题(Joe Doe。)对于每个这样的主题,您需要添加一个 0/1(二进制)多变的。最后,添加这些变量的 SOS(特殊排序集),每个重复主题一个约束。y_JD1 + y_JD2 <= 1强制输出至多是这个主题之一。
标签: python pandas optimization pulp