Skip to main content

solverforge/
lib.rs

1/* SolverForge - A Constraint Solver in Rust
2
3SolverForge is a high-performance constraint satisfaction/optimization solver.
4It helps you optimize planning and scheduling problems.
5
6# Quick Start
7
8```
9use solverforge::prelude::*;
10
11#[problem_fact]
12pub struct Employee {
13#[planning_id]
14pub id: i64,
15pub name: String,
16}
17
18#[planning_entity]
19pub struct Shift {
20#[planning_id]
21pub id: i64,
22#[planning_variable]
23pub employee: Option<i64>,
24}
25
26#[planning_solution]
27pub struct Schedule {
28#[problem_fact_collection]
29pub employees: Vec<Employee>,
30#[planning_entity_collection]
31pub shifts: Vec<Shift>,
32#[planning_score]
33pub score: Option<HardSoftScore>,
34}
35```
36*/
37
38/* ============================================================================
39Attribute Macros
40============================================================================
41*/
42
43pub use solverforge_macros::{planning_entity, planning_solution, problem_fact};
44
45// Derive macros (used by attribute macros, must be at root level)
46pub use solverforge_macros::{PlanningEntityImpl, PlanningSolutionImpl, ProblemFactImpl};
47
48/* ============================================================================
49Score Types
50============================================================================
51*/
52
53pub use solverforge_config::{SolverConfig, SolverConfigOverride};
54pub use solverforge_core::score::{
55    BendableScore, HardMediumSoftScore, HardSoftDecimalScore, HardSoftScore, Score, SoftScore,
56};
57
58pub mod cvrp;
59pub mod prelude;
60pub mod stream;
61
62#[doc(hidden)]
63pub mod __internal;
64
65/* ============================================================================
66Constraint API
67============================================================================
68*/
69
70pub use solverforge_scoring::{
71    ConstraintSet, IncrementalBiConstraint, IncrementalConstraint, IncrementalUniConstraint,
72};
73
74/* ============================================================================
75Score Director
76============================================================================
77*/
78
79pub use solverforge_scoring::{Director, ScoreDirector};
80
81/* ============================================================================
82Solver
83============================================================================
84*/
85
86pub use solverforge_solver::heuristic::selector::DefaultDistanceMeter;
87pub use solverforge_solver::CrossEntityDistanceMeter;
88pub use solverforge_solver::{
89    analyze, run_solver, run_solver_with_config, Analyzable, ConstraintAnalysis, ScoreAnalysis,
90    Solvable, SolverEvent, SolverEventMetadata, SolverLifecycleState, SolverManager,
91    SolverManagerError, SolverRuntime, SolverSnapshot, SolverSnapshotAnalysis, SolverStatus,
92    SolverTelemetry, SolverTerminalReason,
93};
94
95/* ============================================================================
96Console Output (feature-gated)
97============================================================================
98*/
99
100#[cfg(feature = "console")]
101pub use solverforge_console as console;