@@ -10,7 +10,7 @@ In the constructor, `weights` are the weights of vertices.
1010"""
1111struct IndependentSet{CT<: AbstractEinsum ,WT<: Union{NoWeight, Vector} } <: GraphProblem
1212 code:: CT
13- nv :: Int
13+ graph :: SimpleGraph{ Int}
1414 weights:: WT
1515end
1616
@@ -19,21 +19,21 @@ function IndependentSet(g::SimpleGraph; weights=NoWeight(), openvertices=(), opt
1919 rawcode = EinCode ([[[i] for i in Graphs. vertices (g)]. .. , # labels for vertex tensors
2020 [[minmax (e. src,e. dst)... ] for e in Graphs. edges (g)]. .. ], collect (Int, openvertices)) # labels for edge tensors
2121 code = _optimize_code (rawcode, uniformsize (rawcode, 2 ), optimizer, simplifier)
22- IndependentSet (code, nv (g) , weights)
22+ IndependentSet (code, g , weights)
2323end
2424
2525flavors (:: Type{<:IndependentSet} ) = [0 , 1 ]
2626get_weights (gp:: IndependentSet , i:: Int ) = [0 , gp. weights[i]]
27- terms (gp:: IndependentSet ) = getixsv (gp. code)[1 : gp. nv ]
28- labels (gp:: IndependentSet ) = [1 : gp. nv ... ]
27+ terms (gp:: IndependentSet ) = getixsv (gp. code)[1 : nv ( gp. graph) ]
28+ labels (gp:: IndependentSet ) = [1 : nv ( gp. graph) ... ]
2929
3030# generate tensors
3131function generate_tensors (x:: T , gp:: IndependentSet ) where T
32- gp. nv == 0 && return []
32+ nv ( gp. graph) == 0 && return []
3333 ixs = getixsv (gp. code)
3434 # we only add labels at vertex tensors
35- return vcat (add_labels! ([misv (Ref (x) .^ get_weights (gp, i)) for i= 1 : gp. nv ], ixs[1 : gp. nv ], labels (gp)),
36- [misb (T, length (ix)) for ix in ixs[gp. nv + 1 : end ]] # if n!=2, it corresponds to set packing problem.
35+ return vcat (add_labels! ([misv (Ref (x) .^ get_weights (gp, i)) for i= 1 : nv ( gp. graph) ], ixs[1 : nv ( gp. graph) ], labels (gp)),
36+ [misb (T, length (ix)) for ix in ixs[nv ( gp. graph) + 1 : end ]] # if n!=2, it corresponds to set packing problem.
3737 )
3838end
3939
@@ -70,7 +70,8 @@ julia> res = best_solutions(gp; all=true)[]
7070function set_packing (sets; weights= NoWeight (), openvertices= (), optimizer= GreedyMethod (), simplifier= nothing )
7171 n = length (sets)
7272 code = EinCode (vcat ([[i] for i= 1 : n], [[i,j] for i= 1 : n,j= 1 : n if j> i && ! isempty (sets[i] ∩ sets[j])]), collect (Int,openvertices))
73- IndependentSet (_optimize_code (code, uniformsize (code, 2 ), optimizer, simplifier), n, weights)
73+ # NOTE: we use a dummy graph here, which should be a hypergraph!
74+ IndependentSet (_optimize_code (code, uniformsize (code, 2 ), optimizer, simplifier), SimpleGraph (n), weights)
7475end
7576
7677"""
0 commit comments