Skip to content

Engine Configuration

The CognitiveEngine is the heart of your simulation. This guide covers how to configure it for different research scenarios and performance requirements.

Basic Configuration

SimulationConfig Class

The SimulationConfig class controls all aspects of your simulation:

from cognito_sim_engine import SimulationConfig

config = SimulationConfig(
    max_cycles=100,                    # Maximum simulation cycles
    working_memory_capacity=7,         # Working memory capacity (7±2)
    enable_learning=True,              # Enable learning mechanisms
    enable_metacognition=False,        # Enable metacognitive processes
    enable_metrics=True,               # Collect performance metrics
    step_delay=0.0,                   # Delay between cycles (seconds)
    random_seed=42                     # For reproducible results
)

Advanced Configuration Options

Memory System Configuration

Fine-tune the memory architecture:

config = SimulationConfig(
    # Working Memory
    working_memory_capacity=5,         # Reduce for constrained cognition
    working_memory_decay=0.1,          # How fast items decay

    # Episodic Memory
    episodic_memory_capacity=1000,     # Max episodes to store
    episodic_consolidation_threshold=0.7,  # When to consolidate

    # Long-term Memory
    longterm_memory_capacity=10000,    # Max long-term items
    memory_consolidation_rate=0.05,    # Rate of consolidation

    # Memory interference
    enable_memory_interference=True,   # Realistic memory conflicts
    interference_threshold=0.8         # Similarity threshold
)

Reasoning Configuration

Control the reasoning engine:

config = SimulationConfig(
    # Inference limits
    max_inference_depth=10,            # Maximum reasoning depth
    reasoning_timeout=5.0,             # Max time per reasoning cycle

    # Goal management
    max_active_goals=5,                # Concurrent goals limit
    goal_priority_decay=0.02,          # How goal importance fades

    # Rule application
    max_rule_applications=50,          # Per reasoning cycle
    confidence_threshold=0.5,          # Minimum confidence for facts

    # Uncertainty handling
    enable_uncertainty_reasoning=True,  # Probabilistic reasoning
    uncertainty_propagation=True       # Propagate uncertainty
)

Performance Optimization

For large-scale simulations:

config = SimulationConfig(
    # Computational limits
    max_cycles=1000,                   # Prevent infinite loops
    cycle_timeout=10.0,                # Max time per cycle

    # Memory optimization
    memory_cleanup_interval=100,       # Clean up every N cycles
    garbage_collection_threshold=0.8,  # Memory usage threshold

    # Parallel processing
    enable_parallel_agents=False,      # Parallel agent processing
    max_worker_threads=4,              # Thread pool size

    # Caching
    enable_reasoning_cache=True,       # Cache inference results
    cache_size_limit=1000             # Max cached items
)

Simulation Profiles

Research & Development

For deep exploration and learning:

research_config = SimulationConfig(
    max_cycles=500,
    working_memory_capacity=7,
    enable_learning=True,
    enable_metacognition=True,
    enable_metrics=True,
    step_delay=0.1,                   # Slow for observation
    max_inference_depth=15,           # Deep reasoning
    enable_uncertainty_reasoning=True,
    memory_consolidation_rate=0.03    # Slower consolidation
)

Performance Testing

For speed and efficiency evaluation:

performance_config = SimulationConfig(
    max_cycles=10000,
    working_memory_capacity=5,        # Constrained for speed
    enable_learning=False,            # Disable for consistency
    enable_metacognition=False,       # Reduce overhead
    enable_metrics=True,              # Track performance
    step_delay=0.0,                   # Maximum speed
    max_inference_depth=5,            # Shallow reasoning
    enable_reasoning_cache=True,      # Use caching
    memory_cleanup_interval=50        # Frequent cleanup
)

Educational Demonstration

For teaching and demonstration:

demo_config = SimulationConfig(
    max_cycles=50,
    working_memory_capacity=5,
    enable_learning=True,
    enable_metacognition=True,
    enable_metrics=True,
    step_delay=0.5,                   # Slow for observation
    max_inference_depth=8,
    verbose_logging=True,             # Detailed output
    enable_visualization=True,        # Visual feedback
    save_intermediate_states=True     # For step-by-step analysis
)

Cognitive Science Research

For validating cognitive theories:

cognitive_research_config = SimulationConfig(
    max_cycles=200,
    working_memory_capacity=7,        # Miller's 7±2
    enable_learning=True,
    enable_metacognition=True,
    enable_metrics=True,
    step_delay=0.0,

    # Realistic cognitive constraints
    working_memory_decay=0.15,        # Realistic decay
    episodic_consolidation_threshold=0.8,
    enable_memory_interference=True,

    # Psychological realism
    enable_cognitive_load_tracking=True,
    cognitive_load_limit=1.0,
    attention_focus_decay=0.1,

    # Data collection
    collect_detailed_metrics=True,
    save_memory_traces=True,
    track_reasoning_patterns=True
)

Environment Integration

Connecting Configuration to Environment

from cognito_sim_engine import CognitiveEngine, CognitiveEnvironment

# Create environment
env = CognitiveEnvironment("Research Lab")

# Configure environment based on simulation config
if config.enable_visualization:
    env.enable_visual_display()

if config.enable_metrics:
    env.enable_metric_collection()

# Create engine
engine = CognitiveEngine(config, env)

Dynamic Configuration Updates

Update configuration during simulation:

# Start with basic config
engine = CognitiveEngine(basic_config, env)

