# Behavioral Biology ## Overview Behavioral biology investigates animal behavior through the lens of active inference and the free energy principle, revealing how organisms actively minimize uncertainty about their environment while maintaining adaptive behavioral patterns through perception, action, and learning. ## Mathematical Framework ### 1. Behavioral Dynamics Basic equations of behavioral control: ```math \begin{aligned} & \text{Action Selection:} \\ & a^* = \argmin_a \mathbb{E}_{q(s|o)}[F(s,a)] \\ & \text{State Estimation:} \\ & \dot{\mu} = -\nabla_\mu F(\mu) \\ & \text{Policy Selection:} \\ & \pi^* = \argmin_\pi \mathbb{E}_\pi[G(\pi)] \end{aligned} ``` ### 2. Learning and Adaptation Learning dynamics through free energy minimization: ```math \begin{aligned} & \text{Value Learning:} \\ & \dot{V} = \alpha(r + \gamma\max_{a'}Q(s',a') - Q(s,a)) \\ & \text{Model Learning:} \\ & \dot{\theta} = -\eta\nabla_\theta F \\ & \text{Habit Formation:} \\ & \dot{H} = \beta(Q(s,a) - H(s,a)) \end{aligned} ``` ### 3. Social Behavior Social interaction and collective dynamics: ```math \begin{aligned} & \text{Social Free Energy:} \\ & F_s = \sum_i F_i + \sum_{i,j} I_{ij} \\ & \text{Collective Behavior:} \\ & \frac{d\mathbf{x}_i}{dt} = \sum_j \alpha_{ij}(\mathbf{x}_j - \mathbf{x}_i) - \nabla_{\mathbf{x}_i}F_s \\ & \text{Social Learning:} \\ & \dot{\theta}_i = -\eta\sum_j w_{ij}\nabla_{\theta_i}F_{ij} \end{aligned} ``` ## Implementation Framework ### 1. Behavioral Simulator ```python class BehavioralDynamics: """Simulates animal behavior using active inference""" def __init__(self, behavioral_params: Dict[str, float], learning_params: Dict[str, float], inference_params: Dict[str, float]): self.behavior = behavioral_params self.learning = learning_params self.inference = inference_params self.initialize_system() def simulate_behavior(self, initial_state: Dict, environment: Dict, time_span: float, dt: float) -> Dict: """Simulate behavioral dynamics""" # Initialize state variables state = initial_state.copy() free_energy = [] actions = [] # Time evolution for t in np.arange(0, time_span, dt): # Compute free energy F = self.compute_free_energy(state) # State estimation dmu = self.compute_state_estimation(state, F) state['beliefs'] += dmu * dt # Action selection action = self.select_action(state) # Environmental interaction state = self.update_environment_interaction( state, action, environment) # Learning update state = self.update_learning(state, action) # Store trajectories free_energy.append(F) actions.append(action) return { 'states': state, 'actions': actions, 'free_energy': free_energy } def compute_free_energy(self, state: Dict) -> float: """Compute variational free energy""" # Energy term E = self.compute_energy(state) # Entropy term S = self.compute_entropy(state) # Prior term P = self.compute_prior(state) # Free energy F = E - S + P return F ``` ### 2. Learning Simulator ```python class LearningDynamics: """Simulates learning and adaptation""" def __init__(self): self.value = ValueLearning() self.model = ModelLearning() self.habits = HabitFormation() def simulate_learning(self, initial_state: Dict, environment: Dict, time_span: float) -> Dict: """Simulate learning dynamics""" # Initialize components self.value.setup(initial_state['value']) self.model.setup(initial_state['model']) self.habits.setup(initial_state['habits']) # Time evolution states = [] current_state = initial_state while not self.learning_converged(): # Value learning value_state = self.value.update( current_state, environment) # Model learning model_state = self.model.update( value_state) # Habit formation habit_state = self.habits.update( model_state) # Update state through free energy minimization current_state = self.minimize_free_energy( value_state, model_state, habit_state) states.append(current_state) return states ``` ### 3. Social Behavior Analyzer ```python class SocialBehavior: """Analyzes social behavior and collective dynamics""" def __init__(self): self.individual = IndividualBehavior() self.collective = CollectiveDynamics() self.social = SocialLearning() def analyze_social_behavior(self, agents: List[Agent], interactions: Graph, environment: Dict) -> Dict: """Analyze social behavior""" # Individual analysis individual = self.individual.analyze( agents, environment) # Collective analysis collective = self.collective.analyze( agents, interactions) # Social learning learning = self.social.analyze( agents, interactions, environment) return { 'individual': individual, 'collective': collective, 'learning': learning } ``` ## Advanced Concepts ### 1. Decision Making ```math \begin{aligned} & \text{Expected Free Energy:} \\ & G(\pi) = \mathbb{E}_{q(o,s|\pi)}[\ln q(s|\pi) - \ln p(o,s|\pi)] \\ & \text{Choice Probability:} \\ & P(a|s) = \sigma(-\beta G(a,s)) \\ & \text{Information Gain:} \\ & I(o;s|\pi) = H[q(s|\pi)] - \mathbb{E}_{q(o|\pi)}[H[q(s|o,\pi)]] \end{aligned} ``` ### 2. Behavioral Control ```math \begin{aligned} & \text{Motor Control:} \\ & \ddot{x} = f(x,\dot{x}) - \nabla_x V(x) \\ & \text{Optimal Control:} \\ & J^* = \min_u \int_0^T L(x,u)dt \\ & \text{Hierarchical Control:} \\ & \dot{\mu}_l = -\nabla_{\mu_l}F_l + \frac{\partial F_{l+1}}{\partial \mu_l} \end{aligned} ``` ### 3. Social Cognition ```math \begin{aligned} & \text{Theory of Mind:} \\ & q_i(s_j) = \argmin_{q_i} F_i[q_i(s_j)] \\ & \text{Joint Action:} \\ & \pi^*_{ij} = \argmin_{\pi_{ij}} (G_i(\pi_{ij}) + G_j(\pi_{ij})) \\ & \text{Social Inference:} \\ & p(s_j|o_i) \propto p(o_i|s_j)p(s_j) \end{aligned} ``` ## Applications ### 1. Behavioral Ecology - Foraging strategies and optimal resource allocation - Territorial behavior and spatial cognition - Mating systems and reproductive decision-making ### 2. Comparative Psychology - Learning mechanisms and memory systems - Social cognition and theory of mind - Decision making under uncertainty ### 3. Behavioral Neuroscience - Neural control of behavior - Sensorimotor integration and coordination - Behavioral plasticity and adaptation ## Agent Architecture Applications ### Active Inference Agents ```python class BehavioralActiveInferenceAgent: """Agent implementing behavioral biology principles""" def __init__(self, behavioral_params: Dict[str, float]): self.behavioral_model = BehavioralDynamics(behavioral_params) self.inference_engine = ActiveInferenceEngine() self.learning_system = BehavioralLearning() # Behavioral state variables self.internal_state = {} self.environmental_beliefs = {} self.action_policies = {} def behavioral_inference_cycle(self, observations: np.ndarray) -> Dict: """Complete behavioral inference cycle""" # Update internal state beliefs self.internal_state = self.inference_engine.update_beliefs( observations, self.internal_state ) # Compute expected free energy for behavioral policies policy_free_energies = {} for policy in self.action_policies: G = self.compute_policy_free_energy(policy) policy_free_energies[policy] = G # Select optimal behavioral policy optimal_policy = min(policy_free_energies, key=policy_free_energies.get) # Execute behavioral action action = self.execute_behavioral_policy(optimal_policy) # Learn from behavioral outcomes self.learning_system.update_model(action, observations) return { 'action': action, 'free_energy': policy_free_energies[optimal_policy], 'beliefs': self.internal_state } def compute_policy_free_energy(self, policy: Dict) -> float: """Compute expected free energy for behavioral policy""" # Risk term risk = self.compute_epistemic_risk(policy) # Ambiguity term ambiguity = self.compute_epistemic_ambiguity(policy) # Extrinsic value extrinsic = self.compute_extrinsic_value(policy) return risk + ambiguity - extrinsic ``` ### Social Behavior Modeling ```python class SocialBehavioralAgent: """Agent modeling social behavioral dynamics""" def __init__(self, social_params: Dict[str, float]): self.social_model = SocialBehaviorModel(social_params) self.communication = SocialCommunication() self.coordination = BehavioralCoordination() def social_inference(self, social_signals: Dict, group_state: Dict) -> Dict: """Perform social behavioral inference""" # Infer others' intentions and beliefs inferred_states = self.social_model.infer_social_states( social_signals, group_state ) # Compute social free energy social_G = self.compute_social_free_energy( inferred_states, group_state ) # Generate appropriate social response response = self.coordination.generate_social_response( social_G, inferred_states ) return { 'response': response, 'inferred_states': inferred_states, 'social_free_energy': social_G } ``` ### Learning and Adaptation ```python class BehavioralLearningAgent: """Agent with behavioral learning capabilities""" def __init__(self): self.value_learning = BehavioralValueLearning() self.policy_learning = BehavioralPolicyLearning() self.model_learning = BehavioralModelLearning() def learn_behavioral_patterns(self, behavioral_history: List[Dict]) -> Dict: """Learn from behavioral experience""" # Value learning values = self.value_learning.update_values(behavioral_history) # Policy learning policies = self.policy_learning.update_policies( behavioral_history, values ) # Model learning models = self.model_learning.update_models( behavioral_history, policies ) return { 'values': values, 'policies': policies, 'models': models } ``` ## Advanced Mathematical Extensions ### 1. Information Theory ```math \begin{aligned} & \text{Behavioral Complexity:} \\ & C = I(S;A) \\ & \text{Predictive Information:} \\ & I_{pred} = I(X_{past};X_{future}) \\ & \text{Social Information:} \\ & I_{social} = I(S_i;S_j|O) \end{aligned} ``` ### 2. Dynamical Systems ```math \begin{aligned} & \text{Behavioral Attractor:} \\ & \dot{x} = f(x) - \nabla V(x) \\ & \text{Phase Transition:} \\ & \dot{\phi} = -\frac{\partial F}{\partial \phi} \\ & \text{Stability Analysis:} \\ & \lambda = \text{eig}(\nabla f(x^*)) \end{aligned} ``` ### 3. Game Theory ```math \begin{aligned} & \text{Nash Equilibrium:} \\ & u_i(s_i^*,s_{-i}^*) \geq u_i(s_i,s_{-i}^*) \\ & \text{Evolutionary Stability:} \\ & f(x^*,x^*) > f(x,x^*) \\ & \text{Learning Dynamics:} \\ & \dot{x}_i = x_i(f_i(x) - \bar{f}(x)) \end{aligned} ``` ## Implementation Considerations ### 1. Numerical Methods - Stochastic simulation - Optimal control - Network analysis ### 2. Data Analysis - Behavioral tracking - Time series analysis - Social network analysis ### 3. Experimental Design - Behavioral assays - Social experiments - Learning paradigms ## Cross-References ### Related Biological Concepts - [[neuroscience|Neuroscience]] - Neural basis of behavior - [[evolutionary_dynamics|Evolutionary Dynamics]] - Evolutionary behavioral adaptations - [[developmental_systems|Developmental Systems]] - Behavioral development - [[apidology|Apidology]] - Social insect behavior - [[myrmecology|Myrmecology]] - Ant social behavior ### Cognitive Science Connections - [[knowledge_base/cognitive/active_inference|Active Inference]] - Theoretical framework - [[knowledge_base/cognitive/decision_making|Decision Making]] - Choice behavior - [[knowledge_base/cognitive/learning_theory|Learning Theory]] - Behavioral learning - [[knowledge_base/cognitive/social_cognition|Social Cognition]] - Social behavior ### Agent Architecture Applications - [[code/Things/Ant_Colony/README|Ant Colony Social Behavior]] - [[code/Things/BioFirm/README|BioFirm Behavioral Models]] - [[docs/examples|Behavioral Agent Examples]] ## References ### Foundational Texts - [[krebs_2009]] - "Behavioral Ecology: An Evolutionary Approach" - [[alcock_2013]] - "Animal Behavior: An Evolutionary Approach" - [[tinbergen_1963]] - "The Study of Instinct" ### Theoretical Frameworks - [[dayan_2001]] - "Theoretical Neuroscience" - [[friston_2019]] - "A Free Energy Principle for a Particular Physics" - [[sutton_2018]] - "Reinforcement Learning: An Introduction" ### Active Inference Applications - [[parr_2022]] - "Active Inference: The Free Energy Principle in Mind, Brain, and Behavior" - [[buckley_2017]] - "The Free Energy Principle for Action and Perception" - [[friston_2017]] - "Active Inference and Learning" ## See Also - [[active_inference]] - [[free_energy_principle]] - [[neuroscience]] - [[cognitive_science]] - [[evolutionary_dynamics]] - [[knowledge_base/agents/architectures_overview]]