Skip to main content

converge_optimization/
lib.rs

1//! # converge-optimization
2//!
3//! Optimization solvers as first-class Suggestors for the Converge Engine.
4//!
5//! Every solver is accessed through [`PackSuggestor`] -- the ONLY public
6//! interface. Register it in a formation and let it converge alongside
7//! LLM agents, policy gates, and other Suggestors.
8//!
9//! ## Usage
10//!
11//! ```rust,ignore
12//! use converge_pack::{PackSuggestor, ContextKey};
13//! use converge_optimization::packs::budget_allocation::BudgetAllocationPack;
14//!
15//! let solver = PackSuggestor::new(
16//!     BudgetAllocationPack,
17//!     ContextKey::Seeds,
18//!     ContextKey::Strategies,
19//! );
20//! engine.register_suggestor(solver);
21//! ```
22//!
23//! ## Available Packs (11)
24//!
25//! LeadRouting, MeetingScheduler, BudgetAllocation, CapacityPlanning,
26//! InventoryReplenishment, InventoryRebalancing, AnomalyTriage,
27//! PricingGuardrails, ShippingChoice, VendorShortlist, BacklogPrioritization
28//!
29//! ## Feature Flags
30//!
31//! - `sat` - Varisat SAT solver for constraint programming
32//! - `ffi` - OR-Tools C++ FFI bindings
33//! - `full` - All features
34
35// ── Public API: Pack types re-exported from converge-pack ────────────
36
37pub mod packs;
38
39pub use converge_pack::{Pack, PackSolveResult, PackSuggestor};
40
41/// Extension trait for `SolveBudgets` that bridges to optimization-specific `SolverParams`.
42pub trait SolveBudgetsExt {
43    /// Convert to SolverParams for existing solvers
44    fn to_solver_params(&self, seed: u64) -> SolverParams;
45}
46
47impl SolveBudgetsExt for converge_pack::SolveBudgets {
48    fn to_solver_params(&self, seed: u64) -> SolverParams {
49        SolverParams {
50            time_limit_seconds: self.time_limit.as_secs_f64(),
51            iteration_limit: self.iteration_limit,
52            num_threads: 0,
53            random_seed: seed,
54            verbosity: 0,
55        }
56    }
57}
58
59// ── Algorithm implementations (used by Packs) ────────────────────────
60
61pub mod assignment;
62pub mod graph;
63pub mod knapsack;
64pub mod provider;
65pub mod scheduling;
66pub mod setcover;
67
68#[cfg(feature = "sat")]
69pub mod cp;
70
71mod error;
72mod types;
73
74pub use error::{Error, Result};
75pub use types::*;