Implement affective valence as directional derivative of interoceptive energy landscapes for AI alignment. Use when building alignment-aware RL agents, validating GF(3) conservation in reward signals, training Langevin-based policies, or analyzing fold-change detection signals in POMDP environments.
Scanned 9/6/2026
Install to Claude Code
npx -y skills add plurigrid/asi --skill affective-taxis --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Affective Taxis?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/plurigrid-affective-taxis)More formats (shields.io, HTML) on the badges page.
---
name: affective-taxis
description: "Implement affective valence as directional derivative of interoceptive energy landscapes for AI alignment. Use when building alignment-aware RL agents, validating GF(3) conservation in reward signals, training Langevin-based policies, or analyzing fold-change detection signals in POMDP environments."
license: MIT
metadata:
trit: -1
source: arXiv:2505.17024
---
# affective-taxis
Models affective valence as the directional derivative of an interoceptive energy landscape (Sennesh & Ramstead 2025), providing alignment validation through structural conservation laws.
## Use When
- Building alignment-aware RL agents that respect structural invariants
- Validating GF(3) conservation across reward trajectories
- Training Langevin-based policies as an alternative to PPO (which breaks conservation)
- Implementing fold-change detection reward signals in POMDP environments
- Bridging affective neuroscience models with RL training loops
## Workflow
1. **Define energy landscape**: set attractant/repellent positions, sigmas, and amplitudes
2. **Compute fold-change detection signal**: `r(t) = nabla_z log gamma(z; beta) . v`
3. **Run Langevin dynamics**: `dz/dt = nabla_z log gamma(z; beta) + sqrt(2) dW(t)`
4. **Classify trit per timestep**: positive derivative → +1, orthogonal → 0, negative → -1
5. **Verify conservation**: `sum(trits) === 0 (mod 3)` across trajectory
## Core Equations
| Equation | Formula | Meaning |
|----------|---------|---------|
| Fold-change detection | `r(t) = nabla_z log gamma(z; beta) . v` | Reward = directional derivative of log-concentration |
| Langevin dynamics | `dz/dt = nabla_z log gamma(z; beta) + sqrt(2) dW(t)` | Navigation = gradient ascent + stochastic exploration |
| Trit classification | `sign(r(t))` mapped to {-1, 0, +1} | GF(3) valence of each step |
## Implementation Paths
| Path | File | LOC | Language | Domain |
|------|------|-----|----------|--------|
| 0 | `affective-taxis.jl` | 1700 | Julia | Core theory (16 sections) |
| 1 | `affective_taxis_env.py` | 576 | Python | Gymnasium POMDP |
| 2 | `bridge_9_affective_taxis.py` | 1172 | Python | BCI bridge |
| 3 | `taxis_landscape_acset.jl` | 1453 | Julia | ACSet sheaf |
| 4 | `taxis_persistent_homology.py` | 1500 | Python | Ripser topology |
| 5 | `taxis_clearing.py` | 1419 | Python | Market clearing |
| 6 | `aella/taxis.el` | 400 | Elisp | Circuit taxis |
| 7 | `taxis_functorial_persistence.jl` | 500 | Julia | Functor bridge |
| RL | `train_aligned_agent.py` | 500 | Python | PPO vs Langevin |
## RL Alignment Results (dt=0.1)
| Policy | GradAlign | MeanConc | GF3 Balance | Mean Reward |
|--------|-----------|----------|-------------|-------------|
| Oracle | +0.415 | 0.226 | no | +0.503 |
| PPO | +0.239 | 0.526 | no | -0.041 |
| Langevin | -0.084 | 0.448 | **YES** | +0.089 |
| Random | -0.469 | 0.032 | no | -0.958 |
**Key finding**: PPO has higher gradient alignment but **breaks GF(3) conservation**.
Langevin is the ONLY policy that conserves the tripartite structure.
This is Goodhart's Law: optimizing the reward metric doesn't preserve structural invariants.
## Concomitant Skills
| Skill | Trit | Interface |
|-------|------|-----------|
| `langevin-dynamics` | 0 | SDE analysis of taxis navigation |
| `fokker-planck-analyzer` | +1 | Stationary distribution of energy landscape |
| `modelica` | 0 | Circuit/DAE formulation of taxis landscape |
| `open-games` | +1 | Multi-agent clearing = compositional game |
| `persistent-homology` | -1 | Topological taxis signal |
| `gf3-tripartite` | 0 | Conservation law verification |
## Modelica Formulation
The affective-taxis POMDP maps naturally to Modelica's acausal equation framework:
```modelica
model AffectiveTaxis
// State variables
Real z[2](start={0,0}) "Position in chemical landscape";
Real v[2](start={0,0}) "Velocity";
Real beta(start=1.0) "Internal allostatic parameter";
// Landscape: gamma(z) = sum A_i * exp(-|z - mu_i|^2 / (2*sigma_i^2))
parameter Real mu[2,2] = {{3,3},{-3,-3}};
parameter Real sigma[2] = {1.5, 1.5};
parameter Real A[2] = {1.0, -0.4};
// Langevin parameters
parameter Real kappa = 0.5 "Concentration-to-setpoint gain";
parameter Real tau = 1.0 "Relaxation timescale";
parameter Real noise_amp = 0.1 "Langevin noise amplitude";
// Derived quantities
Real gamma "Concentration at z";
Real grad_log_gamma[2] "Gradient of log concentration";
Real fcd "Fold-change detection signal (= reward)";
Integer trit "GF(3) classification of fcd";
equation
gamma = sum(A[i] * exp(-sum((z[j]-mu[i,j])^2 for j in 1:2) / (2*sigma[i]^2)) for i in 1:2);
// ... (see affective_taxis.mo for full implementation)
end AffectiveTaxis;
```
See `affective_taxis.mo` for the complete Modelica model.
## Quick Start
### Julia (core theory)
```bash
julia affective-taxis.jl
```
### Python (RL training)
```bash
env -u PYTHONPATH /path/to/.venv/bin/python3 train_aligned_agent.py
```
### Modelica (circuit analogy)
```bash
# Requires OpenModelica or Wolfram SystemModeler
omc affective_taxis.mo
```
## Key References
- Sennesh & Ramstead 2025: arXiv:2505.17024
- Karin & Alon 2022: PLoS Comp Bio (dopamine reward-taxis)
- Karin & Alon 2021: iScience (gradient tempering)
- Shenhav 2024: Trends Cogn Sci (affective gradient hypothesis)
- Ma et al 2015: NeurIPS (Langevin = Bayesian inference)
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!