我正在尝试最小化具有三个参数的目标函数: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
甚至可以这样做吗?感谢您的任何帮助/建议!
答案 0 :(得分:0)
您可以在约束中引用变量和参数,但不能引用目标(MAXLU
)。解决此问题的一种简单方法是将MAXLU
中的constraint1
替换为实际的客观表达式:
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;