jump-dev / HiGHS.jl

A Julia interface to the HiGHS solver
https://highs.dev
MIT License
97 stars 13 forks source link

copy_to ignoring integrality / ZeroOne constraints #139

Closed matbesancon closed 1 year ago

matbesancon commented 1 year ago

It should be added to the copy_to implementation

odow commented 1 year ago

Do you have a reproducible example?

Code is here:

https://github.com/jump-dev/HiGHS.jl/blob/11aec480e18de9532bfe1454c84390b5ffeef65c/src/MOI_wrapper.jl#L2501-L2520

matbesancon commented 1 year ago

Ah bummer I removed the example, will try to reproduce

odow commented 1 year ago

Any progress? If not, we can close until you have a reproducible example?

matbesancon commented 1 year ago
    path = "QPLIB_2880.lp.gz"
    o_temp = MOIU.Model{Float64}()
    MathOptInterface.read_from_file(o_temp, path)
    o = HiGHS.Optimizer()
    MOI.copy_to(o, o_temp) ;
        # all binary
    bin_cons_base = MOI.get(o_temp, MOI.ListOfConstraintIndices{MOI.VariableIndex, MOI.ZeroOne}())
    # no binary
        bin_cons = MOI.get(o, MOI.ListOfConstraintIndices{MOI.VariableIndex, MOI.ZeroOne}())
odow commented 1 year ago

Are you on the latest versions? I cannot reproduce

julia> import HiGHS

julia> const MOI = HiGHS.MOI
MathOptInterface

julia> src = MOI.Utilities.Model{Float64}()
MOIU.Model{Float64}

julia> MOI.read_from_file(src, "/tmp/QPLIB_2880.lp")

julia> dest = HiGHS.Optimizer()
A HiGHS model with 0 columns and 0 rows.

julia> MOI.copy_to(dest, src)
Running HiGHS 1.4.0 [date: 1970-01-01, git hash: b6d4b3dea]
Copyright (c) 2022 ERGO-Code under MIT licence terms
MathOptInterface.Utilities.IndexMap with 1925 entries:
  VariableIndex(1)  => VariableIndex(1)
  VariableIndex(2)  => VariableIndex(2)
  VariableIndex(3)  => VariableIndex(3)
  VariableIndex(4)  => VariableIndex(4)
  VariableIndex(5)  => VariableIndex(5)
  VariableIndex(6)  => VariableIndex(6)
  VariableIndex(7)  => VariableIndex(7)
  VariableIndex(8)  => VariableIndex(8)
  VariableIndex(9)  => VariableIndex(9)
  VariableIndex(10) => VariableIndex(10)
  VariableIndex(11) => VariableIndex(11)
  VariableIndex(12) => VariableIndex(12)
  VariableIndex(13) => VariableIndex(13)
  VariableIndex(14) => VariableIndex(14)
  VariableIndex(15) => VariableIndex(15)
  VariableIndex(16) => VariableIndex(16)
  VariableIndex(17) => VariableIndex(17)
  VariableIndex(18) => VariableIndex(18)
  VariableIndex(19) => VariableIndex(19)
  VariableIndex(20) => VariableIndex(20)
  VariableIndex(21) => VariableIndex(21)
  VariableIndex(22) => VariableIndex(22)
  VariableIndex(23) => VariableIndex(23)
  VariableIndex(24) => VariableIndex(24)
  VariableIndex(25) => VariableIndex(25)
  VariableIndex(26) => VariableIndex(26)
  VariableIndex(27) => VariableIndex(27)
  VariableIndex(28) => VariableIndex(28)
  VariableIndex(29) => VariableIndex(29)
  VariableIndex(30) => VariableIndex(30)
  VariableIndex(31) => VariableIndex(31)
  VariableIndex(32) => VariableIndex(32)
  VariableIndex(33) => VariableIndex(33)
  VariableIndex(34) => VariableIndex(34)
  VariableIndex(35) => VariableIndex(35)
  VariableIndex(36) => VariableIndex(36)
  VariableIndex(37) => VariableIndex(37)
  VariableIndex(38) => VariableIndex(38)
  VariableIndex(39) => VariableIndex(39)
  VariableIndex(40) => VariableIndex(40)
  VariableIndex(41) => VariableIndex(41)
  VariableIndex(42) => VariableIndex(42)
  VariableIndex(43) => VariableIndex(43)
  VariableIndex(44) => VariableIndex(44)
  VariableIndex(45) => VariableIndex(45)
  VariableIndex(46) => VariableIndex(46)
  VariableIndex(47) => VariableIndex(47)
  VariableIndex(48) => VariableIndex(48)
  VariableIndex(49) => VariableIndex(49)
  VariableIndex(50) => VariableIndex(50)
  VariableIndex(51) => VariableIndex(51)
  VariableIndex(52) => VariableIndex(52)
  VariableIndex(53) => VariableIndex(53)
  ⋮                 => ⋮

julia> MOI.get(src, MOI.ListOfConstraintIndices{MOI.VariableIndex,MOI.ZeroOne}())
625-element Vector{MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}}:
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(1)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(2)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(3)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(4)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(5)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(6)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(7)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(8)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(9)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(10)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(11)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(12)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(13)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(14)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(15)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(16)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(17)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(18)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(19)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(20)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(21)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(22)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(23)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(24)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(25)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(26)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(27)
 ⋮
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(600)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(601)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(602)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(603)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(604)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(605)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(606)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(607)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(608)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(609)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(610)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(611)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(612)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(613)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(614)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(615)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(616)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(617)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(618)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(619)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(620)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(621)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(622)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(623)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(624)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(625)

julia> MOI.get(dest, MOI.ListOfConstraintIndices{MOI.VariableIndex,MOI.ZeroOne}())
625-element Vector{MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}}:
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(1)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(2)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(3)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(4)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(5)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(6)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(7)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(8)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(9)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(10)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(11)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(12)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(13)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(14)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(15)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(16)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(17)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(18)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(19)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(20)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(21)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(22)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(23)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(24)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(25)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(26)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(27)
 ⋮
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(600)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(601)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(602)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(603)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(604)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(605)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(606)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(607)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(608)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(609)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(610)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(611)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(612)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(613)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(614)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(615)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(616)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(617)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(618)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(619)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(620)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(621)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(622)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(623)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(624)
 MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.ZeroOne}(625)
matbesancon commented 1 year ago

I had MOI pinned to 1.9, just retried but same result with 1.11

  [87dc4568] HiGHS v1.3.0
  [b8f27783] MathOptInterface v1.11.0
  [3b969827] MathOptSetDistances v0.2.5
odow commented 1 year ago

[87dc4568] HiGHS v1.3.0

Oh. I was using master. Now I remember, I fixed this the other day. I'll make a new release.

odow commented 1 year ago

I even had the commit, https://github.com/jump-dev/HiGHS.jl/commit/11aec480e18de9532bfe1454c84390b5ffeef65c, I just forgot to tag.

odow commented 1 year ago

Closed by https://github.com/jump-dev/HiGHS.jl/pull/138

matbesancon commented 1 year ago

awesome thanks!