在 Mosel 中对决策变量进行平方

Squaring A Decision Variable in Mosel

在我的问题中,我想最小化决策变量的平方和 * LARGE_CONSTANT。平方的原因是为了激励求解器平均分配决策变量;如果我必须使用恐慌变量,我想在一组位置上平均使用它们。

部分代码(诚然不足以重现)如下:

declarations  
SITE: set of string  
c_min_panic: array(SITE) of mpvar  
c_max_panic: array(SITE) of mpvar  
end-declarations

! Objectives.
Min_Panicking:= sum(s in SITE) ((c_min_panic(s) * 10000)^2)  
Max_Panicking:= sum(s in SITE) ((c_max_panic(s) * 10000)^2)  

但是,这给出了错误:Mosel: E-101...运算符类型不兼容(mpvar' ^ 未定义整数)。
删除 ^ 可以使问题正常运行。

我很震惊为什么我不能解决这个问题?事实上,我在文档中看到的示例看起来像是对 objective 函数求平方的成功尝试。例如,FICO Xpress User Guide 的第 186 页似乎是这样做的:

! Objective: minimise the total squared distance between all points  
  TotDist:= sum(i,j in RN | i<j) ((x(i)-x(j))^2+(y(i)-y(j))^2

我错过了什么!!撕掉我的头发谢谢...

代码片段没有显示加载了哪个求解器模块:如果它使用了 Xpress Optimizer 模块,即以这样的行开始

uses "mmxprs"

您还需要加载模块 'mmnl' 以扩展 Mosel 语言的约束处理能力以包括二次表达式,因此

uses "mmxprs", "mmnl"

另一种选择是加载 Xpress 非线性模块:

uses "mmxnlp"