Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: Feature MOI #51

Merged
merged 33 commits into from Jan 10, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
abe87df
moi testing
Wikunia Dec 5, 2019
a0df54f
very basic solving in MOI
Wikunia Dec 15, 2019
1f785ba
trying out JuMP
Wikunia Dec 15, 2019
b05b780
implementation of `add_variables` for copy bugfix
Wikunia Dec 15, 2019
78b3d05
bugfixes and added back for tests without JuMP
Wikunia Dec 15, 2019
b1855e3
JuMP and MOI in docs/Project.toml
Wikunia Dec 15, 2019
c6da884
upgrading documenter version
Wikunia Dec 15, 2019
2cf34ee
downgrade Arpack for Julia < 1.3
Wikunia Dec 15, 2019
1d0b9f0
test for Sudoku and Killer
Wikunia Dec 16, 2019
963cb1a
correct offset, tests for some MOI functions
Wikunia Dec 16, 2019
47ed40d
removed wrong set status
Wikunia Dec 16, 2019
f534c9e
test for Infeasible
Wikunia Dec 16, 2019
e6b63ce
test for error handling
Wikunia Dec 16, 2019
83f719d
support for !=
Wikunia Jan 4, 2020
a1a93e9
simpler written test for graph coloring
Wikunia Jan 5, 2020
87e5f48
Support for a <= b
Wikunia Jan 6, 2020
7d8fb49
objective function for a single variable
Wikunia Jan 6, 2020
1827127
docs + most test cases to JuMP
Wikunia Jan 7, 2020
b956b32
bugfix for rendering docs
Wikunia Jan 7, 2020
01fdca5
test for fixing a variable + bugfix if no const
Wikunia Jan 7, 2020
664b568
supports_constraint and error tests
Wikunia Jan 7, 2020
8986407
update best bound earlier
Wikunia Jan 7, 2020
4172289
use normal sorting in graph color test
Wikunia Jan 7, 2020
695cddc
objective support and minus test
Wikunia Jan 7, 2020
7df131d
graph coloring as maximization problem
Wikunia Jan 7, 2020
49aeb93
some small extra tests
Wikunia Jan 7, 2020
baa97d4
one line error message
Wikunia Jan 7, 2020
1c7cfb2
killer sudoku benchmark
Wikunia Jan 8, 2020
b053abd
Merge branch 'master'
Wikunia Jan 9, 2020
a25a309
add SingleVariableConstraint to hashes
Wikunia Jan 9, 2020
79aa06d
add functionality for getting objval, best_bound
Jan 10, 2020
175c445
use hash of constraint function name
Jan 10, 2020
fd0fcc9
updated doctag
Wikunia Jan 10, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Expand Up @@ -6,4 +6,5 @@ visualizations/videos/
literature/
extra/
test/logs/
docs/build/
docs/build/
benchmark/results
2 changes: 2 additions & 0 deletions Project.toml
Expand Up @@ -5,6 +5,8 @@ version = "0.1.0"

[deps]
JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
JuMP = "4076af6c-e467-56ae-b986-b466b2749572"
MathOptInterface = "b8f27783-ece8-5eb3-8dc8-9495eed66fee"
MatrixNetworks = "4f449596-a032-5618-b826-5a251cb6dc11"

[extras]
Expand Down
25 changes: 14 additions & 11 deletions benchmark/killer_sudoku/cs.jl
@@ -1,3 +1,4 @@
using JuMP
using ConstraintSolver
using JSON

Expand All @@ -22,33 +23,35 @@ function solve_all(filenames; benchmark=false, single_times=true)
for (i,filename) in enumerate(filenames)
sums = parseJSON(JSON.parsefile("data/$(filename)"))

com = CS.init()
grid = zeros(Int, (9,9))
m = Model(with_optimizer(CS.Optimizer))
@variable(m, 1 <= x[1:9,1:9] <= 9, Int)

com_grid = create_sudoku_grid!(com, grid)

add_sudoku_constr!(com, com_grid)
for s in sums
add_constraint!(com, sum([com_grid[CartesianIndex(ind)] for ind in s.indices]) == s.result)
# add_constraint!(com, CS.all_different([com_grid[CartesianIndex(ind)] for ind in s.indices]))
@constraint(m, sum([x[ind...] for ind in s.indices]) == s.result)
# @constraint(m, [x[ind...] for ind in s.indices] in CS.AllDifferentSet(length(s.indices)))
end

