2014-07-12 1 views
3

내가 다음 코드를 썼다가 없습니다 : 나는 그것을 실행하면ERROR :`*`있는 방법 매칭 * (:: 변수)

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 

수 이 일을하는 방법?

답변

5

는 말한다 :

There is one key restriction on the form of the expression in the second case: if there is a product between coefficients and variables, the variables must appear last. That is, Coefficient times Variable is good, but Variable times Coefficient is bad

내가 당신을 도움이 것이라고이를 넣을 수있는 다른 장소가 있다면 알려주세요

여기에 올바른 라인입니다.

이 상황은 바람직하지 않지만 유감스럽게도 JuMP의 빠른 모델 구축 기능을 유지하면서 좋은 해결책을 얻지 못했습니다.

저는 U의 문제는 배열 사전이므로 올바른 배열을 반환하기 위해 사전에 색인을 작성한 다음 배열에 색인을 생성해야한다는 것입니다. JuMP의 변수는 더 강력한 색인 생성 기능을 가지고 있기 때문에 [] 집합으로 할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 매뉴얼은 명확합니다. 계수가 const뿐만 아니라 숫자가되도록 의도되어 있다는 사실을 더 강조 할 수 있습니다. 어쨌든 짧은 시간에 문제를 해결했을 때 충분히 명확합니다. – HAL9000

3

필자는 어딘가에서 읽은 것처럼 상수가 변수 앞에 선행해야하며, 변수가 행렬로 사용될 수있는 동안 상수 배열을 배열 배열로 사용해야한다고 생각합니다. the manual으로

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