3

I wrote the following code:

using JuMP

m = Model()

const A = 
[ :a0 ,
  :a1 , 
  :a2 ]

const T = [1:5]

const U = 
[
  :a0 =>    [9  9  9  9  999],
  :a1 =>    [11 11 11 11 11],
  :a2 =>    [1  1  1  1  1]
]

@defVar(m, x[A,T], Bin)

@setObjective(m, Max, sum{sum{x[i,j] * U[i,j], i=A}, j=T} )

print(m)

status = solve(m)

println("Objective value: ", getObjectiveValue(m))
println("x = ", getValue(x))

When I run it I get the following error

ERROR: `*` has no method matching *(::Variable)
 in anonymous at /home/username/.julia/v0.3/JuMP/src/macros.jl:71
 in include at ./boot.jl:245
 in include_from_node1 at loading.jl:128
 in process_options at ./client.jl:285
 in _start at ./client.jl:354
while loading /programs/julia-0.2.1/models/a003.jl, in expression starting on line 21

What's the correct way of doing this?

4

2 回答 2

5

正如手册所说:

在第二种情况下,表达式的形式有一个关键限制:如果系数和变量之间存在乘积,则变量必须出现在最后。也就是说,Coefficient times Variable 是好的,但是 Variable times Coefficient 是坏的

让我知道是否有其他地方我可以把它放在对你有帮助的地方。

这种情况是不可取的,但不幸的是,我们还没有一个很好的解决方案来保留 JuMP 的快速模型构建能力。

我认为问题U在于它是一个数组字典,因此您首先需要索引字典以返回正确的数组,然后索引数组。JuMP 的变量具有更强大的索引,因此允许您在一组[].

于 2014-07-12T16:53:28.400 回答
3

我解决了我的问题:当我在某处阅读时,常量必须在变量之前,而且似乎常量数组必须用作数组数组,而变量可以用作矩阵。

这是正确的行:

@setObjective(m, Max, sum{sum{U[i][j]*x[i,j], i=A}, j=T} )
于 2014-07-12T11:58:12.720 回答