Files
lucidia-main/human_machine/learning_loop.py
Alexa Amundson 855585cb0e sync: update from blackroad-operator 2026-03-14
Synced from BlackRoad-OS-Inc/blackroad-operator/orgs/personal/lucidia
BlackRoad OS — Pave Tomorrow.

RoadChain-SHA2048: fe729062952871e7
RoadChain-Identity: alexa@sovereign
RoadChain-Full: fe729062952871e77147cf6d938b799096e87d9024d7005a14c9e209e12e8ad0c825b624c7bc649fc7eeb4c284fdcab8231af77980065cc04d9f36fca479ffc2346ed3c1b73de6f240d8f9485f47c995ad5b81142f7179b84932c67914dff1c08db039349ba28fca36cb57688093bf0199268dd1c2f3448c9383000bc77cc9663066ff57b834370afc8838b18466ea9029908018b961555cccaabf2ce21649cf3cabc7f64bdcc4abdf2da259b210c342835a2cecf92bdd3b4e109b4d6e622f6934e13b2b123607bd61ce3d0f20454c9ab594f9284cffe18716619c52db57ce5f4ee2856cb96e1fa3748fe1fe65435bec297c5ab3ab58d570ec1064aea29931dd
2026-03-14 15:09:52 -05:00

60 lines
1.7 KiB
Python

from __future__ import annotations
from dataclasses import dataclass
from typing import Any, Callable, List
@dataclass
class LearningCycle:
"""
Represents a single learning cycle iteration.
Attributes
----------
iteration : int
The iteration number (starting from 1).
state : Any
The state after the update function is applied.
reward : float
The reward computed for this cycle.
"""
iteration: int
state: Any
reward: float
class LearningLoop:
"""
Executes an iterative learning loop with update and reward functions.
"""
def __init__(self, update_fn: Callable[[Any], Any], reward_fn: Callable[[Any], float], max_iter: int = 5) -> None:
self.update_fn = update_fn
self.reward_fn = reward_fn
self.max_iter = max_iter
def run(self, initial_state: Any) -> List[LearningCycle]:
"""
Run the learning loop over a number of iterations.
Parameters
----------
initial_state : Any
The starting state for the learning process.
Returns
-------
List[LearningCycle]
A list of learning cycles capturing state and reward at each step.
"""
cycles: List[LearningCycle] = []
state = initial_state
for i in range(1, self.max_iter + 1):
state = self.update_fn(state)
reward = self.reward_fn(state)
cycles.append(LearningCycle(i, state, reward))
return cycles
if __name__ == "__main__":
# Example usage: increment state and reward as negative distance from target 10
loop = LearningLoop(lambda x: x + 1, lambda x: -abs(10 - x), max_iter=3)
for cycle in loop.run(0):
print(cycle)