【问题标题】:Dependent Arrays in Constraints JuMP约束中的依赖数组
【发布时间】:2021-10-08 00:08:09
【问题描述】:

我想对这个约束进行编码。

下面代码中的d和a是集合S的子集,大小为N。例如:(N=5, T=3, S=6), d=[1,2,2,3,1] (d的元素是第一个S的三位,d的大小为N)和a=[6,4,5,6,4](a的元素为集合S的最后三位,a的大小为N)。

在约束中,s 应该以 d 开头并以 a 结尾。

应该是 s[j=1]=1:6, s[j=2]=2:4, s[j=3]=2:5, s[j=4]=3:6 , s[j=5]1:4。

我不知道如何处理依赖于其他集合的这个集合。你能帮我正确编码我的约束吗?下面的代码不能正常工作。

N = 5
T=3
S=6
Cap=15
Q=rand(1:5,N)
d=[1,2,2,3,1]
a=[6,4,5,6,4]
@variable(model, x[j=1:N,t=1:T,s=1:S], Bin)
@constraint(model, [j= 1:N,t = 1:T, s = d[j]:a[j]], sum(x[j,t,s] * Q[j] for j=1:N) <= Cap)

【问题讨论】:

    标签: julia julia-jump


    【解决方案1】:
    N, T, S = 5, 3, 6
    Q = rand(1:5,N)
    d = [1, 2, 2, 3, 1]
    a = [6, 4, 5, 6, 4]
    
    using JuMP
    model = Model()
    @variable(model, x[1:N, 1:T, 1:S], Bin)
    @constraint(
        model, 
        [t = 1:T, s = 1:S],
        sum(x[j, t, s] * Q[j] for j in 1:N if d[j] <= s < a[j]) <= 15,
    )
    

    附言无需发布多个 cmets 和问题: Coding arrays in constraint JuMP 您还应该考虑在 Julia 演讲上发帖:https://discourse.julialang.org/c/domain/opt/13。在那里进行对话更容易。

    【讨论】:

    • 谢谢。在这种情况下,例如对于 d[1]
    • if s in union(d[j], a[j])。此语法并非特定于 JuMP。您可以在求和中使用任何 Julia 语法。将来,请在 Julia 演讲上发帖。我还建议您阅读一些 JuMP 教程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多