pub fn run_solver<S, C, P, BuildPhases>(
solution: S,
constraints_fn: fn() -> C,
descriptor: fn() -> SolutionDescriptor,
entity_count_by_descriptor: fn(&S, usize) -> usize,
runtime: SolverRuntime<S>,
default_time_limit_secs: u64,
is_trivial: fn(&S) -> bool,
log_scale: fn(&S),
build_phases: BuildPhases,
) -> Swhere
S: PlanningSolution,
S::Score: Score + ParseableScore,
C: ConstraintSet<S, S::Score>,
P: Phase<S, ScoreDirector<S, C>, ChannelProgressCallback<S>> + Send + Debug,
BuildPhases: Fn(&SolverConfig) -> P,