# sudoku constraints
jump_add_sudoku_constr!(m, x)

if single_times
GC.enable(false)
t = time()
status = solve!(com; backtrack=true);
optimize!(m)
status = JuMP.termination_status(m)
t = time()-t
GC.enable(true)
println(i-1,", ", t)
else
GC.enable(false)
status = solve!(com);
optimize!(m)
status = JuMP.termination_status(m)
GC.enable(true)
end
if !benchmark
@show com.info
@show JuMP.backend(m).optimizer.model.inner.info
println("Status: ", status)
@assert fulfills_sudoku_constr(com_grid)
@assert jump_fulfills_sudoku_constr(JuMP.value.(x))
end
com = nothing
GC.gc()
Expand Down
26 changes: 17 additions & 9 deletions benchmark/sudoku/cs.jl
@@ -1,4 +1,4 @@
using ConstraintSolver
using ConstraintSolver, JuMP

CS = ConstraintSolver
include("../../test/sudoku_fcts.jl")
Expand All @@ -22,27 +22,35 @@ function solve_all(grids; benchmark=false, single_times=true)
ct = time()
grids = grids
for (i,grid) in enumerate(grids)
com = CS.init()

com_grid = create_sudoku_grid!(com, grid)
add_sudoku_constr!(com, com_grid)
m = Model(with_optimizer(CS.Optimizer))
@variable(m, 1 <= x[1:9,1:9] <= 9, Int)
# set variables
for r=1:9, c=1:9
if grid[r,c] != 0
@constraint(m, x[r,c] == grid[r,c])
end
end
# sudoku constraints
jump_add_sudoku_constr!(m, x)

if single_times
GC.enable(false)
t = time()
status = solve!(com);
optimize!(m)
status = JuMP.termination_status(m)
t = time()-t
GC.enable(true)
println(i-1,", ", t)
else
GC.enable(false)
status = solve!(com);
optimize!(m)
status = JuMP.termination_status(m)
GC.enable(true)
end
if !benchmark
@show com.info
@show JuMP.backend(m).optimizer.model.inner.info
println("Status: ", status)
@assert fulfills_sudoku_constr(com_grid)
@assert jump_fulfills_sudoku_constr(JuMP.value.(x))
end
end
println("")
Expand Down
115 changes: 101 additions & 14 deletions docs/Manifest.toml
Expand Up @@ -2,30 +2,60 @@

[[Arpack]]
deps = ["BinaryProvider", "Libdl", "LinearAlgebra"]
git-tree-sha1 = "07a2c077bdd4b6d23a40342a8a108e2ee5e58ab6"
git-tree-sha1 = "cd64c112638582ba4f0be9c3e20656499c508565"
uuid = "7d9fca2a-8960-54d3-9f78-7d1dccf2cb97"
version = "0.3.1"
version = "0.3.2"

[[Base64]]
uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"

[[BenchmarkTools]]
deps = ["JSON", "Printf", "Statistics"]
git-tree-sha1 = "90b73db83791c5f83155016dd1cc1f684d4e1361"
uuid = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf"
version = "0.4.3"

[[BinDeps]]
deps = ["Libdl", "Pkg", "SHA", "URIParser", "Unicode"]
git-tree-sha1 = "66158ad56b4bf6cc8413b37d0b7bc52402682764"
uuid = "9e28174c-4ba2-5203-b857-d8d62c4213ee"
version = "1.0.0"

[[BinaryProvider]]
deps = ["Libdl", "Logging", "SHA"]
git-tree-sha1 = "c7361ce8a2129f20b0e05a89f7070820cfed6648"
deps = ["Libdl", "SHA"]
git-tree-sha1 = "5b08ed6036d9d3f0ee6369410b830f8873d4024c"
uuid = "b99e7846-7c00-51b0-8f62-c81ae34c0232"
version = "0.5.6"
version = "0.5.8"

[[Calculus]]
deps = ["LinearAlgebra"]
git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad"
uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9"
version = "0.5.1"

[[CommonSubexpressions]]
deps = ["Test"]
git-tree-sha1 = "efdaf19ab11c7889334ca247ff4c9f7c322817b0"
uuid = "bbf7d656-a473-5ed7-a52c-81e309532950"
version = "0.2.0"

