Skip to content

Commit b197136

Browse files
YingboMashashi
andcommitted
Add matching
Co-authored-by: "Shashi Gowda" <gowda@mit.edu> Co-authored-by: "Yingbo Ma" <mayingbo5@gmail.com>
1 parent d1189ed commit b197136

File tree

1 file changed

+34
-12
lines changed

1 file changed

+34
-12
lines changed

src/systems/diffeqs/index_reduction.jl

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,6 @@ struct BiGraph{T}
22
data::Vector{Vector{T}}
33
end
44

5-
function sys2bigraph(sys)
6-
ss = states(sys)
7-
data = Operation[]
8-
for eq in sys.eqs
9-
es = []
10-
lhs = eq.lhs
11-
lhs.op isa Differential && push!(eq, lhs)
12-
push!(data, es)
13-
end
14-
end
15-
165
function get_vnodes(sys)
176
diffnodes = []
187
diffedges = Tuple{Int, Int}[]
@@ -33,7 +22,7 @@ function get_vnodes(sys)
3322
return diffnodes, diffedges, algvars
3423
end
3524

36-
function sys2bigraph2(sys)
25+
function sys2bigraph(sys)
3726
diffvars, edges, algvars = get_vnodes(sys)
3827
varnumber_offset = length(diffvars)
3928

@@ -61,3 +50,36 @@ function print_bigraph(io::IO, sys, vars, edges)
6150
println(io, "Eq $i has $(vars[j])")
6251
end
6352
end
53+
54+
55+
function matching_equation!(edges, i, assignments=Dict{Int, Int}(), colored=Set{Int}())
56+
push!(colored, i)
57+
# select a v
58+
vars = unique(last.(filter(isequal(i)first, edges)))
59+
for v in vars
60+
if !haskey(assignments, v)# && !(v in colored)
61+
# v found
62+
assignments[v] = i
63+
return true
64+
end
65+
end
66+
# Else
67+
remaining = setdiff(vars, colored)
68+
for v in remaining
69+
push!(colored, v)
70+
if match_equation!(edges, assignments[v], colored, assignments)
71+
assignments[v] = i
72+
return true
73+
end
74+
end
75+
return false
76+
end
77+
78+
function matching(sys, vars, edges)
79+
assignments=Dict{Int, Int}()
80+
colored=Set{Int}()
81+
for i in 1:length(sys.eqs)
82+
@show matching_equation!(edges, i, assignments, colored)
83+
end
84+
assignments
85+
end

0 commit comments

Comments
 (0)