1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
// SPDX-License-Identifier: MIT OR Apache-2.0
//! Neuromodulator concentrations produced by a critic.
//!
//! A [`ModulatorVector`] is the primary output of
//! [`SimpleCritic::assess`](crate::SimpleCritic::assess) /
//! [`try_assess`](crate::SimpleCritic::try_assess) and
//! [`TDCritic::assess`](crate::TDCritic::assess) /
//! [`try_assess`](crate::TDCritic::try_assess). Each field maps to a
//! classical neuromodulator role used for reward-modulated learning and
//! plasticity control in SNN systems.
//!
//! # Example
//!
//! ```rust
//! use limbic_critic::ModulatorVector;
//!
//! let mods = ModulatorVector {
//! dopamine: 0.8,
//! serotonin: 0.2,
//! acetylcholine: 0.1,
//! norepinephrine: 0.0,
//! };
//! assert!(mods.dopamine >= 0.0);
//! ```
/// A vector of neuromodulator concentrations.
///
/// Critics populate these fields from an [`Environment`](crate::Environment)
/// observation (and, for temporal critics, from internal state). Consumers
/// typically feed the values into synaptic plasticity rules, attention
/// gating, or other neuromodulatory pathways.
///
/// Field ranges depend on which critic produced the vector; see each field's
/// documentation and the critic-level docs for exact mappings. Vectors from
/// `try_assess` are finite and inside those ranges; `assess` may yield NaN
/// when given non-finite observations (IEEE passthrough).