2 回答
TA贡献1895条经验 获得超7个赞
如前所述,您的问题实际上是一个受约束的优化问题,对您的数量差异有约束。
在数学上,这将在体积差异小于1000的约束下最小化体积差异。将其表示为线性优化问题的最简单方法是:
min weights . x
subject to volumes . x < 1000.0
for all i, x[i] = +1 or -1
a . b矢量点积在哪里。解决此问题后,所有索引x = +1对应于您的第一个数组,所有索引x = -1对应于您的第二个数组。
不幸的是,已知0-1整数编程是NP-hard的。解决该问题的最简单方法是对空间进行穷尽的蛮力探索,但它需要测试所有2^n可能的向量x(n原始weights和volumes向量的长度在哪里),这些向量可能会很快失去控制。关于此主题的文献很多,算法更为有效,但它们通常针对特定的问题和/或约束条件。您可以在Google上搜索“线性整数编程”,以查看在此主题上所做的事情。
我认为最简单的方法可能是执行基于启发式的蛮力搜索,在这种情况下,您会尽早修剪搜索树,以免超出体积约束,并保持接近约束(一般而言,线性解优化问题在可行空间的边缘)。
如果您一般不熟悉优化文章或数学知识,那么Wikipedia文章会提供很好的介绍,但是有关此主题的大多数文章会迅速显示一些您可以立即适应的(伪)代码。
如果您n
的解决方案很大,我认为您将不得不在解决方案的优化程度与计算速度之间做出权衡。您的解决方案可能不是最佳选择,但是它比穷举搜索要快得多。可能会有更好的权衡取舍,具体取决于问题的确切配置。
- 2 回答
- 0 关注
- 271 浏览
添加回答
举报