# Update during simulation
def on_cycle_complete(cycle_number):
    if cycle_number == 50:
        # Increase learning rate after warm-up
        engine.config.learning_rate *= 1.5

    if cycle_number == 100:
        # Enable metacognition mid-simulation
        engine.config.enable_metacognition = True

engine.add_callback('cycle_complete', on_cycle_complete)

Validation and Testing

Configuration Validation

def validate_config(config):
    """Validate simulation configuration."""
    assert config.max_cycles > 0, "Max cycles must be positive"
    assert 0 < config.working_memory_capacity <= 15, "WM capacity out of range"
    assert 0.0 <= config.learning_rate <= 1.0, "Learning rate out of range"

    # Warn about performance implications
    if config.max_cycles > 10000:
        print("⚠️  Large max_cycles may impact performance")

    if config.enable_metacognition and config.max_cycles > 1000:
        print("⚠️  Metacognition + large cycles = slow simulation")

# Validate before use
validate_config(config)

A/B Testing Configurations

def compare_configurations(config_a, config_b, test_scenario):
    """Compare two configurations on the same scenario."""

    results_a = run_simulation(config_a, test_scenario)
    results_b = run_simulation(config_b, test_scenario)

    comparison = {
        'performance_a': results_a.metrics.cycles_per_second,
        'performance_b': results_b.metrics.cycles_per_second,
        'learning_a': results_a.metrics.learning_progress,
        'learning_b': results_b.metrics.learning_progress,
        'memory_efficiency_a': results_a.metrics.memory_usage,
        'memory_efficiency_b': results_b.metrics.memory_usage
    }

    return comparison

Configuration Recipes

Minimal Configuration

For simple experiments:

minimal_config = SimulationConfig(
    max_cycles=20,
    working_memory_capacity=3,
    enable_learning=False,
    enable_metacognition=False,
    enable_metrics=False
)

Maximum Realism

For human-like cognitive simulation:

realistic_config = SimulationConfig(
    max_cycles=300,
    working_memory_capacity=7,
    working_memory_decay=0.2,
    enable_learning=True,
    enable_metacognition=True,
    enable_memory_interference=True,
    episodic_consolidation_threshold=0.8,
    cognitive_load_limit=1.0,
    enable_uncertainty_reasoning=True,
    attention_focus_decay=0.15,
    goal_priority_decay=0.05
)

High-Performance

For large-scale simulations:

performance_config = SimulationConfig(
    max_cycles=50000,
    working_memory_capacity=5,
    enable_learning=False,
    enable_metacognition=False,
    enable_metrics=True,
    step_delay=0.0,
    max_inference_depth=3,
    enable_reasoning_cache=True,
    memory_cleanup_interval=100,
    enable_parallel_agents=True,
    max_worker_threads=8
)

Best Practices

1. Start Simple

Begin with minimal configuration and add complexity gradually:

# Start here
basic_config = SimulationConfig(max_cycles=10)

# Then add features
enhanced_config = SimulationConfig(
    max_cycles=10,
    enable_learning=True
)

# Finally, full configuration
full_config = SimulationConfig(
    max_cycles=100,
    enable_learning=True,
    enable_metacognition=True,
    enable_metrics=True
)

2. Match Configuration to Research Goals

  • Cognitive modeling: High realism, enable all features
  • Performance testing: Minimal features, high cycles
  • Algorithm development: Medium complexity, detailed metrics
  • Education: Slow speed, visualization enabled

3. Monitor Performance

import time

start_time = time.time()
metrics = engine.run_simulation()
duration = time.time() - start_time

print(f"Simulation time: {duration:.2f}s")
print(f"Cycles per second: {metrics.total_cycles / duration:.1f}")

4. Use Configuration Templates

Create reusable configuration templates:

class ConfigurationTemplates:
    @staticmethod
    def research():
        return SimulationConfig(
            max_cycles=500,
            enable_learning=True,
            enable_metacognition=True,
            enable_metrics=True
        )

    @staticmethod
    def demo():
        return SimulationConfig(
            max_cycles=30,
            step_delay=0.3,
            verbose_logging=True
        )

    @staticmethod
    def performance():
        return SimulationConfig(
            max_cycles=10000,
            enable_learning=False,
            enable_metacognition=False
        )

# Usage
config = ConfigurationTemplates.research()

Troubleshooting

Common Configuration Issues

Slow Performance:

  • Reduce max_inference_depth
  • Disable enable_metacognition
  • Increase memory_cleanup_interval
  • Set step_delay=0.0

Memory Issues:

  • Reduce working_memory_capacity
  • Lower episodic_memory_capacity
  • Enable memory_cleanup_interval
  • Disable detailed metrics

Unrealistic Behavior:

  • Enable enable_memory_interference
  • Set realistic working_memory_decay
  • Add cognitive_load_limit
  • Enable uncertainty_reasoning

Configuration Debugging

def debug_config(config):
    """Print configuration analysis."""
    print("🔧 Configuration Analysis:")
    print(f"   Cycles: {config.max_cycles}")
    print(f"   Memory: {config.working_memory_capacity}")
    print(f"   Learning: {config.enable_learning}")
    print(f"   Metacognition: {config.enable_metacognition}")

    # Estimate performance
    complexity = 1.0
    if config.enable_learning:
        complexity *= 1.5
    if config.enable_metacognition:
        complexity *= 2.0
    complexity *= config.max_inference_depth / 5.0

    print(f"   Estimated complexity: {complexity:.1f}x baseline")

    if complexity > 5.0:
        print("   ⚠️  High complexity - consider optimization")

debug_config(your_config)

This configuration guide should help you tune the Cognito Simulation Engine for your specific research needs and performance requirements.