我在var p > 0;
(和工作模型)之后将变量设置为var p >=0;
,以确保我没有得到除零错误。现在,在尝试运行模型时,它给出了以下错误:
cannot enforce strict bound
context: var p > >>> 0; <<<
经过快速搜索后,我发现我必须给出一个低值而不是零才能使它工作。
var p > 0.00001; or var p > 1e-6;
但是,它仍然会出现同样的错误。你能解释一下这里究竟是什么问题,以及如何解决它?
我的等式是的形式
最大化Z :( p的二次函数)/ p;
答案 0 :(得分:2)
一般的优化(特别是AMPL)通常要求可行区域为topologically closed,即允许的解空间的任何限制点本身都是解空间的一部分。这意味着通常不允许严格的不等式作为变量的约束。
要理解原因,请考虑问题:
var p > 0;
maximize OF: 1-p^2;
尽管OF显然有界并且永远不会超过1,但由于p没有最佳值,因此无法优化。对于你可能提出的p的任何允许(即正)值,我可以通过减半p来改善目标函数。很难定义一种优化算法来处理不存在最优的情况,甚至不是局部最优值!
(从技术上讲,机器精度确实施加p的最佳值,其中p是可以在计算机算术中表示的最小正数。但是如果我们想以这种方式看待它,那么实际上我们确实存在严格的不等式,p> = eps,我们最好明确承认这一点。)
出于这个原因,对变量的约束通常需要是非严格的不等式,例如:替换&#34;&gt; 0&#34;使用&#34;&gt; = smallnum&#34;。