Update adaptation.py

This commit is contained in:
blackboxprogramming
2025-08-08 14:10:48 -07:00
committed by GitHub
parent 5c45ce018a
commit f492af7715

View File

@@ -1 +1,81 @@
print("Hello World")
from __future__ import annotations
from dataclasses import dataclass
from typing import Callable, Any, List
@dataclass
class AdaptationRule:
"""Represents a single adaptation rule for human-machine interaction.
Attributes
----------
condition : Callable[[Any], bool]
A predicate that determines whether the rule should fire for a given state.
action : Callable[[Any], Any]
A transformation to apply when the condition is met.
description : str
Human-friendly summary of the rule's purpose.
"""
condition: Callable[[Any], bool]
action: Callable[[Any], Any]
description: str = ""
class AdaptiveSystem:
"""
Framework for applying adaptation rules based on conditions.
This simple system iterates through registered rules and applies the
action for the first rule whose condition is true. If no rule
matches, it returns the state unchanged.
"""
def __init__(self) -> None:
self.rules: List[AdaptationRule] = []
def add_rule(self, rule: AdaptationRule) -> None:
"""Register a new adaptation rule."""
self.rules.append(rule)
def adapt(self, state: Any) -> Any:
"""
Apply the first matching adaptation rule to the given state.
Parameters
----------
state : Any
The current state or input value to adapt.
Returns
-------
Any
The adapted state if a rule matched, otherwise the original state.
"""
for rule in self.rules:
if rule.condition(state):
return rule.action(state)
return state
if __name__ == "__main__":
# Example: adapt temperature values to a comfortable range
adapt_sys = AdaptiveSystem()
def too_cold(x: float) -> bool:
return x < 20
def warm_action(x: float) -> float:
return x + 5
def too_hot(x: float) -> bool:
return x > 25
def cool_action(x: float) -> float:
return x - 5
adapt_sys.add_rule(AdaptationRule(too_cold, warm_action, "Warm up if too cold"))
adapt_sys.add_rule(AdaptationRule(too_hot, cool_action, "Cool down if too hot"))
temps = [18.0, 22.0, 28.0]
for t in temps:
print(f"{t} -> {adapt_sys.adapt(t)}")