我有一个矩阵,有40行8列,具有非负浮点数,并且有16个浮点阈值:
S_min1, S_min2, ..., S_min8
S_max1, S_max2, ..., S_max8
我需要找到行的子集,例如:
S_min1
和S_max1
S_min2
和S_max2
S_min8
和S_max8
有什么方法可以避免穷举算法?因为遍历10 ^ 12个组合看起来不太好。
答案 0 :(得分:2)
这似乎是linear programming的任务。
您为每行定义整数系数0/1
,它们的总和应在1..40范围内。
然后使用这些系数与单元格值和阈值定义不等式。
A[1,1]*R[1] + A[1,2]*R[2] +... + A[1,40]*R[40] > S_Min1
A[1,1]*R[1] + A[1,2]*R[2] +... + A[1,40]*R[40] < S_Max1
...
使用一些可用的LP解算器解决每个系数和的任务
(也许有一种方法可以避免循环求和,但我不知道合适的条件)