def METHOD_NAME(*, scenario):
    """Runs a simulation of the given scenario.
    """
    builder = DiagramBuilder()
    # Create the multibody plant and scene graph.
    sim_plant, scene_graph = AddMultibodyPlant(
        config=scenario.plant_config,
        builder=builder)
    # Add model directives.
    added_models = ProcessModelDirectives(
        directives=ModelDirectives(directives=scenario.directives),
        plant=sim_plant)
    # Now the plant is complete.
    sim_plant.Finalize()
    # Add LCM buses. (The simulator will handle polling the network for new
    # messages and dispatching them to the receivers, i.e., "pump" the bus.)
    lcm_buses = ApplyLcmBusConfig(
        lcm_buses=scenario.lcm_buses,
        builder=builder)
    # Add actuation inputs.
    ApplyDriverConfigs(
        driver_configs=scenario.model_drivers,
        sim_plant=sim_plant,
        models_from_directives=added_models,
        lcm_buses=lcm_buses,
        builder=builder)
    # Add scene cameras.
    for _, camera in scenario.cameras.items():
        ApplyCameraConfig(
            config=camera,
            builder=builder,
            lcm_buses=lcm_buses)
    # Add visualization.
    ApplyVisualizationConfig(scenario.visualization, builder, lcm_buses)
    # Build the diagram and its simulator.
    diagram = builder.Build()
    simulator = Simulator(diagram)
    ApplySimulatorConfig(scenario.simulator_config, simulator)
    # Sample the random elements of the context.
    random = RandomGenerator(scenario.random_seed)
    diagram.SetRandomContext(simulator.get_mutable_context(), random)
    # Simulate.
    simulator.AdvanceTo(scenario.simulation_duration)