Skip to content

Commit d173321

Browse files
authored
WIP: Feature MOI (#51)
* JuMP and MOI * updating docs * graph coloring as minimization of a single variable
1 parent c1bb96c commit d173321

33 files changed

+2211
-1076
lines changed

Project.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ version = "0.1.0"
55

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

1012
[extras]

benchmark/killer_sudoku/cs.jl

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using JuMP
12
using ConstraintSolver
23
using JSON
34

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

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

28-
com_grid = create_sudoku_grid!(com, grid)
29-
30-
add_sudoku_constr!(com, com_grid)
3129
for s in sums
32-
add_constraint!(com, sum([com_grid[CartesianIndex(ind)] for ind in s.indices]) == s.result)
33-
# add_constraint!(com, CS.all_different([com_grid[CartesianIndex(ind)] for ind in s.indices]))
30+
@constraint(m, sum([x[ind...] for ind in s.indices]) == s.result)
31+
# @constraint(m, [x[ind...] for ind in s.indices] in CS.AllDifferentSet(length(s.indices)))
3432
end
3533

34+
# sudoku constraints
35+
jump_add_sudoku_constr!(m, x)
36+
3637
if single_times
3738
GC.enable(false)
3839
t = time()
39-
status = solve!(com; backtrack=true);
40+
optimize!(m)
41+
status = JuMP.termination_status(m)
4042
t = time()-t
4143
GC.enable(true)
4244
println(i-1,", ", t)
4345
else
4446
GC.enable(false)
45-
status = solve!(com);
47+
optimize!(m)
48+
status = JuMP.termination_status(m)
4649
GC.enable(true)
4750
end
4851
if !benchmark
49-
@show com.info
52+
@show JuMP.backend(m).optimizer.model.inner.info
5053
println("Status: ", status)
51-
@assert fulfills_sudoku_constr(com_grid)
54+
@assert jump_fulfills_sudoku_constr(JuMP.value.(x))
5255
end
5356
com = nothing
5457
GC.gc()

benchmark/sudoku/cs.jl

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using ConstraintSolver
1+
using ConstraintSolver, JuMP
22

33
CS = ConstraintSolver
44
include("../../test/sudoku_fcts.jl")
@@ -22,27 +22,35 @@ function solve_all(grids; benchmark=false, single_times=true)
2222
ct = time()
2323
grids = grids
2424
for (i,grid) in enumerate(grids)
25-
com = CS.init()
26-
27-
com_grid = create_sudoku_grid!(com, grid)
28-
add_sudoku_constr!(com, com_grid)
25+
m = Model(with_optimizer(CS.Optimizer))
26+
@variable(m, 1 <= x[1:9,1:9] <= 9, Int)
27+
# set variables
28+
for r=1:9, c=1:9
29+
if grid[r,c] != 0
30+
@constraint(m, x[r,c] == grid[r,c])
31+
end
32+
end
33+
# sudoku constraints
34+
jump_add_sudoku_constr!(m, x)
2935

3036
if single_times
3137
GC.enable(false)
3238
t = time()
33-
status = solve!(com);
39+
optimize!(m)
40+
status = JuMP.termination_status(m)
3441
t = time()-t
3542
GC.enable(true)
3643
println(i-1,", ", t)
3744
else
3845
GC.enable(false)
39-
status = solve!(com);
46+
optimize!(m)
47+
status = JuMP.termination_status(m)
4048
GC.enable(true)
4149
end
4250
if !benchmark
43-
@show com.info
51+
@show JuMP.backend(m).optimizer.model.inner.info
4452
println("Status: ", status)
45-
@assert fulfills_sudoku_constr(com_grid)
53+
@assert jump_fulfills_sudoku_constr(JuMP.value.(x))
4654
end
4755
end
4856
println("")

docs/Manifest.toml

Lines changed: 101 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,60 @@
22

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

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

12+
[[BenchmarkTools]]
13+
deps = ["JSON", "Printf", "Statistics"]
14+
git-tree-sha1 = "90b73db83791c5f83155016dd1cc1f684d4e1361"
15+
uuid = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf"
16+
version = "0.4.3"
17+
18+
[[BinDeps]]
19+
deps = ["Libdl", "Pkg", "SHA", "URIParser", "Unicode"]
20+
git-tree-sha1 = "66158ad56b4bf6cc8413b37d0b7bc52402682764"
21+
uuid = "9e28174c-4ba2-5203-b857-d8d62c4213ee"
22+
version = "1.0.0"
23+
1224
[[BinaryProvider]]
13-
deps = ["Libdl", "Logging", "SHA"]
14-
git-tree-sha1 = "c7361ce8a2129f20b0e05a89f7070820cfed6648"
25+
deps = ["Libdl", "SHA"]
26+
git-tree-sha1 = "5b08ed6036d9d3f0ee6369410b830f8873d4024c"
1527
uuid = "b99e7846-7c00-51b0-8f62-c81ae34c0232"
16-
version = "0.5.6"
28+
version = "0.5.8"
29+
30+
[[Calculus]]
31+
deps = ["LinearAlgebra"]
32+
git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad"
33+
uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9"
34+
version = "0.5.1"
35+
36+
[[CommonSubexpressions]]
37+
deps = ["Test"]
38+
git-tree-sha1 = "efdaf19ab11c7889334ca247ff4c9f7c322817b0"
39+
uuid = "bbf7d656-a473-5ed7-a52c-81e309532950"
40+
version = "0.2.0"
41+
42+
[[Compat]]
43+
deps = ["Base64", "Dates", "DelimitedFiles", "Distributed", "InteractiveUtils", "LibGit2", "Libdl", "LinearAlgebra", "Markdown", "Mmap", "Pkg", "Printf", "REPL", "Random", "Serialization", "SharedArrays", "Sockets", "SparseArrays", "Statistics", "Test", "UUIDs", "Unicode"]
44+
git-tree-sha1 = "ed2c4abadf84c53d9e58510b5fc48912c2336fbb"
45+
uuid = "34da2185-b29b-5c13-b0c7-acf172513d20"
46+
version = "2.2.0"
1747

1848
[[ConstraintSolver]]
19-
deps = ["JSON", "MatrixNetworks"]
49+
deps = ["JSON", "JuMP", "MathOptInterface", "MatrixNetworks"]
2050
path = ".."
2151
uuid = "e0e52ebd-5523-408d-9ca3-7641f1cd1405"
2252
version = "0.1.0"
2353

2454
[[DataStructures]]
2555
deps = ["InteractiveUtils", "OrderedCollections"]
26-
git-tree-sha1 = "f94423c68f2e47db0d6f626a26d4872266e0ec3d"
56+
git-tree-sha1 = "a1b652fb77ae8ca7ea328fa7ba5aa151036e5c10"
2757
uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
28-
version = "0.17.2"
58+
version = "0.17.6"
2959

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

68+
[[DiffResults]]
69+
deps = ["Compat", "StaticArrays"]
70+
git-tree-sha1 = "34a4a1e8be7bc99bc9c611b895b5baf37a80584c"
71+
uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5"
72+
version = "0.0.4"
73+
74+
[[DiffRules]]
75+
deps = ["NaNMath", "Random", "SpecialFunctions"]
76+
git-tree-sha1 = "f734b5f6bc9c909027ef99f6d91d5d9e4b111eed"
77+
uuid = "b552c78f-8df3-52c6-915a-8e097449b14b"
78+
version = "0.1.0"
79+
3880
[[Distributed]]
3981
deps = ["Random", "Serialization", "Sockets"]
4082
uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b"
@@ -47,27 +89,39 @@ version = "0.8.1"
4789

4890
[[Documenter]]
4991
deps = ["Base64", "Dates", "DocStringExtensions", "InteractiveUtils", "JSON", "LibGit2", "Logging", "Markdown", "REPL", "Test", "Unicode"]
50-
git-tree-sha1 = "2b45ba82d7de1083af18f09af4ebdeb4dd99b9f3"
92+
git-tree-sha1 = "cf27e084a04a7f2dd283116d84c5861253216c8d"
5193
repo-rev = "master"
5294
repo-url = "https://github.com/JuliaDocs/Documenter.jl.git"
5395
uuid = "e30172f5-a6a5-5a46-863b-614d45cd2de4"
54-
version = "0.24.0-DEV"
96+
version = "0.24.2"
97+
98+
[[ForwardDiff]]
99+
deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "NaNMath", "Random", "SpecialFunctions", "StaticArrays"]
100+
git-tree-sha1 = "da46ac97b17793eba44ff366dc6cb70f1238a738"
101+
uuid = "f6369f11-7733-5829-9624-2563aa707210"
102+
version = "0.10.7"
55103

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

