我正在研究一个编程问题,它归结为一组方程式和不等式:
x[0]*a[0] + x[1]*a[1] + ... x[n]*a[n] >= D
x[0]*b[0] + x[1]*b[1] + ... x[n]*b[n] = C
考虑到输入X
以及列表和C
以及{{1},我想解决D
的值,它会给出绝对最小值A
由B
和a[0 - n]
组成。
我目前在Python中正在解决这个问题,但问题通常与语言无关。
澄清更新:系数b[0 - n ]
仅限于非负整数集。
答案 0 :(得分:11)
这看起来像linear programming问题。 Simplex algorithm通常会产生良好的效果。它基本上走了由不等式划分的子空间的边界,寻找最优。
从视觉上考虑它:每个不等式表示一个半空间,一个n维空间中的平面,你必须在它的右侧。您的实用程序功能正是您要优化的功能。如果空间是封闭的,最佳位置将是封闭空间的一个顶点;如果它是开放的,那么最佳可能是无限的。
答案 1 :(得分:3)
查看线性编程的wikipedia条目。您正在搜索整数编程部分(x [i]是整数的约束并不容易)。
在python库中搜索branch& bound,branch& cut等(我认为它们还没有在scipy中实现)。
其他有趣的链接:
答案 2 :(得分:2)
看起来这是一个linear programming问题。
答案 3 :(得分:1)
您可能希望使用Matlab或Mathematica或查看Numerical Recipes in C中的代码,以获取有关如何实现最小化函数的想法。提供的链接是1992年版的书。亚马逊提供更新版本。
答案 4 :(得分:0)
这个company有一个工具可以做这种事情。