pc_rl_core/lib.rs
1// Author: Julian Bolivar
2// Version: 1.0.0
3// Date: 2026-03-25
4
5//! Predictive Coding Actor-Critic framework.
6//!
7//! A publishable reinforcement learning library implementing a novel architecture where the
8//! actor uses iterative top-down/bottom-up predictive coding inference loops instead of
9//! standard feedforward passes, combined with a standard MLP critic for value estimation.
10//!
11//! # Key Components
12//!
13//! - [`PcActor`] — Predictive coding network with variable hidden topology, iterative
14//! inference loop, and surprise scoring.
15//! - [`MlpCritic`] — Standard MLP value function with MSE loss backpropagation.
16//! - [`PcActorCritic`] — Integrated agent: act, learn (episodic/continuous), surprise-based
17//! scheduling, save/load.
18//! - [`serializer`] — JSON weight persistence with checkpointing support.
19
20pub mod activation;
21pub mod error;
22pub mod layer;
23pub mod linalg;
24pub mod matrix;
25pub mod mlp_critic;
26pub mod pc_actor;
27pub mod pc_actor_critic;
28pub mod serializer;
29
30pub use activation::Activation;
31pub use error::PcError;
32pub use layer::{Layer, LayerDef};
33pub use linalg::cpu::CpuLinAlg;
34pub use linalg::LinAlg;
35pub use matrix::{
36 argmax_masked, rms_error, sample_from_probs, softmax_masked, Matrix, GRAD_CLIP, WEIGHT_CLIP,
37};
38pub use mlp_critic::{MlpCritic, MlpCriticConfig, MlpCriticWeights};
39pub use pc_actor::{InferResult, PcActor, PcActorConfig, SelectionMode};
40pub use pc_actor_critic::{PcActorCritic, PcActorCriticConfig, TrajectoryStep};
41pub use serializer::{
42 checkpoint_filename, load_agent, load_agent_generic, save_agent, save_checkpoint,
43 AgentMetadata, PcActorWeights, SaveFile, TrainingMetrics,
44};
45
46/// Type alias: CPU-backed layer.
47pub type LayerCpu = Layer<CpuLinAlg>;
48/// Type alias: CPU-backed PC actor.
49pub type PcActorCpu = PcActor<CpuLinAlg>;
50/// Type alias: CPU-backed MLP critic.
51pub type MlpCriticCpu = MlpCritic<CpuLinAlg>;
52/// Type alias: CPU-backed PC actor-critic agent.
53pub type PcActorCriticCpu = PcActorCritic<CpuLinAlg>;