60108
[[IterTools]]
61-
git-tree-sha1 = "2ebe60d7343962966d1779a74a760f13217a6901"
109+
git-tree-sha1 = "05110a2ab1fc5f932622ffea2a003221f4782c18"
62110
uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e"
63-
version = "1.2.0"
111+
version = "1.3.0"
64112

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

119+
[[JuMP]]
120+
deps = ["Calculus", "DataStructures", "ForwardDiff", "LinearAlgebra", "MathOptInterface", "NaNMath", "Random", "SparseArrays", "Statistics"]
121+
git-tree-sha1 = "ba7f96010ed290d77d5c941c32e5df107ca688a4"
122+
uuid = "4076af6c-e467-56ae-b986-b466b2749572"
123+
version = "0.20.1"
124+
71125
[[KahanSummation]]
72126
deps = ["Test"]
73127
git-tree-sha1 = "1f01068b28d3ad83d4d1212a0ce8d7ecacb33482"
@@ -91,6 +145,12 @@ uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"
91145
deps = ["Base64"]
92146
uuid = "d6f4376e-aef5-505a-96c1-9c027394607a"
93147

148+
[[MathOptInterface]]
149+
deps = ["BenchmarkTools", "LinearAlgebra", "OrderedCollections", "SparseArrays", "Test", "Unicode"]
150+
git-tree-sha1 = "78427dcc212e0c0ad9658049bc56a50303ad9737"
151+
uuid = "b8f27783-ece8-5eb3-8dc8-9495eed66fee"
152+
version = "0.9.7"
153+
94154
[[MatrixNetworks]]
95155
deps = ["Arpack", "DataStructures", "DelimitedFiles", "IterTools", "KahanSummation", "LinearAlgebra", "Printf", "Random", "SparseArrays", "Statistics", "Test"]
96156
git-tree-sha1 = "129eb6db1d65b654018b05866bbbe980dd564913"
@@ -100,6 +160,11 @@ version = "1.0.0"
100160
[[Mmap]]
101161
uuid = "a63ad114-7e13-5084-954f-fe012c677804"
102162

