Cplex LP模型解中随机出现4e^-14等残值:如何去除?
Residual values such as 4e^-14 randomly appearing in Cplex LP model solution: How can I get rid of them?
虽然我在 Cplex 中的线性规划模型的结果似乎有意义,但 q 变量有时随机(至少对我来说它看起来是随机的)显示微小的值,例如 4e^-14。这对决策变量没有影响,但仍然很烦人,因为我不确定模型中的某些内容是否不正确。您可以在此处查看带有最小残差的 q 变量的结果:Results q variable。这些残差只有在我引入二元变量后才开始出现在我的模型中。
q 定义为:dexpr float q [t in Years, i in Options] = (c[i] * (a[t+s[i]][i]-a[t+s[i ]-1][i]));
a是一个决策变量
这是一个约束 q 服从:q[i][t] == a[i] * p[i]* y[t][i])
因为 y 是一个二进制变量,q 应该是 a[i] * p[i] 的值或 0。这就是为什么我对残差值非常恼火。
有人知道为什么会出现这些值以及如何摆脱它们吗?我已经在这个问题上花了很多时间但不知道如何解决它.
我在尝试解决它时注意到的事情:
- 将所有输入变量转为整型变量不变
任何东西
- 将 q 转换为整型变量解决了问题,但破坏了模型,因为 a[i][t] 需要是浮点型变量
- 添加约束使q >= 0 不会消除负残差值,例如-4e^-14
- 为特定的 t 添加使 q = 0 的约束有助于消除那里的残差值,但当然也会破坏模型
非常感谢您的帮助!
这是一个公差问题。 MIP 求解器(例如 Cplex)有很多。这里发挥作用的是整数可行性容差 (epint) 和可行性容差 (eprhs)。你可以收紧它们,但我通常让它们保持原样。有时在打印结果之前对结果进行四舍五入或在输出格式中使用较少的数字会有所帮助。
虽然我在 Cplex 中的线性规划模型的结果似乎有意义,但 q 变量有时随机(至少对我来说它看起来是随机的)显示微小的值,例如 4e^-14。这对决策变量没有影响,但仍然很烦人,因为我不确定模型中的某些内容是否不正确。您可以在此处查看带有最小残差的 q 变量的结果:Results q variable。这些残差只有在我引入二元变量后才开始出现在我的模型中。
q 定义为:dexpr float q [t in Years, i in Options] = (c[i] * (a[t+s[i]][i]-a[t+s[i ]-1][i]));
a是一个决策变量
这是一个约束 q 服从:q[i][t] == a[i] * p[i]* y[t][i])
因为 y 是一个二进制变量,q 应该是 a[i] * p[i] 的值或 0。这就是为什么我对残差值非常恼火。
有人知道为什么会出现这些值以及如何摆脱它们吗?我已经在这个问题上花了很多时间但不知道如何解决它.
我在尝试解决它时注意到的事情:
- 将所有输入变量转为整型变量不变 任何东西
- 将 q 转换为整型变量解决了问题,但破坏了模型,因为 a[i][t] 需要是浮点型变量
- 添加约束使q >= 0 不会消除负残差值,例如-4e^-14
- 为特定的 t 添加使 q = 0 的约束有助于消除那里的残差值,但当然也会破坏模型
非常感谢您的帮助!
这是一个公差问题。 MIP 求解器(例如 Cplex)有很多。这里发挥作用的是整数可行性容差 (epint) 和可行性容差 (eprhs)。你可以收紧它们,但我通常让它们保持原样。有时在打印结果之前对结果进行四舍五入或在输出格式中使用较少的数字会有所帮助。