JuliaQUBO / ToQUBO.jl

🟦 JuMP ToQUBO Automatic Reformulation
https://juliaqubo.github.io/ToQUBO.jl
Other
27 stars 2 forks source link

PBO.jl Error #83

Closed pedroripper closed 4 days ago

pedroripper commented 2 months ago

MWE

using JuMP, QUBO, DWave

model = Model(() -> ToQUBO.Optimizer(DWave.Neal.Optimizer))

W = randn(10,10)
@variable(model, 0 <= x[1:10] <= 3)
@variable(model, 0 <= y[1:10] <= 3)
@objective(model, Min, x' * W * y)

optimize!(model)

I am getting this error

MethodError: no method matching term_head(::Type{PseudoBooleanOptimization.PBF{MathOptInterface.VariableIndex, Float64, Dict{PseudoBooleanOptimization.Term{MathOptInterface.VariableIndex}, Float64}}}, ::Vector{Any})

Closest candidates are:
  term_head(::Type{PseudoBooleanOptimization.PBF{V, _, Dict{PseudoBooleanOptimization.Term{V}, _}}}, ::Tuple{}) where {V, _}
   @ PseudoBooleanOptimization ~/.julia/packages/PseudoBooleanOptimization/UHhLL/src/library/function/dict/dict.jl:52
  term_head(::Type{PseudoBooleanOptimization.PBF{V, _, Dict{PseudoBooleanOptimization.Term{V}, _}}}, ::Tuple{Vararg{V, N}}) where {N, V, _}
   @ PseudoBooleanOptimization ~/.julia/packages/PseudoBooleanOptimization/UHhLL/src/library/function/dict/dict.jl:53
  term_head(::Type{PseudoBooleanOptimization.PBF{V, _, Dict{PseudoBooleanOptimization.Term{V}, _}}}, ::AbstractVector{V}) where {V, _}
   @ PseudoBooleanOptimization ~/.julia/packages/PseudoBooleanOptimization/UHhLL/src/library/function/dict/dict.jl:51
  ...

Stacktrace:
  [1] getindex(f::PseudoBooleanOptimization.PBF{MathOptInterface.VariableIndex, Float64, Dict{PseudoBooleanOptimization.Term{MathOptInterface.VariableIndex}, Float64}}, ω::Vector{Any})
    @ PseudoBooleanOptimization ~/.julia/packages/PseudoBooleanOptimization/UHhLL/src/library/function/dict/dict.jl:108
  [2] parse!(model::ToQUBO.Virtual.Model{Float64, DWave.Neal.Optimizer{Float64}}, g::PseudoBooleanOptimization.PBF{MathOptInterface.VariableIndex, Float64, Dict{PseudoBooleanOptimization.Term{MathOptInterface.VariableIndex}, Float64}}, f::MathOptInterface.ScalarQuadraticFunction{Float64}, ::QUBOTools.GenericArchitecture)
    @ ToQUBO.Compiler ~/.julia/packages/ToQUBO/XJPaT/src/compiler/parse.jl:123
  [3] objective!(model::ToQUBO.Virtual.Model{Float64, DWave.Neal.Optimizer{Float64}}, arch::QUBOTools.GenericArchitecture)
    @ ToQUBO.Compiler ~/.julia/packages/ToQUBO/XJPaT/src/compiler/objective.jl:16
  [4] compile!(model::ToQUBO.Virtual.Model{Float64, DWave.Neal.Optimizer{Float64}}, arch::QUBOTools.GenericArchitecture)
    @ ToQUBO.Compiler ~/.julia/packages/ToQUBO/XJPaT/src/compiler/compiler.jl:61
  [5] compile!(model::ToQUBO.Virtual.Model{Float64, DWave.Neal.Optimizer{Float64}})
    @ ToQUBO.Compiler ~/.julia/packages/ToQUBO/XJPaT/src/compiler/compiler.jl:39
  [6] macro expansion
    @ ./timing.jl:395 [inlined]
  [7] optimize!(model::ToQUBO.Virtual.Model{Float64, DWave.Neal.Optimizer{Float64}})
    @ ToQUBO ~/.julia/packages/ToQUBO/XJPaT/src/wrapper.jl:31
  [8] optimize!
    @ ~/.julia/packages/MathOptInterface/aJZbq/src/MathOptInterface.jl:122 [inlined]
  [9] optimize!(m::MathOptInterface.Utilities.CachingOptimizer{ToQUBO.Virtual.Model{Float64, DWave.Neal.Optimizer{Float64}}, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}})
    @ MathOptInterface.Utilities ~/.julia/packages/MathOptInterface/aJZbq/src/Utilities/cachingoptimizer.jl:321
 [10] optimize!
    @ ~/.julia/packages/MathOptInterface/aJZbq/src/Bridges/bridge_optimizer.jl:367 [inlined]
 [11] optimize!
    @ ~/.julia/packages/MathOptInterface/aJZbq/src/MathOptInterface.jl:122 [inlined]
 [12] optimize!(m::MathOptInterface.Utilities.CachingOptimizer{MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{ToQUBO.Virtual.Model{Float64, DWave.Neal.Optimizer{Float64}}, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}}, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}})
    @ MathOptInterface.Utilities ~/.julia/packages/MathOptInterface/aJZbq/src/Utilities/cachingoptimizer.jl:321
 [13] optimize!(model::Model; ignore_optimize_hook::Bool, _differentiation_backend::MathOptInterface.Nonlinear.SparseReverseMode, kwargs::@Kwargs{})
    @ JuMP ~/.julia/packages/JuMP/7rBNn/src/optimizer_interface.jl:595
 [14] optimize!(model::Model)
    @ JuMP ~/.julia/packages/JuMP/7rBNn/src/optimizer_interface.jl:546
 [15] top-level scope
    @ In[51]:1
pedroripper commented 2 months ago

Worked on my other computer (windows)

using the following pkg versions

Project ToQUBO v0.1.8
Status `C:\Users\pedroripper\Documents\Github\ToQUBO.jl\Project.toml`
  [b8f27783] MathOptInterface v1.31.0
  [c8fa9a04] PseudoBooleanOptimization v0.2.4
  [60eb5b62] QUBOTools v0.9.3
  [9a3f8284] Random
  [fa267f1f] TOML v1.0.3

⌃ [4076af6c] JuMP v1.22.1
  [4d534982] DWave v0.5.0
``´
pedroripper commented 2 months ago

Try using Julia 1.9.4

pedromxavier commented 4 days ago

This was fixed on the master branch. The problem was that a union(wi, wj) was returning a vector of element type Any instead of VI.