11module SparseMatrixColoringsJuMPExt
22
33using ADTypes: ADTypes
4- using JuMP
5- using LinearAlgebra
4+ using JuMP:
5+ Model,
6+ assert_is_solved_and_feasible,
7+ optimize!,
8+ set_silent,
9+ value,
10+ @variable ,
11+ @constraint ,
12+ @objective
613import MathOptInterface as MOI
7- using SparseArrays
814using SparseMatrixColorings:
915 BipartiteGraph, OptimalColoringAlgorithm, nb_vertices, neighbors, pattern, vertices
1016
1117function optimal_distance2_coloring (
12- bg:: BipartiteGraph , :: Val{side} , optimizer:: Type{O}
13- ) where {side,O<: MOI.AbstractOptimizer }
18+ bg:: BipartiteGraph , :: Val{side} , optimizer:: O ; silent :: Bool = true
19+ ) where {side,O}
1420 other_side = 3 - side
1521 n = nb_vertices (bg, Val (side))
1622 model = Model (optimizer)
17- set_silent (model)
23+ silent && set_silent (model)
1824 @variable (model, 1 <= color[i= 1 : n] <= i, Int)
1925 @variable (model, ncolors, Int)
2026 @constraint (model, [ncolors; color] in MOI. CountDistinct (n + 1 ))
@@ -25,17 +31,27 @@ function optimal_distance2_coloring(
2531 @objective (model, Min, ncolors)
2632 optimize! (model)
2733 assert_is_solved_and_feasible (model)
28- return round .(Int, value .(color))
34+ color_int = round .(Int, value .(color))
35+ # remap to 1:cmax
36+ true_ncolors = 0
37+ remap = fill (0 , maximum (color_int))
38+ for c in color_int
39+ if remap[c] == 0
40+ true_ncolors += 1
41+ remap[c] = true_ncolors
42+ end
43+ end
44+ return remap[color_int]
2945end
3046
3147function ADTypes. column_coloring (A:: AbstractMatrix , algo:: OptimalColoringAlgorithm )
3248 bg = BipartiteGraph (A)
33- return optimal_distance2_coloring (bg, Val (2 ), algo. optimizer)
49+ return optimal_distance2_coloring (bg, Val (2 ), algo. optimizer; algo . silent )
3450end
3551
3652function ADTypes. row_coloring (A:: AbstractMatrix , algo:: OptimalColoringAlgorithm )
3753 bg = BipartiteGraph (A)
38- return optimal_distance2_coloring (bg, Val (1 ), algo. optimizer)
54+ return optimal_distance2_coloring (bg, Val (1 ), algo. optimizer; algo . silent )
3955end
4056
4157end
0 commit comments