0

出于对生产计划问题进行编码的目的,我使用的是“Julia”。在公式中,有一个公式的下界是一个向量。请看附件

附件.

当我想输入这个向量作为求和的下限时,软件会给我一个错误,即求和边界应该是缩放器

朱莉娅的截图.

4

1 回答 1

0

括号中的语法在一段时间前已被弃用 - 在当前版本的 Julia 和 JuMP(Julia 0.6.0,JuMP 0.18.0)中,当我运行它时,以下工作:

using JuMP
using Cbc
bar = Model(solver=CbcSolver())

# data 
N = 3
M = 3
W = 3
K = 3
T = 77
s = ones(3,3) 

@variable(bar, x[1:N,1:M,1:K,1:T],Bin)
p = reshape( [
  [[9,7,12]; [10,6,8]; [8,10,9]]; 
  [[6,5,9]; [8,4,6]; [6,8,6]];
  [[4,4,5]; [4,3,4]; [5,3,5]]],
  3,3,3)

for t = 1:T
  @constraint(bar, 
    sum( ( ( (x[i, j, k, t] * k 
      for h = t:t + p[i, j, k] + 1 ) 
        for j = 1:M) 
          for k = 1:K) 
            for i = 1:N) == 0)
end

solve(bar)

如果不能选择使用当前版本,那么普通的 for 循环也应该可以工作:

(... same stuff as before up to the for loop ...)

for t = 1:T
  s = 0.0
  for j = 1:M
    for k = 1:K
      for i = 1:N
        for h = t:t + p[i, j, k] + 1
          s += k*x[i,j,k,t]
        end
      end
    end
  end
  @constraint(bar, s == 0)
end

无论如何,这可以说比第一个公式更具可读性。如果这些版本都不适合您,请告诉我,然后我们可以进一步研究。

PS如果你问一些关于代码片段的问题,截图很好,但实际代码更好,那么我们不必再次输入所有内容:)

于 2017-08-11T15:01:00.890 回答