查找具有变量边界的变量组合以求和所需的值(使用 Python)

计算科学 优化 Python
2021-12-15 07:00:03

假设我有 n 个变量。每个变量都有下限和上限。我想找到这些变量的所有合适组合以求和所需的值。

一个有两个变量的例子:

x1+x2=1000<=x1<=700<=x2<=60

所以结果看起来像

(x1,x2){(70,30),(69.8,30.2),}

这些变量可以采用上面给出的整数和十进制值。可以根据需要选择这些变量中的每一个的扰动值。这里使用的扰动值是 Pert[X1,X2]=[0.2,0.2]。

这个求解两个变量的问题比有 n 个变量要简单。

Python中是否有可用的算法来解决这样的问题?如果可以提供使用该算法解决类似问题的 Python 代码,那将更有帮助。

2个回答

这个问题可以写成“受限背包”问题:给定一组物品,每个物品的重量为 ,根据背包的总重量,最多用每个物品的一定数量在数学上,它写成:wici

maxi=1Nwixi s.t. i=1Nwixi<W and xici

在您的情况下,每个变量的权重应该对应于扰动。然后你解决上面的优化问题,你的值是,你的上限是wici

在您的情况下,您可以设置:w1=0.2,w2=0.2,c1=350,c2=300

代码审查 se似乎有一个 Python 片段不保证此代码段的正确性或效率。您还可以通过CVXOPT包使用GNU 线性编程工具包(GLPK) 我不知道这些工具是否可以提供所有可行的解决方案,或者如果找到最佳(即满足等式约束;即背包完全装满)组合,它们是否会停止。

使用您列出的约束,您可以将声明为整数,然后使用 IP 求解器求解(请参阅开源 coin-or 求解器,以及 cplex 或 gurobi,如果您可以访问它们)枚举所有可行的整数解。从这里您可以轻松计算扰动值,并找到目标集。xi