【问题标题】:GLPK/GMPL: Minimize objective function but keep it > 0GLPK/GPL:最小化目标函数但保持 > 0
【发布时间】:2016-08-15 00:36:05
【问题描述】:

我正在尝试最小化具有三个参数的目标函数:i、p、j,如下所示:

param mlu{i in I, p in P, j in out[p]} := traffic[i,p]/capacity[j];
minimize MAXLU{i in I, p in P, j in out[p]}: mlu[i,p,j] * x[i,p,j];

但目标函数必须大于 0,否则会违背我的最小化目的。

我试图通过在目标函数上添加这样的约束来确保这一点:

s.t. constraint1{i in I, p in P, j in out[p]} : MAXLU[i,p,j] != 0;

但我收到以下错误:

LP.mod:66: invalid reference to status, primal value, or dual value of objective MAXLU above solve statement

Context:  i in I , p in P , j in out [ p ] } : MAXLU [ i , p , j ] !=
glp_mpl_generate: invalid call sequence
Error detected in file glpapi14.c at line 79
Aborted

甚至有可能做到这一点吗?感谢您的任何帮助/建议!

【问题讨论】:

  • 如何定义一些非常小的值e 并添加obj >= e

标签: constraints ampl glpk mathprog objective-function


【解决方案1】:

您可以在约束中引用变量和参数,但不能引用目标 (MAXLU)。解决此问题的一种简单方法是将constraint1 中的MAXLU 替换为实际的客观表达式:

s.t. constraint1{i in I, p in P, j in out[p]} : mlu[i,p,j] * x[i,p,j] ...;

此外,您不能使用表达式 != 0 定义约束。您可以使用 >= epsilon 或 epsilon 代替其中 epsilon 是一个小数字:

s.t. constraint1{i in I, p in P, j in out[p]} : mlu[i,p,j] * x[i,p,j] >= epsilon;

【讨论】:

    猜你喜欢
    • 2016-10-01
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    相关资源
    最近更新 更多