我正在研究一个问题,感觉它可能类似于数学编程中的现有问题,但是我很难找到任何此类问题。
问题是这样的:我们有 n 个维度为 d 的维向量,这样每个集合都恰好包含了 d +1个向量。在每个集合内,所有向量都具有相同的长度(此外,集合中任何两个向量之间的角度对于任何集合都是相同的,但是我不确定这是否相关)。然后,我们需要从每个集合中精确选择一个向量,并计算这些向量的总和。我们的目标是做出选择,以使向量的总和最小化。
感觉问题似乎与最短向量问题或作业调度的一种变体有关,其中在计算机上调度作业会影响所有计算机或分区问题。
这个问题响了吗?具体来说,我正在寻找解决此问题的方法,因为目前最好的选择是使用ILP,但我认为必须做一些更聪明的事情。
答案 0 :(得分:3)
我认为这是一个MIQP(混合整数二次编程)或MISOCP(混合整数二阶锥)问题:
让我们
+-------------------+----------+----+
| timestamp| eventID|part|
+-------------------+----------+----+
|2018-12-01 11:43:09|event10009| 100|
|2018-12-01 11:43:02|event10003| 100|
|2018-12-01 11:43:11|event10012| 100|
|2018-12-01 11:43:10|event10011| 100|
|2018-12-01 11:43:08|event10007| 100|
|2018-12-01 11:43:02|event10001| 100|
|2018-12-01 11:43:08|event10008| 100|
|2018-12-01 11:43:12|event10013| 100|
|2018-12-01 11:43:09|event10010| 100|
|2018-12-01 11:43:14|event10014| 100|
|2018-12-01 10:11:54| event4357| 43|
|2018-12-01 10:47:33| event6524| 65|
|2018-12-01 10:23:08| event5064| 50|
|2018-12-01 10:23:02| event5060| 50|
|2018-12-01 10:23:39| event5099| 50|
|2018-12-01 10:22:25| event5019| 50|
|2018-12-01 09:16:36| event1042| 10|
|2018-12-01 09:16:03| event1008| 10|
|2018-12-01 09:16:13| event1017| 10|
|2018-12-01 09:17:28| event1092| 10|
+-------------------+----------+----+
那么问题可以表述为:
v(i,j) be i vectors in group j (data)
x(i,j) in {0,1}: binary decision variables
w: sum of selected vectors (decision variable)
如果需要,可以替换为 min ||w||
sum(i, x(i,j)) = 1 for all j
w = sum((i,j), x(i,j)*v(i,j))
。确实,我没有使用角度限制(这是对数据的限制,而不是对模型的决策变量的限制)。选择w
变量是为了使我们从每个组中选择一个向量。
可以通过最小化元素平方的和(即最小化范数的平方)来代替最小化2范数。
假设2范数,这是一个MISOCP问题或凸MIQP问题,可以使用许多求解器。对于1-范数和无穷范数,我们可以制定一个线性MIP问题。 MIP求解器广泛可用。