我希望通过“时间”实现一个约束,具体取决于二进制决策变量x
中值的变化。
对于电力系统的机组组合优化问题,我正在尝试实现最小运行时间约束。x
表示单元激活,其中0
和1
分别显示电源单元n
在某一时刻关闭或打开t
。
因此,指标约束似乎是一个很有前途的解决方案,在相似问题的启发下,实现似乎相当简单。
因此,由于引入了布尔运算符(!
和¬
),我过早地希望以布尔方式表示更改:
@constraint(m, xx1[n=1:N,t=2:T], (!x[n,t-1] && x[n,t]) => {next(t, 1) + next(t, 2) == 2})
如果单位以前被停用,但现在是开启的,那么要求该单位在接下来的2次活动。
在哪里next(t, i) = x[((t - 1 + i) % T) + 1]
。
我得到了以下错误:
LoadError: MethodError: no method matching !(::VariableRef)
Closest candidates are:
!(!Matched::Missing) at missing.jl:100
!(!Matched::Bool) at bool.jl:33
!(!Matched::Function) at operators.jl:896
我检查了指标约束是否只在一个期限内正常工作。
问题:这是可能的,还是有另一个明显的解决方案?
疑难解答和解决办法:,我尝试了以下方法(如果我的诊断是错误的,请纠正我):
x
相关的另一个变量。我已经找到了一个解决方案,但这是相当粗略的,这是一个朱莉娅话语文档。从解决方案中发现,当前的问题是,指标约束并不是双蕴涵的,而只是一种方式,即LHS->RHS
。请看@Oscar Dowson发布的 适当方法 。您可以从github获得工作代码。
发布于 2020-12-02 22:03:59
https://stackoverflow.com/questions/65072615
复制相似问题