不能强制执行严格的限制放大
cannot enforce strict bound ampl
我在 var p >=0;
(和一个工作模型)之后将一个变量设置为 var p > 0;
,以确保我不会得到被零除的错误。现在,在尝试 运行 模型时,出现以下错误:
cannot enforce strict bound
context: var p > >>> 0; <<<
快速搜索后,我发现我必须提供一个较低的值而不是零才能使其工作。
var p > 0.00001; or var p > 1e-6;
但是,还是报同样的错误。您能否解释一下这里的问题到底是什么,以及如何解决?
我的等式的形式是
Maximize Z : (quadratic function of p)/p;
一般优化(尤其是 AMPL)通常要求可行域为 topologically closed,即允许解 space 的任何极限点本身就是解的一部分 space.这意味着通常不允许严格不等式作为对变量的约束。
要了解原因,请考虑以下问题:
var p > 0;
maximize OF: 1-p^2;
虽然OF明显是有界的,永远不会超过1,但是因为p没有最优值,所以无法优化。对于您可能建议的 p 的任何允许(即正)值,我可以通过将 p 减半来改进 objective 函数。很难定义一种优化算法来处理不存在最优值,甚至不存在局部最优值的情况!
(从技术上讲,机器精度 确实 强加了 p 的最佳值,其中 p 是可以用计算机算法表示的最小正数。但是如果我们想看看那样的话,那么实际上我们确实有一个严格的不等式 p >= eps,我们最好明确地承认这一点。)
因此,对变量的约束通常需要是非严格的不等式,例如将“> 0”替换为“>= smallnum”。
我在 var p >=0;
(和一个工作模型)之后将一个变量设置为 var p > 0;
,以确保我不会得到被零除的错误。现在,在尝试 运行 模型时,出现以下错误:
cannot enforce strict bound
context: var p > >>> 0; <<<
快速搜索后,我发现我必须提供一个较低的值而不是零才能使其工作。
var p > 0.00001; or var p > 1e-6;
但是,还是报同样的错误。您能否解释一下这里的问题到底是什么,以及如何解决? 我的等式的形式是
Maximize Z : (quadratic function of p)/p;
一般优化(尤其是 AMPL)通常要求可行域为 topologically closed,即允许解 space 的任何极限点本身就是解的一部分 space.这意味着通常不允许严格不等式作为对变量的约束。
要了解原因,请考虑以下问题:
var p > 0;
maximize OF: 1-p^2;
虽然OF明显是有界的,永远不会超过1,但是因为p没有最优值,所以无法优化。对于您可能建议的 p 的任何允许(即正)值,我可以通过将 p 减半来改进 objective 函数。很难定义一种优化算法来处理不存在最优值,甚至不存在局部最优值的情况!
(从技术上讲,机器精度 确实 强加了 p 的最佳值,其中 p 是可以用计算机算法表示的最小正数。但是如果我们想看看那样的话,那么实际上我们确实有一个严格的不等式 p >= eps,我们最好明确地承认这一点。)
因此,对变量的约束通常需要是非严格的不等式,例如将“> 0”替换为“>= smallnum”。