Skip to content

Commit fea6117

Browse files
authored
Renaming the Branching method to MinhThiTrick (#48)
* update * update * update deps * rename Branching to MinhThi Trick * fix ci
1 parent 72fb1a6 commit fea6117

19 files changed

+195
-110
lines changed

.github/workflows/ci.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ jobs:
5757
run: julia -e 'using Pkg;
5858
Pkg.add("PlutoUI");
5959
Pkg.activate("notebooks");
60-
Pkg.instantiate();
6160
Pkg.develop(path=".");
61+
Pkg.instantiate();
6262
using PlutoSliderServer;
6363
for file in readdir("notebooks")
6464
endswith(file, ".jl") && PlutoSliderServer.export_notebook(joinpath("notebooks", file))

Project.toml

+3-2
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,14 @@ LuxorGraphPlot = "1f49bdf2-22a7-4bc4-978b-948dc219fbbc"
99

1010
[compat]
1111
Graphs = "1.6"
12-
LuxorGraphPlot = "0.3"
12+
LuxorGraphPlot = "0.5"
1313
julia = "1"
1414

1515
[extras]
1616
GenericTensorNetworks = "3521c873-ad32-4bb4-b63d-f4f178f42b49"
17+
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
1718
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
1819
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
1920

2021
[targets]
21-
test = ["Test", "Random", "GenericTensorNetworks"]
22+
test = ["Test", "Random", "GenericTensorNetworks", "LinearAlgebra"]

notebooks/Project.toml

+11
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,14 @@ PlutoSliderServer = "2fc8631c-6f24-4c5b-bca7-cbb509c42db4"
77
PlutoUI = "7f904dfe-b85e-4ff6-b463-dae2292396a8"
88
Revise = "295af30f-e4ad-537b-8983-00126c2a3abe"
99
UnitDiskMapping = "1b61a8d9-79ed-4491-8266-ef37f39e1727"
10+
11+
[compat]
12+
GenericTensorNetworks = "2"
13+
Graphs = "1.6"
14+
LinearAlgebra = "1"
15+
LuxorGraphPlot = "0.5"
16+
PlutoSliderServer = "0.3"
17+
PlutoUI = "0.7"
18+
Revise = "3"
19+
UnitDiskMapping = "0.3"
20+
julia = "1"

notebooks/tutorial.jl

+21-18
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
### A Pluto.jl notebook ###
2-
# v0.19.32
2+
# v0.19.42
33

44
using Markdown
55
using InteractiveUtils
@@ -46,7 +46,7 @@ using UnitDiskMapping, Graphs, GenericTensorNetworks, LinearAlgebra
4646
# ╔═╡ 98459516-4833-4e4a-916f-d5ea3e657ceb
4747
# Visualization setup.
4848
# To make the plots dark-mode friendly, we use white-background color.
49-
using UnitDiskMapping.LuxorGraphPlot.Luxor, LuxorGraphPlot; GraphDisplayConfig.unit[] = 25; GraphDisplayConfig.background_color[]="white";
49+
using UnitDiskMapping.LuxorGraphPlot.Luxor, LuxorGraphPlot
5050

5151
# ╔═╡ eac6ceda-f5d4-11ec-23db-b7b4d00eaddf
5252
md"# Unit Disk Mapping"
@@ -64,16 +64,16 @@ md"Let the source graph be the Petersen graph."
6464
graph = smallgraph(:petersen)
6565

6666
# ╔═╡ 0302be92-076a-4ebe-8d6d-4b352a77cfce
67-
LuxorGraphPlot.show_graph(graph; unit=50)
67+
LuxorGraphPlot.show_graph(graph)
6868

6969
# ╔═╡ 417b18f6-6a8f-45fb-b979-6ec9d12c6246
7070
md"We can use the `map_graph` function to map the unweighted MIS problem on the Petersen graph to one on a defected King's graph."
7171

7272
# ╔═╡ c7315578-8bb0-40a0-a2a3-685a80674c9c
73-
unweighted_res = map_graph(graph; vertex_order=Branching());
73+
unweighted_res = map_graph(graph; vertex_order=MinhThiTrick());
7474

7575
# ╔═╡ 3f605eac-f587-40b2-8fac-8223777d3fad
76-
md"Here, the keyword argument `vertex_order` can be a vector of vertices in a specified order, or the method to compute the path decomposition that generates an order. The `Branching()` method is an exact path decomposition solver, which is suited for small graphs (where number of vertices <= 50). The `Greedy()` method finds the vertex order much faster and works in all cases, but may not be optimal.
76+
md"Here, the keyword argument `vertex_order` can be a vector of vertices in a specified order, or the method to compute the path decomposition that generates an order. The `MinhThiTrick()` method is an exact path decomposition solver, which is suited for small graphs (where number of vertices <= 50). The `Greedy()` method finds the vertex order much faster and works in all cases, but may not be optimal.
7777
A good vertex order can reduce the depth of the mapped graph."
7878

7979
# ╔═╡ e5382b61-6387-49b5-bae8-0389fbc92153
@@ -86,9 +86,11 @@ fieldnames(unweighted_res |> typeof)
8686
md"The field `grid_graph` is the mapped grid graph."
8787

8888
# ╔═╡ 520fbc23-927c-4328-8dc6-5b98853fb90d
89-
# `unit` is the number of pixels per unit distance
9089
LuxorGraphPlot.show_graph(unweighted_res.grid_graph)
9190

91+
# ╔═╡ af162d39-2da9-4a06-9cde-8306e811ba7a
92+
unweighted_res.grid_graph.size
93+
9294
# ╔═╡ 96ca41c0-ac77-404c-ada3-0cdc4a426e44
9395
md"The field `lines` is a vector of copy gadgets arranged in a `⊢` shape. These copy gadgets form a *crossing lattice*, in which two copy lines cross each other whenever their corresponding vertices in the source graph are connected by an edge.
9496
```
@@ -121,7 +123,7 @@ unweighted_res.mis_overhead
121123
md"We can solve the mapped graph with [`GenericTensorNetworks`](https://queracomputing.github.io/GenericTensorNetworks.jl/dev/)."
122124

123125
# ╔═╡ f084b98b-097d-4b33-a0d3-0d0a981f735e
124-
res = solve(IndependentSet(SimpleGraph(unweighted_res.grid_graph)), SingleConfigMax())[]
126+
res = solve(GenericTensorNetwork(IndependentSet(SimpleGraph(unweighted_res.grid_graph))), SingleConfigMax())[]
125127

126128
# ╔═╡ 86457b4e-b83e-4bf5-9d82-b5e14c055b4b
127129
md"You might want to read [the documentation page of `GenericTensorNetworks`](https://queracomputing.github.io/GenericTensorNetworks.jl/dev/) for a detailed explanation on this function. Here, we just visually check the solution configuration."
@@ -148,7 +150,7 @@ md"## Generic Weighted Mapping"
148150
md"A Maximum Weight Independent Set (MWIS) problem on a general graph can be mapped to one on the defected King's graph. The first step is to do the same mapping as above but adding a new positional argument `Weighted()` as the first argument of `map_graph`. Let us still use the Petersen graph as an example."
149151

150152
# ╔═╡ 2fa704ee-d5c1-4205-9a6a-34ba0195fecf
151-
weighted_res = map_graph(Weighted(), graph; vertex_order=Branching());
153+
weighted_res = map_graph(Weighted(), graph; vertex_order=MinhThiTrick());
152154

153155
# ╔═╡ 27acc8be-2db8-4322-85b4-230fdddac043
154156
md"The return value is similar to that for the unweighted mapping generated above, except each node in the mapped graph can have a weight 1, 2 or 3. Note here, we haven't added the weights in the original graph."
@@ -180,7 +182,7 @@ md"Now that we have both the graph and the weights, let us solve the mapped prob
180182
wmap_config = let
181183
graph, _ = graph_and_weights(weighted_res.grid_graph)
182184
collect(Int,
183-
solve(IndependentSet(graph; weights=mapped_weights), SingleConfigMax())[].c.data
185+
solve(GenericTensorNetwork(IndependentSet(graph, mapped_weights)), SingleConfigMax())[].c.data
184186
)
185187
end
186188

@@ -197,7 +199,7 @@ map_config_back(weighted_res, wmap_config)
197199
# ╔═╡ beb7c0e5-6221-4f20-9166-2bd56902be1b
198200
# Directly solving the source graph
199201
collect(Int,
200-
solve(IndependentSet(graph; weights=source_weights), SingleConfigMax())[].c.data
202+
solve(GenericTensorNetwork(IndependentSet(graph, source_weights)), SingleConfigMax())[].c.data
201203
)
202204

203205
# ╔═╡ cf7e88cb-432e-4e3a-ae8b-8fa12689e485
@@ -248,7 +250,7 @@ show_grayscale(qubo.grid_graph)
248250
md"By solving this maximum independent set problem, we will get the following configuration."
249251

250252
# ╔═╡ ef149d9a-6aa9-4f34-b936-201b9d77543c
251-
qubo_mapped_solution = collect(Int, solve(IndependentSet(qubo_graph; weights=qubo_weights), SingleConfigMax())[].c.data)
253+
qubo_mapped_solution = collect(Int, solve(GenericTensorNetwork(IndependentSet(qubo_graph, qubo_weights)), SingleConfigMax())[].c.data)
252254

253255
# ╔═╡ 4ea4f26e-746d-488e-9968-9fc584c04bcf
254256
show_config(qubo.grid_graph, qubo_mapped_solution)
@@ -264,8 +266,8 @@ map_config_back(qubo, collect(Int, qubo_mapped_solution))
264266
md"This solution is consistent with the exact solution:"
265267

266268
# ╔═╡ 7dd900fc-9531-4bd6-8b6d-3aac3d5a2386
267-
# Directly solving the source graph
268-
collect(Int, solve(SpinGlass(J, h), SingleConfigMax())[].c.data)
269+
# Directly solving the source graph, due to the convention issue, we flip the signs of `J` and `h`
270+
collect(Int, solve(GenericTensorNetwork(spin_glass_from_matrix(-J, -h)), SingleConfigMax())[].c.data)
269271

270272
# ╔═╡ 13f952ce-642a-4396-b574-00ea6584008c
271273
md"### QUBO problem on a square lattice"
@@ -308,7 +310,7 @@ md"Let us solve the independent set problem on the mapped graph."
308310
square_graph, square_weights = UnitDiskMapping.graph_and_weights(qubo_square.grid_graph);
309311

310312
# ╔═╡ 5c25abb7-e3ee-4104-9a82-eb4aa4e773d2
311-
config_square = collect(Int, solve(IndependentSet(square_graph; weights=square_weights), SingleConfigMax())[].c.data);
313+
config_square = collect(Int, solve(GenericTensorNetwork(IndependentSet(square_graph, square_weights)), SingleConfigMax())[].c.data);
312314

313315
# ╔═╡ 4cec7232-8fbc-4ac1-96bb-6c7fea5fe117
314316
md"We will get the following configuration."
@@ -343,7 +345,7 @@ let
343345
for (i,j,h) in square_onsite
344346
hs[i+(j-1)*n] = h
345347
end
346-
collect(Int, solve(SpinGlass(g2; J=Js, h=hs), SingleConfigMax())[].c.data)
348+
collect(Int, solve(GenericTensorNetwork(SpinGlass(g2, -Js, -hs)), SingleConfigMax())[].c.data)
347349
end
348350

349351
# ╔═╡ 9db831d6-7f10-47be-93d3-ebc892c4b3f2
@@ -386,7 +388,7 @@ md"To solve this factoring problem, one can use the following statement:"
386388

387389
# ╔═╡ e5da7214-0e69-4b5a-a65e-ed92d0616c71
388390
multiplier_output = UnitDiskMapping.solve_factoring(mres, 6) do g, ws
389-
collect(Int, solve(IndependentSet(g; weights=ws), SingleConfigMax())[].c.data)
391+
collect(Int, solve(GenericTensorNetwork(IndependentSet(g, ws)), SingleConfigMax())[].c.data)
390392
end
391393

392394
# ╔═╡ 9dc01591-5c37-4d83-b640-83280513941e
@@ -416,7 +418,7 @@ md"2. Then, we solve this new grid graph."
416418
# ╔═╡ 57f7e085-9589-4a6c-ac14-488ea9924692
417419
config_factoring6 = let
418420
mg, mw = graph_and_weights(mapped_grid_graph)
419-
solve(IndependentSet(mg; weights=mw), SingleConfigMax())[].c.data
421+
solve(GenericTensorNetwork(IndependentSet(mg, mw)), SingleConfigMax())[].c.data
420422
end;
421423

422424
# ╔═╡ 4c7d72f1-688a-4a70-8ce6-a4801127bb9a
@@ -440,7 +442,7 @@ md"## Logic Gates"
440442
md"Let us define a helper function for visualization."
441443

442444
# ╔═╡ c17bca17-a00a-4118-a212-d21da09af9b5
443-
parallel_show(gate) = leftright(show_pins(Gate(gate); format=:png, unit=80), show_grayscale(gate_gadget(Gate(gate))[1]; format=:png, unit=80, wmax=2));
445+
parallel_show(gate) = leftright(show_pins(Gate(gate)), show_grayscale(gate_gadget(Gate(gate))[1], wmax=2));
444446

445447
# ╔═╡ 6aee2288-1934-4fc5-9a9c-f45b7ce4e767
446448
md"1. NOT gate: ``y_1 =\neg x_1``"
@@ -485,6 +487,7 @@ md"Since most logic gates have 3 pins, it is natural to embed a circuit to a 3D
485487
# ╠═ae5c8359-6bdb-4a2a-8b54-cd2c7d2af4bd
486488
# ╟─56bdcaa6-c8b9-47de-95d4-6e95204af0f2
487489
# ╠═520fbc23-927c-4328-8dc6-5b98853fb90d
490+
# ╠═af162d39-2da9-4a06-9cde-8306e811ba7a
488491
# ╟─96ca41c0-ac77-404c-ada3-0cdc4a426e44
489492
# ╠═5dfa8a74-26a5-45c4-a80c-47ba4a6a4ae9
490493
# ╟─a64c2094-9a51-4c45-b9d1-41693c89a212

notebooks/unweighted.jl

+9-9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
### A Pluto.jl notebook ###
2-
# v0.19.32
2+
# v0.19.42
33

44
using Markdown
55
using InteractiveUtils
@@ -82,11 +82,11 @@ show_graph(g5)
8282
# ╔═╡ 625bdcf4-e37e-4bb8-bd1a-907cdcc5fe24
8383
md"""
8484
#### Step 2: Map the source graph to an unweighted King's subgraph (KSG)
85-
The vertex order is optimized with the Branching path decomposition algorithm
85+
The vertex order is optimized with the Branching path decomposition algorithm (MinhThi's Trick)
8686
"""
8787

8888
# ╔═╡ f9e57a6b-1186-407e-a8b1-cb8f31a17bd2
89-
g5res = UnitDiskMapping.map_graph(g5; vertex_order=Branching())
89+
g5res = UnitDiskMapping.map_graph(g5; vertex_order=MinhThiTrick())
9090

9191
# ╔═╡ e64e7ca4-b297-4c74-8699-bec4b4fbb843
9292
md"Visualize the mapped KSG graph in terminal"
@@ -107,7 +107,7 @@ md"#### Step 3: Solve the MIS size of the mapped graph"
107107
md"The independent set size can be obtained by solving the `SizeMax()` property using the [generic tensor network](https://github.com/QuEraComputing/GenericTensorNetworks.jl) method."
108108

109109
# ╔═╡ 67fd2dd2-5add-4402-9618-c9b7c7bfe95b
110-
missize_g5_ksg = solve(IndependentSet(SimpleGraph(g5res.grid_graph)), SizeMax())[]
110+
missize_g5_ksg = solve(GenericTensorNetwork(IndependentSet(SimpleGraph(g5res.grid_graph))), SizeMax())[]
111111

112112
# ╔═╡ aaee9dbc-5b9c-41b1-b0d4-35d2cac7c773
113113
md"The predicted MIS size for the source graph is:"
@@ -121,7 +121,7 @@ One of the best solutions can be obtained by solving the `SingleConfigMax()` pro
121121
"""
122122

123123
# ╔═╡ 0142f661-0855-45b4-852a-78f560e98c67
124-
mis_g5_ksg = solve(IndependentSet(SimpleGraph(g5res.grid_graph)), SingleConfigMax())[].c.data
124+
mis_g5_ksg = solve(GenericTensorNetwork(IndependentSet(SimpleGraph(g5res.grid_graph))), SingleConfigMax())[].c.data
125125

126126
# ╔═╡ fa046f3c-fd7d-4e91-b3f5-fc4591d3cae2
127127
md"Plot the solution"
@@ -153,7 +153,7 @@ UnitDiskMapping.is_independent_set(g5, mis_g5)
153153
count(isone, mis_g5)
154154

155155
# ╔═╡ 5621bb2a-b1c6-4f0d-921e-980b2ce849d5
156-
solve(IndependentSet(g5), SizeMax())[].n
156+
solve(GenericTensorNetwork(IndependentSet(g5)), SizeMax())[].n
157157

158158
# ╔═╡ 1fe6c679-2962-4c1b-8b12-4ceb77ed9e0f
159159
md"""
@@ -178,13 +178,13 @@ petersen_res = UnitDiskMapping.map_graph(petersen)
178178
md"The MIS size of the petersen graph is 4."
179179

180180
# ╔═╡ bf97a268-cd96-4dbc-83c6-10eb1b03ddcc
181-
missize_petersen = solve(IndependentSet(petersen), SizeMax())[]
181+
missize_petersen = solve(GenericTensorNetwork(IndependentSet(petersen)), SizeMax())[]
182182

183183
# ╔═╡ 2589f112-5de5-4c98-bcd1-138b6143cd30
184184
md" The MIS size of the mapped KSG graph is much larger"
185185

186186
# ╔═╡ 1b946455-b152-4d6f-9968-7dc6e22d171a
187-
missize_petersen_ksg = solve(IndependentSet(SimpleGraph(petersen_res.grid_graph)), SizeMax())[]
187+
missize_petersen_ksg = solve(GenericTensorNetwork(IndependentSet(SimpleGraph(petersen_res.grid_graph))), SizeMax())[]
188188

189189
# ╔═╡ 4e7f7d9e-fae4-46d2-b95d-110d36b691d9
190190
md"The difference in the MIS size is:"
@@ -196,7 +196,7 @@ petersen_res.mis_overhead
196196
md"Find an MIS of the mapped KSG and map it back an MIS on the source graph."
197197

198198
# ╔═╡ 0d08cb1a-f7f3-4d63-bd70-78103db086b3
199-
mis_petersen_ksg = solve(IndependentSet(SimpleGraph(petersen_res.grid_graph)), SingleConfigMax())[].c.data
199+
mis_petersen_ksg = solve(GenericTensorNetwork(IndependentSet(SimpleGraph(petersen_res.grid_graph))), SingleConfigMax())[].c.data
200200

201201
# ╔═╡ c27d8aed-c81f-4eb7-85bf-a4ed88c2537f
202202
mis_petersen = UnitDiskMapping.map_config_back(petersen_res, collect(mis_petersen_ksg))

src/UnitDiskMapping.jl

+3-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ export @gg
3737
export is_independent_set, unitdisk_graph
3838

3939
# path decomposition
40-
export pathwidth, PathDecompositionMethod, Branching, Greedy
40+
export pathwidth, PathDecompositionMethod, MinhThiTrick, Greedy
41+
42+
@deprecate Branching MinhThiTrick
4143

4244
include("utils.jl")
4345
include("Core.jl")

src/mapping.jl

+8-8
Original file line numberDiff line numberDiff line change
@@ -318,16 +318,16 @@ function crossat(ug::MappingGrid, v, w)
318318
end
319319

320320
"""
321-
embed_graph([mode,] g::SimpleGraph; vertex_order=Branching())
321+
embed_graph([mode,] g::SimpleGraph; vertex_order=MinhThiTrick())
322322
323323
Embed graph `g` into a unit disk grid, where the optional argument `mode` can be `Weighted()` or `UnWeighted`.
324324
The `vertex_order` can be a vector or one of the following inputs
325325
326326
* `Greedy()` fast but non-optimal.
327-
* `Branching()` slow but optimal.
327+
* `MinhThiTrick()` slow but optimal.
328328
"""
329-
embed_graph(g::SimpleGraph; vertex_order=Branching()) = embed_graph(UnWeighted(), g; vertex_order)
330-
function embed_graph(mode, g::SimpleGraph; vertex_order=Branching())
329+
embed_graph(g::SimpleGraph; vertex_order=MinhThiTrick()) = embed_graph(UnWeighted(), g; vertex_order)
330+
function embed_graph(mode, g::SimpleGraph; vertex_order=MinhThiTrick())
331331
if vertex_order isa AbstractVector
332332
L = PathDecomposition.Layout(g, collect(vertex_order[end:-1:1]))
333333
else
@@ -368,7 +368,7 @@ struct MappingResult{NT}
368368
end
369369

370370
"""
371-
map_graph([mode=Weighted(),] g::SimpleGraph; vertex_order=Branching(), ruleset=[...])
371+
map_graph([mode=UnWeighted(),] g::SimpleGraph; vertex_order=MinhThiTrick(), ruleset=[...])
372372
373373
Map a graph to a unit disk grid graph that being "equivalent" to the original graph, and return a `MappingResult` instance.
374374
Here "equivalent" means a maximum independent set in the grid graph can be mapped back to
@@ -385,13 +385,13 @@ Keyword Arguments
385385
Different vertex orders have different path width, i.e. different depth of mapped grid graph.
386386
It can be a vector or one of the following inputs
387387
* `Greedy()` fast but not optimal.
388-
* `Branching()` slow but optimal.
388+
* `MinhThiTrick()` slow but optimal.
389389
* `ruleset` specifies and extra set of optimization patterns (not the crossing patterns).
390390
"""
391-
function map_graph(g::SimpleGraph; vertex_order=Branching(), ruleset=default_simplifier_ruleset(UnWeighted()))
391+
function map_graph(g::SimpleGraph; vertex_order=MinhThiTrick(), ruleset=default_simplifier_ruleset(UnWeighted()))
392392
map_graph(UnWeighted(), g; ruleset=ruleset, vertex_order=vertex_order)
393393
end
394-
function map_graph(mode, g::SimpleGraph; vertex_order=Branching(), ruleset=default_simplifier_ruleset(mode))
394+
function map_graph(mode, g::SimpleGraph; vertex_order=MinhThiTrick(), ruleset=default_simplifier_ruleset(mode))
395395
ug = embed_graph(mode, g; vertex_order=vertex_order)
396396
mis_overhead0 = mis_overhead_copylines(ug)
397397
ug, tape = apply_crossing_gadgets!(mode, ug)

src/pathdecomposition/pathdecomposition.jl

+19-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
module PathDecomposition
22
using Graphs
33

4-
export pathwidth, PathDecompositionMethod, Branching, Greedy
4+
export pathwidth, PathDecompositionMethod, MinhThiTrick, Greedy
55

66
struct Layout{T}
77
vertices::Vector{T}
@@ -78,7 +78,22 @@ Graphs.vertices(layout::Layout) = layout.vertices
7878
##### Interfaces #####
7979
abstract type PathDecompositionMethod end
8080

81-
struct Branching <: PathDecompositionMethod end
81+
"""
82+
MinhThiTrick <: PathDecompositionMethod
83+
84+
A path decomposition method based on the Branching method.
85+
86+
In memory of Minh-Thi Nguyen, one of the main developers of this method.
87+
She left us in a truck accident at her 24 years old.
88+
- https://www.cbsnews.com/boston/news/cyclist-killed-minh-thi-nguyen-cambridge-bike-safety/
89+
"""
90+
struct MinhThiTrick <: PathDecompositionMethod end
91+
92+
"""
93+
Greedy <: PathDecompositionMethod
94+
95+
A path decomposition method based on the Greedy method.
96+
"""
8297
Base.@kwdef struct Greedy <: PathDecompositionMethod
8398
nrepeat::Int = 10
8499
end
@@ -90,9 +105,9 @@ Compute the optimal path decomposition of graph `g`, returns a `Layout` instance
90105
`method` can be
91106
92107
* Greedy(; nrepeat=10)
93-
* Branching
108+
* MinhThiTrick
94109
"""
95-
function pathwidth(g::AbstractGraph, ::Branching)
110+
function pathwidth(g::AbstractGraph, ::MinhThiTrick)
96111
return branch_and_bound(g)
97112
end
98113

0 commit comments

Comments
 (0)