Usage Examples¶
Basic solve¶
from min_ratio_cycle.solver import MinRatioCycleSolver, Edge
edges = [
Edge(0, 1, cost=2, time=1),
Edge(1, 2, cost=3, time=2),
Edge(2, 0, cost=1, time=1),
]
solver = MinRatioCycleSolver(3)
solver.add_edges(edges)
result = solver.solve()
print(result.cycle, result.ratio)
Advanced configuration¶
from min_ratio_cycle.solver import MinRatioCycleSolver, SolverConfig, SolverMode
config = SolverConfig(validate_cycles=True, log_level="INFO")
solver = MinRatioCycleSolver(4, config)
solver.add_edges([
(0, 1, 5, 2),
(1, 2, 3, 1),
(2, 3, 2, 2),
(3, 0, 1, 1),
])
result = solver.solve(mode=SolverMode.NUMERIC)
if result.metrics:
print("iterations", result.metrics.iterations)
Statistical analysis¶
from min_ratio_cycle.analytics import confidence_interval
ratios = [0.8, 0.82, 0.81, 0.79]
ci = confidence_interval(ratios)
print("95% CI:", ci)
Sensitivity analysis¶
from min_ratio_cycle.analytics import sensitivity_analysis
solver = MinRatioCycleSolver(3)
solver.add_edge(0, 1, cost=2, time=1)
solver.add_edge(1, 2, cost=1, time=1)
solver.add_edge(2, 0, cost=1, time=1)
perturb = {(0, 1): {"cost": +1}}
report = sensitivity_analysis(solver, perturb)
print(report[(0, 1)])
Visualisation¶
result = solver.solve()
result.visualize_solution(show_cycle=True)
Benchmarking¶
from min_ratio_cycle.benchmarks import benchmark_solver
runtime, ratio_diff = benchmark_solver(solver, ground_truth=-2.5)
print("runtime", runtime)