Skip to content

Commit d19cb26

Browse files
committed
update
1 parent 6faccf7 commit d19cb26

File tree

1 file changed

+18
-18
lines changed

1 file changed

+18
-18
lines changed

src/networks.jl

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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
1010
Independent set problem. `kwargs` is forwarded to `optimize_code`.
1111
"""
1212
struct Independence{CT<:EinTypes} <: GraphProblem
1313
code::CT
1414
end
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)
2121
end
2222

2323
"""
2424
MaxCut{CT<:EinTypes} <: GraphProblem
25-
MaxCut(graph; openvertices=(), kwargs...)
25+
MaxCut(graph; openvertices=(), optmethod=:tree, kwargs...)
2626
2727
Max cut problem (or spin glass problem). `kwargs` is forwarded to `optimize_code`.
2828
"""
2929
struct MaxCut{CT<:EinTypes} <: GraphProblem
3030
code::CT
3131
end
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...))
3535
end
3636

3737
"""
3838
MaximalIndependence{CT<:EinTypes} <: GraphProblem
39-
MaximalIndependence(graph; openvertices=(), kwargs...)
39+
MaximalIndependence(graph; openvertices=(), optmethod=:tree, kwargs...)
4040
4141
Maximal independent set problem. `kwargs` is forwarded to `optimize_code`.
4242
"""
4343
struct MaximalIndependence{CT<:EinTypes} <: GraphProblem
4444
code::CT
4545
end
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...))
5050
end
5151

5252
"""
5353
Matching{CT<:EinTypes} <: GraphProblem
54-
Matching(graph; openvertices=(), kwargs...)
54+
Matching(graph; openvertices=(), optmethod=:tree, kwargs...)
5555
5656
Vertex matching problem. `kwargs` is forwarded to `optimize_code`.
5757
The 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
6565
end
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...))
7171
end
7272

7373
"""
7474
Coloring{K,CT<:EinTypes} <: GraphProblem
75-
Coloring{K}(graph; openvertices=(), kwargs...)
75+
Coloring{K}(graph; openvertices=(), optmethod=:tree, kwargs...)
7676
7777
K-Coloring problem. `kwargs` is forwarded to `optimize_code`.
7878
"""
@@ -81,7 +81,7 @@ struct Coloring{K,CT<:EinTypes} <: GraphProblem
8181
end
8282
Coloring{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)
@@ -160,7 +160,7 @@ end
160160
bondsize(gp::Coloring{K}) where K = K
161161

162162
"""
163-
set_packing(sets; kwargs...)
163+
set_packing(sets; openvertices=(), optmethod=:tree, kwargs...)
164164
165165
Set packing is a generalization of independent set problem to hypergraphs.
166166
Calling 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...))
184184
end

0 commit comments

Comments
 (0)