1- export Independence, MaximalIndependence, Matching, Coloring, optimize_code, set_packing, SpinGlass
1+ export Independence, MaximalIndependence, Matching, Coloring, optimize_code, set_packing, MaxCut
22const EinTypes = Union{EinCode,NestedEinsum}
33
44abstract type GraphProblem end
@@ -20,20 +20,18 @@ function Independence(g::SimpleGraph; outputs=(), kwargs...)
2020end
2121
2222"""
23- SpinGlass{Q, CT<:EinTypes} <: GraphProblem
24- SpinGlass{Q}(graph; kwargs...)
25- SpinGlass(graph; kwargs...)
23+ MaxCut{CT<:EinTypes} <: GraphProblem
24+ MaxCut(graph; kwargs...)
2625
27- Q-state spin glass problem (or Potts model). For `kwargs`, check `optimize_code` API.
28- When Q=2, it corresponds to the {0, 1} spin glass model.
26+ Max cut problem (or spin glass problem). For `kwargs`, check `optimize_code` API.
2927"""
30- struct SpinGlass{Q, CT<: EinTypes } <: GraphProblem
28+ struct MaxCut{ CT<: EinTypes } <: GraphProblem
3129 code:: CT
3230end
33-
34- SpinGlass (g :: SimpleGraph ; outputs = (), kwargs ... ) = SpinGlass {2} (g; outputs = outputs, kwargs ... )
35- SpinGlass {Q} (g :: SimpleGraph ; outputs = (), kwargs ... ) where Q = SpinGlass {Q} ( Independence (g; outputs = outputs, kwargs... ). code )
36- SpinGlass {Q} (code :: EinTypes ) where Q = SpinGlass {Q,typeof(code)} (code)
31+ function MaxCut (g :: SimpleGraph ; outputs = (), kwargs ... )
32+ rawcode = EinCode (([ minmax (e . src,e . dst) for e in LightGraphs . edges (g)] . .. ,), outputs) # labels for edge tensors
33+ MaxCut ( optimize_code (rawcode; kwargs... ))
34+ end
3735
3836"""
3937 MaximalIndependence{CT<:EinTypes} <: GraphProblem
@@ -127,11 +125,10 @@ end
127125
128126OMEinsum. timespace_complexity (gp:: GraphProblem ) = timespace_complexity (gp. code, uniformsize (gp. code, bondsize (gp)))
129127
130- for T in [:Independence , :Matching , :MaximalIndependence ]
128+ for T in [:Independence , :Matching , :MaximalIndependence , :MaxCut ]
131129 @eval bondsize (gp:: $T ) = 2
132130end
133131bondsize (gp:: Coloring{K} ) where K = K
134- bondsize (gp:: SpinGlass{Q} ) where Q = Q
135132
136133"""
137134 set_packing(sets; kwargs...)
0 commit comments