pub fn run_solver<S, C, P>(
solution: S,
constraints_fn: fn() -> C,
descriptor: fn() -> SolutionDescriptor,
entity_count_by_descriptor: fn(&S, usize) -> usize,
terminate: Option<&AtomicBool>,
sender: UnboundedSender<SolverEvent<S>>,
default_time_limit_secs: u64,
is_trivial: fn(&S) -> bool,
log_scale: fn(&S),
build_phases: fn(&SolverConfig) -> PhaseSequence<P>,
) -> Swhere
S: PlanningSolution,
S::Score: Score + ParseableScore,
C: ConstraintSet<S, S::Score>,
P: Send + Debug,
PhaseSequence<P>: Phase<S, ScoreDirector<S, C>, ChannelProgressCallback<S>>,