Julia 错误:`*`没有匹配*(::变量)的方法
我编写了以下代码:Julia 错误:`*`没有匹配*(::变量)的方法,julia,julia-jump,Julia,Julia Jump,我编写了以下代码: 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,
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))
当我运行它时,我得到以下错误
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
正确的方法是什么?我解决了我的问题:当我在某个地方阅读时,常量必须在变量之前,而且似乎常量数组必须用作数组数组,而变量可以用作矩阵 这是正确的一行:
@setObjective(m, Max, sum{sum{U[i][j]*x[i,j], i=A}, j=T} )
正如上面所说:
在第二种情况下,表达式的形式有一个关键限制:如果系数和变量之间有乘积,则变量必须最后出现。也就是说,系数乘以变量是好的,但变量乘以系数是坏的
让我知道,如果有其他地方,我可以把这个可以帮助你了
这种情况是不可取的,但不幸的是,我们还没有一个好的解决方案来保持JuMP的快速模型构建能力
我认为
U
的问题在于它是一个数组字典,因此首先需要索引到字典中以返回正确的数组,然后索引到数组中。JuMP的变量具有更强大的索引功能,因此允许您在一组[]
中执行此操作,谢谢您的回答。手册很清楚,也许你可以把重点放在一个事实上,即系数的目的是数字以及常数。无论如何,这已经足够清楚了,因为我在很短的时间内解决了我的问题,只是在推理。