@@ -5,53 +5,53 @@ abstract type GraphProblem end
55
66"""
77 Independence{CT<:EinTypes} <: GraphProblem
8- Independence(graph; openvertices=(), kwargs...)
8+ Independence(graph; openvertices=(), optmethod=:tree, kwargs...)
99
1010Independent set problem. `kwargs` is forwarded to `optimize_code`.
1111"""
1212struct Independence{CT<: EinTypes } <: GraphProblem
1313 code:: CT
1414end
1515
16- function Independence (g:: SimpleGraph ; openvertices= (), kwargs... )
16+ function Independence (g:: SimpleGraph ; openvertices= (), optmethod = :tree , kwargs... )
1717 rawcode = EinCode (([(i,) for i in LightGraphs. vertices (g)]. .. , # labels for vertex tensors
1818 [minmax (e. src,e. dst) for e in LightGraphs. edges (g)]. .. ), openvertices) # labels for edge tensors
19- code = optimize_code (rawcode; kwargs... )
19+ code = optimize_code (rawcode, Val (optmethod) ; kwargs... )
2020 Independence (code)
2121end
2222
2323"""
2424 MaxCut{CT<:EinTypes} <: GraphProblem
25- MaxCut(graph; openvertices=(), kwargs...)
25+ MaxCut(graph; openvertices=(), optmethod=:tree, kwargs...)
2626
2727Max cut problem (or spin glass problem). `kwargs` is forwarded to `optimize_code`.
2828"""
2929struct MaxCut{CT<: EinTypes } <: GraphProblem
3030 code:: CT
3131end
32- function MaxCut (g:: SimpleGraph ; openvertices= (), kwargs... )
32+ function MaxCut (g:: SimpleGraph ; openvertices= (), optmethod = :tree , kwargs... )
3333 rawcode = EinCode (([minmax (e. src,e. dst) for e in LightGraphs. edges (g)]. .. ,), openvertices) # labels for edge tensors
34- MaxCut (optimize_code (rawcode; kwargs... ))
34+ MaxCut (optimize_code (rawcode, Val (optmethod) ; kwargs... ))
3535end
3636
3737"""
3838 MaximalIndependence{CT<:EinTypes} <: GraphProblem
39- MaximalIndependence(graph; openvertices=(), kwargs...)
39+ MaximalIndependence(graph; openvertices=(), optmethod=:tree, kwargs...)
4040
4141Maximal independent set problem. `kwargs` is forwarded to `optimize_code`.
4242"""
4343struct MaximalIndependence{CT<: EinTypes } <: GraphProblem
4444 code:: CT
4545end
4646
47- function MaximalIndependence (g:: SimpleGraph ; openvertices= (), kwargs... )
47+ function MaximalIndependence (g:: SimpleGraph ; openvertices= (), optmethod = :tree , kwargs... )
4848 rawcode = EinCode (([(LightGraphs. neighbors (g, v)... , v) for v in LightGraphs. vertices (g)]. .. ,), openvertices)
49- MaximalIndependence (optimize_code (rawcode; kwargs... ))
49+ MaximalIndependence (optimize_code (rawcode, Val (optmethod) ; kwargs... ))
5050end
5151
5252"""
5353 Matching{CT<:EinTypes} <: GraphProblem
54- Matching(graph; openvertices=(), kwargs...)
54+ Matching(graph; openvertices=(), optmethod=:tree, kwargs...)
5555
5656Vertex matching problem. `kwargs` is forwarded to `optimize_code`.
5757The matching polynomial adopts the first definition in wiki page: https://en.wikipedia.org/wiki/Matching_polynomial
@@ -64,15 +64,15 @@ struct Matching{CT<:EinTypes} <: GraphProblem
6464 code:: CT
6565end
6666
67- function Matching (g:: SimpleGraph ; openvertices= (), kwargs... )
67+ function Matching (g:: SimpleGraph ; openvertices= (), optmethod = :tree , kwargs... )
6868 rawcode = EinCode (([(minmax (e. src,e. dst),) for e in LightGraphs. edges (g)]. .. , # labels for edge tensors
6969 [([minmax (i,j) for j in neighbors (g, i)]. .. ,) for i in LightGraphs. vertices (g)]. .. ,), openvertices) # labels for vertex tensors
70- Matching (optimize_code (rawcode; kwargs... ))
70+ Matching (optimize_code (rawcode, Val (optmethod) ; kwargs... ))
7171end
7272
7373"""
7474 Coloring{K,CT<:EinTypes} <: GraphProblem
75- Coloring{K}(graph; openvertices=(), kwargs...)
75+ Coloring{K}(graph; openvertices=(), optmethod=:tree, kwargs...)
7676
7777K-Coloring problem. `kwargs` is forwarded to `optimize_code`.
7878"""
@@ -81,7 +81,7 @@ struct Coloring{K,CT<:EinTypes} <: GraphProblem
8181end
8282Coloring {K} (code:: ET ) where {K,ET<: EinTypes } = Coloring {K,ET} (code)
8383# same network layout as independent set.
84- Coloring {K} (g:: SimpleGraph ; openvertices= (), kwargs... ) where K = Coloring {K} (Independence (g; openvertices= openvertices, kwargs... ). code)
84+ Coloring {K} (g:: SimpleGraph ; openvertices= (), optmethod = :tree , kwargs... ) where K = Coloring {K} (Independence (g; openvertices= openvertices, kwargs... ). code)
8585
8686"""
8787 labels(code)
@@ -131,7 +131,7 @@ Optimize the contraction order.
131131 * `:sa`, the simulated annealing approach, takes kwargs [`rw_weight`, `βs`, `ntrials`, `niters`]. Check `optimize_sa` in package `OMEinsumContractionOrders`.
132132 * `:raw`, do nothing and return the raw EinCode.
133133"""
134- function optimize_code (code:: EinTypes ; optmethod = :auto , sc_target= 17 , max_group_size= 40 , nrepeat= 10 , imbalances= 0.0 : 0.001 : 0.8 , initializer= :random , βs= 0.01 : 0.05 : 10.0 , ntrials= 50 , niters= 1000 , sc_weight= 2.0 , rw_weight= 1.0 )
134+ function optimize_code (@nospecialize ( code:: EinTypes ), :: Val{optmethod} ; sc_target= 17 , max_group_size= 40 , nrepeat= 10 , imbalances= 0.0 : 0.001 : 0.8 , initializer= :random , βs= 0.01 : 0.05 : 10.0 , ntrials= 50 , niters= 1000 , sc_weight= 2.0 , rw_weight= 1.0 ) where optmethod
135135 size_dict = Dict ([s=> 2 for s in labels (code)])
136136 optcode = if optmethod == :kahypar
137137 optimize_kahypar (code, size_dict; sc_target= sc_target, max_group_size= max_group_size, imbalances= imbalances, greedy_nrepeat= nrepeat)
160160bondsize (gp:: Coloring{K} ) where K = K
161161
162162"""
163- set_packing(sets; kwargs...)
163+ set_packing(sets; openvertices=(), optmethod=:tree, kwargs...)
164164
165165Set packing is a generalization of independent set problem to hypergraphs.
166166Calling this function will return you an `Independence` instance.
@@ -177,8 +177,8 @@ julia> res = best_solutions(gp; all=true)[]
177177(2, {10010, 00110, 01100})ₜ
178178```
179179"""
180- function set_packing (sets; kwargs... )
180+ function set_packing (sets; openvertices = (), optmethod = :tree , kwargs... )
181181 n = length (sets)
182182 code = EinCode (([(i,) for i= 1 : n]. .. , [(i,j) for i= 1 : n,j= 1 : n if j> i && ! isempty (sets[i] ∩ sets[j])]. .. ), ())
183- Independence (optimize_code (code; kwargs... ))
183+ Independence (optimize_code (code, Val (optmethod) ; kwargs... ))
184184end
0 commit comments