lpsolve - 不可行的解决方案,但我有 1 的例子
lpsolve - unfeasible solution, but I have example of 1
我正在尝试在 LPSolve 中解决这个问题 IDE:
/* Objective function */
min: x + y;
/* Variable bounds */
r_1: 2x = 2y;
r_2: x + y = 1.11 x y;
r_3: x >= 1;
r_4: y >= 1;
但我得到的回复是:
Model name: 'LPSolver' - run #1
Objective: Minimize(R0)
SUBMITTED
Model size: 4 constraints, 2 variables, 5 non-zeros.
Sets: 0 GUB, 0 SOS.
Using DUAL simplex for phase 1 and PRIMAL simplex for phase 2.
The primal and dual simplex pricing strategy set to 'Devex'.
The model is INFEASIBLE
lp_solve unsuccessful after 2 iter and a last best value of 1e+030
当 x=1.801801802
和 y=1.801801802
是可能的解决方案时,为什么会发生这种情况?
如何找到解决方案
让我们做一些数学运算。
您的问题是:
min x+y
s.t. 2x = 2y
x + y = 1.11 x y
x >= 1
y >= 1
第一个约束2x = 2y
可以简化为x=y
。我们现在替换整个问题:
min 2*x
s.t. 2*x = 1.11 x^2
x >= 1
并重新排列:
min 2*x
s.t. 1.11 x^2-2*x=0
x >= 1
从几何我们知道 1.11 x^2-2*x
形成一条 upward-opening 抛物线,其最小值小于零。因此,恰恰有两点。这些由二次方程给出:200/111 和 0.
其中只有一个满足第二个约束条件:200/111。
为什么我不能用我的求解器找到这个约束
最简单的方法是说这是因为 x^2
项(代入前的 x*y
是非线性的)。但它比这更深入。非线性问题可以容易解决,只要它们是凸。 convex problem 是一个约束形成单个连续 space 的约束,因此 space 中两点之间绘制的任何线都位于 space.[=25 的边界内=]
你的问题不是凸的。约束 1.11 x^2-2*x=0
定义了无限数量的点。这些点中的任何两个都不能由一条直线连接,该直线停留在约束定义的 space 中,因为 space 是弯曲的。如果约束改为 1.11 x^2-2*x<=0
,那么 space 将是凸的,因为所有点都可以与留在其内部的直线连接。
非凸问题是更广泛的 class 问题的一部分,称为 NP-Hard。这意味着没有(也许不能)解决问题的简单方法。我们要聪明。
可以处理 mixed-integer programming (MIP/MILP) can solve many non-convex problems efficiently, as can other techniques such as genetic algorithms 的求解器。但是,在幕后,这些技术都依赖于美化 guess-and-check.
所以你的求解器失败了,因为问题是非凸的,而且你的求解器既不够聪明,无法使用 MIP guess-and-check 找到解决方案,也不够聪明,无法使用二次方程。
那怎么解决呢?
在此特定实例中,我们能够使用数学快速找到解决方案,因为尽管问题是非凸的,但它是 class 特殊情况的一部分。数学家的深刻思考给了我们一个简单的方法来处理这个class.
但是请考虑问题的一些概括:
(a) a x^3+b x^2+c x+d=0
(b) a x^4+b x^3+c x^2+d x+e =0
(c) a x^5+b x^4+c x^3+d x^2+e x+f=0
(a) 有三个必须检查的潜在解决方案((c) 的确切解决方案是 tricky), (b) has four (trickier), and (c) has five. The formulas for (a) and (b) are much more complex than the quadratic formula and mathematicians have shown that there is no formula,可以使用 "elementary operations" 表示。相反,我们必须求助于美化 guess-and-check.
所以我们用来解决您的问题的技术不能很好地概括。这就是生活在非凸领域和 NP-hard 的意义,也是资助数学、计算机科学和相关领域研究的一个很好的理由。
我正在尝试在 LPSolve 中解决这个问题 IDE:
/* Objective function */
min: x + y;
/* Variable bounds */
r_1: 2x = 2y;
r_2: x + y = 1.11 x y;
r_3: x >= 1;
r_4: y >= 1;
但我得到的回复是:
Model name: 'LPSolver' - run #1
Objective: Minimize(R0)
SUBMITTED
Model size: 4 constraints, 2 variables, 5 non-zeros.
Sets: 0 GUB, 0 SOS.
Using DUAL simplex for phase 1 and PRIMAL simplex for phase 2.
The primal and dual simplex pricing strategy set to 'Devex'.
The model is INFEASIBLE
lp_solve unsuccessful after 2 iter and a last best value of 1e+030
当 x=1.801801802
和 y=1.801801802
是可能的解决方案时,为什么会发生这种情况?
如何找到解决方案
让我们做一些数学运算。
您的问题是:
min x+y
s.t. 2x = 2y
x + y = 1.11 x y
x >= 1
y >= 1
第一个约束2x = 2y
可以简化为x=y
。我们现在替换整个问题:
min 2*x
s.t. 2*x = 1.11 x^2
x >= 1
并重新排列:
min 2*x
s.t. 1.11 x^2-2*x=0
x >= 1
从几何我们知道 1.11 x^2-2*x
形成一条 upward-opening 抛物线,其最小值小于零。因此,恰恰有两点。这些由二次方程给出:200/111 和 0.
其中只有一个满足第二个约束条件:200/111。
为什么我不能用我的求解器找到这个约束
最简单的方法是说这是因为 x^2
项(代入前的 x*y
是非线性的)。但它比这更深入。非线性问题可以容易解决,只要它们是凸。 convex problem 是一个约束形成单个连续 space 的约束,因此 space 中两点之间绘制的任何线都位于 space.[=25 的边界内=]
你的问题不是凸的。约束 1.11 x^2-2*x=0
定义了无限数量的点。这些点中的任何两个都不能由一条直线连接,该直线停留在约束定义的 space 中,因为 space 是弯曲的。如果约束改为 1.11 x^2-2*x<=0
,那么 space 将是凸的,因为所有点都可以与留在其内部的直线连接。
非凸问题是更广泛的 class 问题的一部分,称为 NP-Hard。这意味着没有(也许不能)解决问题的简单方法。我们要聪明。
可以处理 mixed-integer programming (MIP/MILP) can solve many non-convex problems efficiently, as can other techniques such as genetic algorithms 的求解器。但是,在幕后,这些技术都依赖于美化 guess-and-check.
所以你的求解器失败了,因为问题是非凸的,而且你的求解器既不够聪明,无法使用 MIP guess-and-check 找到解决方案,也不够聪明,无法使用二次方程。
那怎么解决呢?
在此特定实例中,我们能够使用数学快速找到解决方案,因为尽管问题是非凸的,但它是 class 特殊情况的一部分。数学家的深刻思考给了我们一个简单的方法来处理这个class.
但是请考虑问题的一些概括:
(a) a x^3+b x^2+c x+d=0
(b) a x^4+b x^3+c x^2+d x+e =0
(c) a x^5+b x^4+c x^3+d x^2+e x+f=0
(a) 有三个必须检查的潜在解决方案((c) 的确切解决方案是 tricky), (b) has four (trickier), and (c) has five. The formulas for (a) and (b) are much more complex than the quadratic formula and mathematicians have shown that there is no formula,可以使用 "elementary operations" 表示。相反,我们必须求助于美化 guess-and-check.
所以我们用来解决您的问题的技术不能很好地概括。这就是生活在非凸领域和 NP-hard 的意义,也是资助数学、计算机科学和相关领域研究的一个很好的理由。