在 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"
在我的问题中,我想最小化决策变量的平方和 * 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"