[[Compat]]
deps = ["Base64", "Dates", "DelimitedFiles", "Distributed", "InteractiveUtils", "LibGit2", "Libdl", "LinearAlgebra", "Markdown", "Mmap", "Pkg", "Printf", "REPL", "Random", "Serialization", "SharedArrays", "Sockets", "SparseArrays", "Statistics", "Test", "UUIDs", "Unicode"]
git-tree-sha1 = "ed2c4abadf84c53d9e58510b5fc48912c2336fbb"
uuid = "34da2185-b29b-5c13-b0c7-acf172513d20"
version = "2.2.0"

[[ConstraintSolver]]
deps = ["JSON", "MatrixNetworks"]
deps = ["JSON", "JuMP", "MathOptInterface", "MatrixNetworks"]
path = ".."
uuid = "e0e52ebd-5523-408d-9ca3-7641f1cd1405"
version = "0.1.0"

[[DataStructures]]
deps = ["InteractiveUtils", "OrderedCollections"]
git-tree-sha1 = "f94423c68f2e47db0d6f626a26d4872266e0ec3d"
git-tree-sha1 = "a1b652fb77ae8ca7ea328fa7ba5aa151036e5c10"
uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
version = "0.17.2"
version = "0.17.6"

[[Dates]]
deps = ["Printf"]
Expand All @@ -35,6 +65,18 @@ uuid = "ade2ca70-3891-5945-98fb-dc099432e06a"
deps = ["Mmap"]
uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab"

[[DiffResults]]
deps = ["Compat", "StaticArrays"]
git-tree-sha1 = "34a4a1e8be7bc99bc9c611b895b5baf37a80584c"
uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5"
version = "0.0.4"

[[DiffRules]]
deps = ["NaNMath", "Random", "SpecialFunctions"]
git-tree-sha1 = "f734b5f6bc9c909027ef99f6d91d5d9e4b111eed"
uuid = "b552c78f-8df3-52c6-915a-8e097449b14b"
version = "0.1.0"

[[Distributed]]
deps = ["Random", "Serialization", "Sockets"]
uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b"
Expand All @@ -47,27 +89,39 @@ version = "0.8.1"

[[Documenter]]
deps = ["Base64", "Dates", "DocStringExtensions", "InteractiveUtils", "JSON", "LibGit2", "Logging", "Markdown", "REPL", "Test", "Unicode"]
git-tree-sha1 = "2b45ba82d7de1083af18f09af4ebdeb4dd99b9f3"
git-tree-sha1 = "cf27e084a04a7f2dd283116d84c5861253216c8d"
repo-rev = "master"
repo-url = "https://github.com/JuliaDocs/Documenter.jl.git"
uuid = "e30172f5-a6a5-5a46-863b-614d45cd2de4"
version = "0.24.0-DEV"
version = "0.24.2"

[[ForwardDiff]]
deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "NaNMath", "Random", "SpecialFunctions", "StaticArrays"]
git-tree-sha1 = "da46ac97b17793eba44ff366dc6cb70f1238a738"
uuid = "f6369f11-7733-5829-9624-2563aa707210"
version = "0.10.7"

[[InteractiveUtils]]
deps = ["Markdown"]
uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240"

[[IterTools]]
git-tree-sha1 = "2ebe60d7343962966d1779a74a760f13217a6901"
git-tree-sha1 = "05110a2ab1fc5f932622ffea2a003221f4782c18"
uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e"
version = "1.2.0"
version = "1.3.0"

[[JSON]]
deps = ["Dates", "Mmap", "Parsers", "Unicode"]
git-tree-sha1 = "b34d7cef7b337321e97d22242c3c2b91f476748e"
uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
version = "0.21.0"

[[JuMP]]
deps = ["Calculus", "DataStructures", "ForwardDiff", "LinearAlgebra", "MathOptInterface", "NaNMath", "Random", "SparseArrays", "Statistics"]
git-tree-sha1 = "ba7f96010ed290d77d5c941c32e5df107ca688a4"
uuid = "4076af6c-e467-56ae-b986-b466b2749572"
version = "0.20.1"