163+
[[NaNMath]]
164+
git-tree-sha1 = "928b8ca9b2791081dc71a51c55347c27c618760f"
165+
uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3"
166+
version = "0.3.3"
167+
103168
[[OrderedCollections]]
104169
deps = ["Random", "Serialization", "Test"]
105170
git-tree-sha1 = "c4c13474d23c60d20a67b217f1d7f22a40edf8f1"
@@ -108,9 +173,9 @@ version = "1.1.0"
108173

109174
[[Parsers]]
110175
deps = ["Dates", "Test"]
111-
git-tree-sha1 = "ef0af6c8601db18c282d092ccbd2f01f3f0cd70b"
176+
git-tree-sha1 = "0139ba59ce9bc680e2925aec5b7db79065d60556"
112177
uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
113-
version = "0.3.7"
178+
version = "0.3.10"
114179

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

202+
[[SharedArrays]]
203+
deps = ["Distributed", "Mmap", "Random", "Serialization"]
204+
uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383"
205+
137206
[[Sockets]]
138207
uuid = "6462fe0b-24de-5631-8697-dd941f90decc"
139208

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

213+
[[SpecialFunctions]]
214+
deps = ["BinDeps", "BinaryProvider", "Libdl"]
215+
git-tree-sha1 = "3bdd374b6fd78faf0119b8c5d538788dbf910c6e"
216+
uuid = "276daf66-3868-5448-9aa4-cd146d93841b"
217+
version = "0.8.0"
218+
219+
[[StaticArrays]]
220+
deps = ["LinearAlgebra", "Random", "Statistics"]
221+
git-tree-sha1 = "5a3bcb6233adabde68ebc97be66e95dcb787424c"
222+
uuid = "90137ffa-7385-5640-81b9-e52037218182"
223+
version = "0.12.1"
224+
144225
[[Statistics]]
145226
deps = ["LinearAlgebra", "SparseArrays"]
146227
uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
@@ -149,6 +230,12 @@ uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
149230
deps = ["Distributed", "InteractiveUtils", "Logging", "Random"]
150231
uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
151232

233+
[[URIParser]]
234+
deps = ["Test", "Unicode"]
235+
git-tree-sha1 = "6ddf8244220dfda2f17539fa8c9de20d6c575b69"
236+
uuid = "30578b45-9adc-5946-b283-645ec420af67"
237+
version = "0.4.0"
238+
152239
[[UUIDs]]
153240
deps = ["Random", "SHA"]
154241
uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"

docs/Project.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
[deps]
22
ConstraintSolver = "e0e52ebd-5523-408d-9ca3-7641f1cd1405"
33
Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4"
4+
JuMP = "4076af6c-e467-56ae-b986-b466b2749572"
5+
MathOptInterface = "b8f27783-ece8-5eb3-8dc8-9495eed66fee"
6+
MatrixNetworks = "4f449596-a032-5618-b826-5a251cb6dc11"

docs/make.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Documenter
22
using ConstraintSolver
3+
using JuMP
34

45
makedocs(
56
# See https://github.com/JuliaDocs/Documenter.jl/issues/868

0 commit comments

Comments
 (0)