Skip to content

Commit 312ebaf

Browse files
committed
Everything should be functional now.
1 parent 55be6ad commit 312ebaf

File tree

7 files changed

+26
-222
lines changed

7 files changed

+26
-222
lines changed

examples/g2o_experiment.py

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,12 @@
33
import numpy as np
44
import networkx as nx
55
from timeit import default_timer as timer
6-
from pose_graph_utils import read_g2o_file, plot_poses, rpm_to_mac, RelativePoseMeasurement, poses_ate_tran, poses_rpe_rot
6+
from pose_graph_utils import split_edges, read_g2o_file, plot_poses, rpm_to_mac, RelativePoseMeasurement, poses_ate_tran, poses_rpe_rot
77

88
# MAC requirements
9-
from mac import MAC
10-
from mac.baseline import NaiveGreedy
11-
from mac.greedy_eig import GreedyEig
12-
from mac.greedy_esp import GreedyESP
13-
from mac.utils import split_edges, Edge, round_madow
9+
from mac.solvers import MAC, NaiveGreedy, GreedyESP
10+
from mac.utils.graphs import Edge
11+
from mac.utils.rounding import round_madow
1412

1513
import matplotlib.pyplot as plt
1614
plt.rcParams['text.usetex'] = True
@@ -267,14 +265,13 @@ def to_sesync_format(measurements):
267265
# pass
268266

269267
# Make a MAC Solver
270-
mac = MAC(odom_edges, lc_edges, num_poses, use_cache=True, fiedler_method="tracemin_cholesky")
268+
mac = MAC(odom_edges, lc_edges, num_poses, fiedler_method="tracemin_cholesky")
271269

272270
# Make a Naive Solver
273271
naive = NaiveGreedy(lc_edges)
274272

275273
# Make a GreedyEig Solver
276274
if run_greedy:
277-
# greedy_eig = GreedyEig(rpm_to_mac(odom_measurements), rpm_to_mac(lc_measurements), num_poses)
278275
greedy_esp = GreedyESP(odom_edges, lc_edges, num_poses, lazy=True)
279276

280277
#############################
@@ -318,7 +315,7 @@ def to_sesync_format(measurements):
318315

319316
# Solve the relaxed maximum algebraic connectivity augmentation problem.
320317
start = timer()
321-
result, unrounded, upper, rtime = mac.fw_subset(w_init, num_lc, max_iters=20, rounding="nearest", return_rounding_time=True)
318+
result, unrounded, upper, rtime = mac.solve(num_lc, w_init, max_iters=20, rounding="nearest", return_rounding_time=True, use_cache=True)
322319
end = timer()
323320
solve_time = end - start
324321
times.append(solve_time)

examples/g2o_mac_cache.py

Lines changed: 0 additions & 148 deletions
This file was deleted.

examples/greedy_esp_example.py

Lines changed: 0 additions & 50 deletions
This file was deleted.

examples/pose_graph_utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from scipy.sparse import csr_matrix, coo_matrix
55
from typing import List, Tuple, Union
66
import networkx as nx
7-
from mac.utils import Edge
7+
from mac.utils.graphs import Edge
88

99
from evo.core.trajectory import PoseTrajectory3D
1010
from evo.core import sync

examples/random_graph_sparsification.py

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import numpy as np
22
import networkx as nx
33
import matplotlib.pyplot as plt
4-
from mac.utils import select_edges, split_edges, Edge, nx_to_mac, mac_to_nx
5-
from mac.baseline import NaiveGreedy
6-
from mac.mac import MAC
4+
from mac.utils.graphs import select_edges, Edge
5+
from mac.utils.conversions import nx_to_mac, mac_to_nx
6+
from mac.solvers import MAC
77

88
n = 20
9-
p = 0.99
9+
p = 0.6
1010
G = nx.erdos_renyi_graph(n, p)
1111

1212
# Add a chain
@@ -16,39 +16,41 @@
1616
if not G.has_edge(i, i+1):
1717
G.add_edge(i, i+1)
1818

19-
print(G)
19+
# Split the graph into a tree part and a "loop" part
20+
spanning_tree = nx.minimum_spanning_tree(G)
21+
loop_graph = nx.difference(G, spanning_tree)
22+
2023
nx.draw(G)
2124
plt.title("Original Graph")
2225
plt.show()
2326

2427
# Ensure G is connected before proceeding
2528
assert(nx.is_connected(G))
2629

27-
edges = nx_to_mac(G)
28-
29-
# Split chain and non-chain parts
30-
fixed_edges, candidate_edges = split_edges(edges)
30+
fixed_edges = nx_to_mac(spanning_tree)
31+
candidate_edges = nx_to_mac(loop_graph)
3132

32-
pct_candidates = 0.1
33+
pct_candidates = 0.2
3334
num_candidates = int(pct_candidates * len(candidate_edges))
3435
mac = MAC(fixed_edges, candidate_edges, n)
3536

3637
w_init = np.zeros(len(candidate_edges))
3738
w_init[:num_candidates] = 1.0
39+
np.random.shuffle(w_init)
3840

39-
result, rounded, upper = mac.fw_subset(w_init, num_candidates, max_iters=50)
41+
result, rounded, upper = mac.solve(num_candidates, w_init, max_iters=100, rounding="madow", use_cache=True)
4042
init_selected = select_edges(candidate_edges, w_init)
4143
selected = select_edges(candidate_edges, result)
4244

4345
init_selected_G = mac_to_nx(fixed_edges + init_selected)
4446
selected_G = mac_to_nx(fixed_edges + selected)
4547

46-
print(f"lambda2 Random: {mac.evaluate_objective(w_init)}")
48+
print(f"lambda2 Initial: {mac.evaluate_objective(w_init)}")
4749
print(f"lambda2 Ours: {mac.evaluate_objective(result)}")
4850

4951
plt.subplot(121)
5052
nx.draw(init_selected_G)
51-
plt.title(f"Random Selection\n$\lambda_2$ = {mac.evaluate_objective(w_init):.2f}")
53+
plt.title(f"Initial Selection\n$\lambda_2$ = {mac.evaluate_objective(w_init):.2f}")
5254
plt.subplot(122)
5355
nx.draw(selected_G)
5456
plt.title(f"Ours\n$\lambda_2$ = {mac.evaluate_objective(result):.2f}")

mac/solvers/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from .mac import MAC
2+
from .baseline import NaiveGreedy
3+
from .greedy_esp import GreedyESP

mac/utils/fiedler.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def find_fiedler_pair(L, X=None, method='tracemin_lu', tol=1e-8, seed=None):
3636
assert X.shape[1] == q
3737

3838
if method == 'tracemin_cholesky':
39-
from mac.cholesky_utils import tracemin_fiedler_cholesky
39+
from mac.utils.cholesky import tracemin_fiedler_cholesky
4040
sigma, X = tracemin_fiedler_cholesky(L=L, X=X, normalized=False, tol=tol)
4141
else:
4242
sigma, X = la.algebraicconnectivity._tracemin_fiedler(L=L, X=X, normalized=False, tol=tol, method=method)

0 commit comments

Comments
 (0)