co_design
End-to-end topology + dimensions co-design pipeline.
End-to-end walking mechanism design pipeline.
Connects pylinkage’s topology co-optimization (co_optimize) with
leggedsnake’s physics simulation, enabling automatic discovery of both
the mechanism topology and its dimensions for optimal walking performance.
Example:
from leggedsnake import (
DistanceFitness, StrideFitness,
WalkingDesignSpec, optimize_walking_mechanism,
)
spec = WalkingDesignSpec(
objectives=[DistanceFitness(duration=10.0, n_legs=4)],
objective_names=["walking distance"],
kinematic_prefilter=StrideFitness(),
max_links=6,
)
result = optimize_walking_mechanism(spec)
for walker, metrics in zip(result.walkers, result.fitness_results):
print(walker.name, metrics)
- class leggedsnake.co_design.WalkingDesignResult(walkers: list[Walker], fitness_results: list[dict[str, FitnessResult]], co_opt_result: Any, spec: WalkingDesignSpec)
Bases:
objectResult of a full-stack walking mechanism design run.
- Variables:
walkers (list[Walker]) – Ranked Walker solutions (best first by primary objective).
fitness_results (list[dict[str, FitnessResult]]) – Per-walker fitness results keyed by objective name.
co_opt_result (CoOptimizationResult) – Raw co-optimization result with Pareto front and convergence data.
spec (WalkingDesignSpec) – The design specification used.
- __init__(walkers: list[Walker], fitness_results: list[dict[str, FitnessResult]], co_opt_result: Any, spec: WalkingDesignSpec) None
- co_opt_result: Any
- fitness_results: list[dict[str, FitnessResult]]
- spec: WalkingDesignSpec
- class leggedsnake.co_design.WalkingDesignSpec(objectives: list[DynamicFitness] = <factory>, objective_names: list[str] | None = None, world_config: WorldConfig | None = None, terrain: TerrainConfig | None = None, n_legs: int = 4, motor_rates: float | dict[str, float] = -4.0, max_links: int = 8, kinematic_prefilter: DynamicFitness | None = None, catalog: TopologyCatalog | None = None, co_opt_config: CoOptimizationConfig | None = None, use_warm_start: bool = False, precision_points: list[tuple[float, float]] | None = None)
Bases:
objectSpecification for a walking mechanism design problem.
- Variables:
objectives (list[DynamicFitness]) – Fitness evaluators to optimize (e.g.,
DistanceFitness).objective_names (list[str] | None) – Human-readable names for objectives.
world_config (WorldConfig | None) – Full simulation config. Overrides terrain if both given.
terrain (TerrainConfig | None) – Terrain parameters. Ignored when world_config is provided.
n_legs (int) – Number of legs for each walker candidate.
motor_rates (float | dict[str, float]) – Motor angular velocity.
max_links (int) – Maximum linkage complexity to explore in the catalog.
kinematic_prefilter (DynamicFitness | None) – Optional fast pre-filter (e.g.,
StrideFitness).catalog (TopologyCatalog | None) – Topology catalog.
Noneloads the built-in catalog.co_opt_config (CoOptimizationConfig | None) – Co-optimization parameters.
Noneuses defaults.use_warm_start (bool) – If True, run synthesis first to seed the optimizer.
precision_points (list[tuple[float, float]] | None) – Target foot-path points for warm-start synthesis.
- __init__(objectives: list[DynamicFitness] = <factory>, objective_names: list[str] | None = None, world_config: WorldConfig | None = None, terrain: TerrainConfig | None = None, n_legs: int = 4, motor_rates: float | dict[str, float] = -4.0, max_links: int = 8, kinematic_prefilter: DynamicFitness | None = None, catalog: TopologyCatalog | None = None, co_opt_config: CoOptimizationConfig | None = None, use_warm_start: bool = False, precision_points: list[tuple[float, float]] | None = None) None
- catalog: TopologyCatalog | None = None
- co_opt_config: CoOptimizationConfig | None = None
- kinematic_prefilter: DynamicFitness | None = None
- max_links: int = 8
- motor_rates: float | dict[str, float] = -4.0
- n_legs: int = 4
- objective_names: list[str] | None = None
- objectives: list[DynamicFitness]
- precision_points: list[tuple[float, float]] | None = None
- terrain: TerrainConfig | None = None
- use_warm_start: bool = False
- world_config: WorldConfig | None = None
- leggedsnake.co_design.optimize_walking_mechanism(spec: WalkingDesignSpec) WalkingDesignResult
End-to-end walking mechanism design pipeline.
Pipeline stages:
Build
WorldConfigfrom spec (terrain, gravity, etc.).Wrap each
DynamicFitnessobjective viaco_optimize_objective()to matchco_optimize()’s minimization contract.Run
warm_start_co_optimization()orco_optimize()(depending onspec.use_warm_start).Convert Pareto-front solutions to
Walkerinstances viaWalker.from_synthesis(), which wraps pylinkage’sLinkage.to_hypergraph()bridge.Re-evaluate each walker with the original fitness functions to produce full
FitnessResultdicts (with metrics and loci).Rank by primary objective score (highest first).
- Parameters:
spec (WalkingDesignSpec) – Complete design specification.
- Returns:
Ranked walker solutions with metrics and the raw Pareto front.
- Return type:
- Raises:
ValueError – If spec.objectives is empty.