在Excel中,我有一个包含项目的表格,每个项目都带有负值或正值。我想知道是否有一种简单的方法可以从表中选择整数数字的随机子集,其总和可以是0或接近它(假设在k次迭代之后)。
stackexchange上提到的一些解决方案提到了(NUMBER / SUM_OF_NUMBER_COLUMN)* TARGET_SUM方法,但它并不适用于所有情况,[例如:如果总和为0]
例如:
在附加的图像中,输入要选择的项目数和目标总和。预期解决方案将返回表[最佳选择]中指示的项目组合,以满足或接近目标总和(+/- 1偏差是理想的)。
正如您所看到的,只有第1列保证是唯一的,即可能存在重复的项目名称实例(如第2列所示),和/或具有相同值的不同项目名称(如第3栏。
我能够使用INDEX(),RANDBETWEEN()和VLOOKUP()的组合实现某些东西来生成数字,但我无法检查总和要求,并且由于某种原因,VLOOKUP()只返回了项目的有效结果一个正值。
我试过的公式是:
VLOOKUP(INDEX(Table3[[#Data],['#]],RANDBETWEEN(1,COUNTA(Table3[[#Data],['#]])),1),Table3,2,FALSE)
但是我无法检查总和并确保VLOOKUP可以处理重复和负值。