Optimization for layered graph layouts
import networkx as nx
from IPython.display import SVG
from matplotlib import pyplot as plt
from vizopt.animation import SnapshotCallback
from vizopt.base import OptimConfig
from vizopt.templates.layered_graph import LayeredGraphOptimizer
# Build a simple DAG
dag = nx.DiGraph()
dag.add_edges_from(
[
("A", "B"),
("A", "C"),
("B", "D"),
("B", "E"),
("C", "E"),
("C", "F"),
("D", "G"),
("E", "G"),
("F", "G"),
]
)
optimizer = LayeredGraphOptimizer(
dag, min_distance=1.5, preferred_edge_vector=(1.0, 0.0), weight_edge_direction=0.0
)
optimizer.optimize(OptimConfig(n_iters=5000, learning_rate=1e-2))
optimizer.plot()
plt.title("Layered graph layout (standard direction → (1, 0))")
plt.show()

snapshot_cb = SnapshotCallback(every=50)
optimizer = LayeredGraphOptimizer(
dag, min_distance=1.5, preferred_edge_vector=(1.0, 0.0), weight_edge_direction=0.0
)
optimizer.optimize(OptimConfig(n_iters=5000, learning_rate=3e-3), callback=snapshot_cb)
svg = optimizer.animate_svg(snapshot_cb, fps=12, size=500)
SVG(data=svg)