[[KahanSummation]]
deps = ["Test"]
git-tree-sha1 = "1f01068b28d3ad83d4d1212a0ce8d7ecacb33482"
Expand All @@ -91,6 +145,12 @@ uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"
deps = ["Base64"]
uuid = "d6f4376e-aef5-505a-96c1-9c027394607a"

[[MathOptInterface]]
deps = ["BenchmarkTools", "LinearAlgebra", "OrderedCollections", "SparseArrays", "Test", "Unicode"]
git-tree-sha1 = "78427dcc212e0c0ad9658049bc56a50303ad9737"
uuid = "b8f27783-ece8-5eb3-8dc8-9495eed66fee"
version = "0.9.7"

[[MatrixNetworks]]
deps = ["Arpack", "DataStructures", "DelimitedFiles", "IterTools", "KahanSummation", "LinearAlgebra", "Printf", "Random", "SparseArrays", "Statistics", "Test"]
git-tree-sha1 = "129eb6db1d65b654018b05866bbbe980dd564913"
Expand All @@ -100,6 +160,11 @@ version = "1.0.0"
[[Mmap]]
uuid = "a63ad114-7e13-5084-954f-fe012c677804"

[[NaNMath]]
git-tree-sha1 = "928b8ca9b2791081dc71a51c55347c27c618760f"
uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3"
version = "0.3.3"

[[OrderedCollections]]
deps = ["Random", "Serialization", "Test"]
git-tree-sha1 = "c4c13474d23c60d20a67b217f1d7f22a40edf8f1"
Expand All @@ -108,9 +173,9 @@ version = "1.1.0"

[[Parsers]]
deps = ["Dates", "Test"]
git-tree-sha1 = "ef0af6c8601db18c282d092ccbd2f01f3f0cd70b"
git-tree-sha1 = "0139ba59ce9bc680e2925aec5b7db79065d60556"
uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
version = "0.3.7"
version = "0.3.10"

[[Pkg]]
deps = ["Dates", "LibGit2", "Markdown", "Printf", "REPL", "Random", "SHA", "UUIDs"]
Expand All @@ -134,13 +199,29 @@ uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce"
[[Serialization]]
uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b"

[[SharedArrays]]
deps = ["Distributed", "Mmap", "Random", "Serialization"]
uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383"

[[Sockets]]
uuid = "6462fe0b-24de-5631-8697-dd941f90decc"

[[SparseArrays]]
deps = ["LinearAlgebra", "Random"]
uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"

[[SpecialFunctions]]
deps = ["BinDeps", "BinaryProvider", "Libdl"]
git-tree-sha1 = "3bdd374b6fd78faf0119b8c5d538788dbf910c6e"
uuid = "276daf66-3868-5448-9aa4-cd146d93841b"
version = "0.8.0"

[[StaticArrays]]
deps = ["LinearAlgebra", "Random", "Statistics"]
git-tree-sha1 = "5a3bcb6233adabde68ebc97be66e95dcb787424c"
uuid = "90137ffa-7385-5640-81b9-e52037218182"
version = "0.12.1"

[[Statistics]]
deps = ["LinearAlgebra", "SparseArrays"]
uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
Expand All @@ -149,6 +230,12 @@ uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
deps = ["Distributed", "InteractiveUtils", "Logging", "Random"]
uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40"

[[URIParser]]
deps = ["Test", "Unicode"]
git-tree-sha1 = "6ddf8244220dfda2f17539fa8c9de20d6c575b69"
uuid = "30578b45-9adc-5946-b283-645ec420af67"
version = "0.4.0"

[[UUIDs]]
deps = ["Random", "SHA"]
uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
Expand Down
3 changes: 3 additions & 0 deletions docs/Project.toml
@@ -1,3 +1,6 @@
[deps]
ConstraintSolver = "e0e52ebd-5523-408d-9ca3-7641f1cd1405"
Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4"
JuMP = "4076af6c-e467-56ae-b986-b466b2749572"
MathOptInterface = "b8f27783-ece8-5eb3-8dc8-9495eed66fee"
MatrixNetworks = "4f449596-a032-5618-b826-5a251cb6dc11"
1 change: 1 addition & 0 deletions docs/make.jl
@@ -1,5 +1,6 @@
using Documenter
using ConstraintSolver
using JuMP

makedocs(
# See https://github.com/JuliaDocs/Documenter.jl/issues/868
Expand Down