1mod advanced_constraints;
15mod advanced_projection;
16mod approximate_satisfaction;
17mod constraint;
18mod constraint_analysis;
19mod constraint_propagation;
20mod constraint_repair;
21mod constraint_sensitivity;
22mod decomposition;
23mod differential_constraints;
24mod error;
25mod gpu_acceleration;
26mod guardrail;
27mod incremental_solver;
28mod mpc;
29mod multiobjective;
30mod online_learning;
31mod performance;
32mod projection;
33#[cfg(feature = "qp-solver")]
34mod qp_solver;
35mod tensorlogic_integration;
36mod timevarying;
37mod training;
38mod violation_explanation;
39mod visualization;
40
41pub use advanced_constraints::{
42 AmbiguitySet, CVaRConstraint, ChanceConstraint, ChanceConstraintMethod,
43 DistributionallyRobustConstraint, DivergenceType, RobustConstraint, RobustnessApproach,
44 UncertaintySet,
45};
46pub use advanced_projection::{AugmentedLagrangian, DykstraProjection, GradientProjection};
47pub use approximate_satisfaction::{
48 AnytimeSolver, ApproximateSolution, BoundedErrorSolver, HierarchicalConstraint,
49 HierarchicalRelaxation,
50};
51pub use constraint::{
52 AffineEquality, BoundType, ComposedConstraint, Constraint, ConstraintBuilder, ConstraintMode,
53 ConstraintSet, GeometricSet, HysteresisChecker, HysteresisConstraint, LTLChecker, LTLFormula,
54 LTLOperator, LinearConstraint, LinearConstraintSet, LinearConstraintType, LogicalOperator,
55 NonlinearConstraint, NonlinearConstraintType, OnlineSTLMonitor, PenaltyFunction,
56 QuadraticConstraint, QuadraticConstraintSet, QuadraticConstraintType, RateType, STLFormula,
57 STLMonitor, SetMembershipConstraint, Signal, SlidingWindowChecker, SlidingWindowConstraint,
58 SlidingWindowFn, SoftHardConstraint, TemporalChecker, TemporalConstraint,
59 TemporalConstraintBuilder, TimeInterval, ViolationComputable,
60};
61pub use constraint_analysis::{
62 validate_constraint_set, ConsistencyAnalysis, ConstraintConsistencyChecker,
63};
64pub use constraint_propagation::{
65 BacktrackingSearch, DiscreteConstraint, Domain, ForwardChecker, VarId, AC3, CSP,
66};
67pub use constraint_repair::{
68 ConflictResolver, ConstraintRepairer, IISFinder, RepairResult, RepairStrategy,
69};
70pub use constraint_sensitivity::{
71 ConstraintSensitivityAnalyzer, LocalSensitivity, SensitivityAnalysis,
72};
73pub use decomposition::{
74 block_utils, ADMMConfig, BendersConfig, BendersCut, BendersDecomposition,
75 BendersIterationResult, Block, BlockCoordinateDescent, ConsensusADMM, DecompositionError,
76 DecompositionLevel, DecompositionResult, DualDecomposition, HierarchicalDecomposition,
77 Subproblem,
78};
79pub use differential_constraints::{
80 DerivativeConstraint, DerivativeOrder, DifferentialAlgebraicConstraint,
81 DifferentialConstraintSet, IntegralConstraint, PathIntegralConstraint,
82};
83pub use error::{LogicError, LogicResult};
84pub use gpu_acceleration::{GPUConstraintChecker, GPUGradientComputer, GPUProjector};
85pub use guardrail::{Guardrail, GuardrailSet};
86pub use incremental_solver::{
87 ConstraintChange, ConstraintChangeDetector, IncrementalSolver, IncrementalState,
88};
89pub use mpc::{
90 DynamicsModel, LinearDynamics, MPCConfig, MPCController, MPCCost, MPCSolution, QuadraticCost,
91};
92pub use multiobjective::{
93 EpsilonConstraintMethod, HypervolumeIndicator, MultiObjectiveOptimizer, MultiObjectiveSolution,
94 WeightedSumMethod,
95};
96pub use online_learning::{
97 ActiveConstraintBoundaryLearner, AnomalyBasedConstraintDiscovery, FeedbackConstraintTuner,
98 OnlineConstraintLearner, OnlineLearningSystem,
99};
100pub use performance::{
101 AdaptiveConstraintOrder, BatchConstraintChecker, CacheStats, LazyConstraintEvaluator,
102 ParallelConstraintChecker, VectorizedConstraints,
103};
104pub use projection::ConstrainedProjection;
105#[cfg(feature = "qp-solver")]
106pub use qp_solver::QPSolver;
107pub use tensorlogic_integration::{
108 ConstraintLearner, ConstraintSynthesizer, ConstraintTemplate, SymbolicExpr,
109};
110pub use timevarying::{
111 ActivationFunction, ConstraintInterpolator, ConstraintParams, InterpolationMode,
112 ParameterUpdate, PredictiveConstraintAdapter, StateDependentConstraint, TimeVaryingConstraint,
113 TimeVaryingConstraintSet,
114};
115pub use training::{
116 AdaptiveWeighting, BarrierMethod, ConstraintAwareLoss, DifferentiableProjection,
117 LagrangianRelaxation, PenaltyMethod,
118};
119pub use violation_explanation::{
120 CounterfactualAnalyzer, MinimalViolatingSubsetFinder, ViolationAttributionAnalyzer,
121 ViolationExplainer, ViolationExplanation,
122};
123pub use visualization::{
124 ConstraintInspector, ConstraintReport, ConstraintTimeSeries, InspectionResult, ViolationStats,
125};
126
127pub use scirs2_core::ndarray::Array1;
129
130pub trait ConstrainedInference {
132 fn constrain(&self, prediction: &Array1<f32>) -> LogicResult<Array1<f32>>;
134
135 fn validate(&self, prediction: &Array1<f32>) -> bool;
137
138 fn violation_loss(&self, prediction: &Array1<f32>) -> f32;
140}
141
142#[cfg(test)]
143mod tests {
144 use super::*;
145
146 #[test]
147 fn test_constraint_builder() {
148 let constraint = ConstraintBuilder::new()
149 .name("max_velocity")
150 .less_than(10.0)
151 .build();
152
153 assert!(constraint.is_ok());
154 }
155}