Configuration‐Reference - adylagad/CSCI-561_Genetic-Algorithm GitHub Wiki

Configuration Reference

Complete reference for all configuration options.

📋 Overview

The GA can be configured via:

  1. JSON file - config/default_config.json
  2. Python code - GAConfig dataclass
  3. Command line - (future feature)

⚙️ Configuration Class

from dataclasses import dataclass

@dataclass
class GAConfig:
    """Genetic Algorithm Configuration."""

    # Population parameters
    population_size_multiplier: float = 1.0

    # Evolution parameters
    mutation_rate: float = 0.02
    number_of_generations: int = 3500
    convergence_threshold: int = 500

    # I/O parameters
    input_file: str = "input/input1.txt"
    output_dir: str = "output"

    # Logging parameters
    log_level: str = "INFO"
    verbose: bool = True
    log_interval: int = 100

📖 Parameter Reference

Population Parameters

population_size_multiplier

Type: float
Default: 1.0
Range: 0.1 - 5.0
Formula: population_size = multiplier × number_of_cities

Description: Controls population size relative to problem size.

Effects:

Value Population (500 cities) Speed Quality Memory
0.5 250 Fast Lower Low
1.0 ✅ 500 Medium Good Medium
2.0 1000 Slow Better High
3.0 1500 Very Slow Best Very High

Examples:

# Small, fast population
config = GAConfig(population_size_multiplier=0.5)

# Standard (recommended)
config = GAConfig(population_size_multiplier=1.0)

# Large, thorough search
config = GAConfig(population_size_multiplier=2.0)

When to adjust:

  • Increase if stuck in local optima
  • Decrease for faster experimentation
  • Keep default for most cases

Evolution Parameters

mutation_rate

Type: float
Default: 0.02 (2%)
Range: 0.0 - 1.0
Unit: Probability (0.02 = 2% chance)

Description: Probability of mutation for each individual.

Effects:

Rate Exploration Stability Convergence Best For
0.01 Low High Fast Fine-tuning
0.02 ✅ Balanced Good Balanced General use
0.05 Medium Medium Medium More diversity
0.10 High Low Slow Escaping optima
0.20+ Very High Poor Very Slow Debugging only

Examples:

# Conservative (less exploration)
config = GAConfig(mutation_rate=0.01)

# Standard (recommended)
config = GAConfig(mutation_rate=0.02)

# Aggressive (more exploration)
config = GAConfig(mutation_rate=0.10)

Formula:

expected_mutations_per_generation = population_size × mutation_rate

For default (500 pop × 0.02):
≈ 10 individuals mutated per generation

When to adjust:

  • Increase if not converging or stuck
  • Decrease if too chaotic
  • Keep 0.02-0.05 for most cases

number_of_generations

Type: int
Default: 3500
Range: 100 - 50000
Unit: Number of evolution cycles

Description: Maximum number of generations to run.

Recommendations:

Problem Size Minimum Recommended Maximum
<100 cities 500 1000 3000
100-500 cities 1500 3500 ✅ 10000
500-1000 cities 3000 7000 20000
1000+ cities 5000 10000+ 50000

Examples:

# Quick test
config = GAConfig(number_of_generations=1000)

# Standard run
config = GAConfig(number_of_generations=3500)

# Thorough search
config = GAConfig(number_of_generations=10000)

Runtime impact:

Approximate runtime = (generations / 3500) × 3 minutes

1000 gen  → ~1 min
3500 gen  → ~3 min
10000 gen → ~9 min

When to adjust:

  • Increase for better quality
  • Decrease for faster testing
  • Consider convergence_threshold instead

convergence_threshold

Type: int
Default: 500
Range: 50 - 2000
Unit: Number of generations without improvement

Description: Stop if no improvement for N generations.

Effects:

Threshold Behavior Runtime Quality
100 Impatient Shortest May miss improvements
500 ✅ Balanced Medium Good
1000 Patient Longer Thorough
2000+ Very Patient Longest Best

Examples:

# Stop quickly if plateaued
config = GAConfig(convergence_threshold=100)

# Balanced (recommended)
config = GAConfig(convergence_threshold=500)

# Wait longer for improvements
config = GAConfig(convergence_threshold=1000)

Rule of thumb:

convergence_threshold = 0.1 to 0.3 × number_of_generations

For 3500 generations:
  Minimum: 350
  Recommended: 500 ✅
  Maximum: 1050

When to adjust:

  • Increase if stopping too early
  • Decrease if wasting time
  • Monitor convergence_generation in results

I/O Parameters

input_file

Type: str
Default: "input/input1.txt"
Format: Path to TSP input file

Description: Path to file containing city coordinates.

File format:

<number_of_cities>
<x1> <y1> <z1>
<x2> <y2> <z2>
...

Examples:

# Default input
config = GAConfig(input_file="input/input1.txt")

# Custom input
config = GAConfig(input_file="data/my_cities.txt")

# Absolute path
config = GAConfig(input_file="/path/to/cities.txt")

output_dir

Type: str
Default: "output"
Format: Directory path

Description: Directory for output files (future feature).

Examples:

# Default
config = GAConfig(output_dir="output")

# Custom directory
config = GAConfig(output_dir="results/run_001")

Note: Currently outputs to console. Directory for future file outputs.


Logging Parameters

log_level

Type: str
Default: "INFO"
Options: "DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"

Description: Python logging level.

Levels:

Level What You See Use Case
DEBUG Everything Development, debugging
INFO ✅ Important events Normal use
WARNING Issues only Production
ERROR Errors only Silent mode

Examples:

# Verbose (development)
config = GAConfig(log_level="DEBUG")

# Normal (recommended)
config = GAConfig(log_level="INFO")

# Quiet (production)
config = GAConfig(log_level="WARNING")

Output examples:

# DEBUG level:
2025-11-03 10:15:23 - DEBUG - Reading input from: input/input1.txt
2025-11-03 10:15:23 - DEBUG - Loaded 500 cities
2025-11-03 10:15:23 - DEBUG - Initializing population...
2025-11-03 10:15:25 - DEBUG - Generation 0: Best = 62308.19
...

# INFO level (recommended):
2025-11-03 10:15:23 - INFO - Starting Genetic Algorithm...
2025-11-03 10:15:25 - INFO - Generation 0: Best = 62308.19
2025-11-03 10:15:27 - INFO - Generation 100: Best = 55432.12
...

# WARNING level (quiet):
(Only shows warnings/errors)

verbose

Type: bool
Default: True
Options: True, False

Description: Enable verbose output.

Examples:

# Detailed output (recommended)
config = GAConfig(verbose=True)

# Minimal output
config = GAConfig(verbose=False)

Impact:

# verbose=True:
Generation 0: Best Fitness = 0.000016, Best Cost = 62308.19
Generation 100: Best Fitness = 0.000018, Best Cost = 55432.12
...

# verbose=False:
(Less frequent updates)

log_interval

Type: int
Default: 100
Range: 1 - 1000
Unit: Generations

Description: Log progress every N generations.

Examples:

# Frequent updates
config = GAConfig(log_interval=10)  # Every 10 generations

# Standard (recommended)
config = GAConfig(log_interval=100)  # Every 100 generations

# Infrequent updates
config = GAConfig(log_interval=500)  # Every 500 generations

Trade-offs:

Interval Updates Performance Best For
10 Many Slower Monitoring closely
100 ✅ Balanced Minimal impact Normal use
500 Few Fastest Long runs

🔧 Configuration Methods

Method 1: Default Configuration

from config.config import GAConfig

# Use all defaults
config = GAConfig()

Method 2: Partial Override

# Override specific parameters
config = GAConfig(
    mutation_rate=0.05,
    number_of_generations=5000
)
# All other parameters use defaults

Method 3: JSON File

Create config/my_config.json:

{
	"mutation_rate": 0.05,
	"number_of_generations": 5000,
	"convergence_threshold": 800,
	"population_size_multiplier": 1.5,
	"log_level": "DEBUG",
	"verbose": true,
	"log_interval": 50
}

Load in Python:

config = GAConfig.from_json("config/my_config.json")

Method 4: Programmatic

# Create config programmatically
def create_quick_config():
    return GAConfig(
        population_size_multiplier=0.5,
        number_of_generations=1000,
        convergence_threshold=100,
        mutation_rate=0.05
    )

def create_quality_config():
    return GAConfig(
        population_size_multiplier=2.0,
        number_of_generations=10000,
        convergence_threshold=1000,
        mutation_rate=0.03
    )

# Use
config = create_quick_config()

📊 Configuration Presets

Preset 1: Quick Test

Purpose: Fast testing during development

quick_config = GAConfig(
    population_size_multiplier=0.5,
    number_of_generations=1000,
    convergence_threshold=100,
    mutation_rate=0.05,
    log_level="INFO",
    log_interval=50
)

Expected: ~1 minute, decent quality

Preset 2: Balanced (Default)

Purpose: Good quality in reasonable time

balanced_config = GAConfig(
    population_size_multiplier=1.0,
    number_of_generations=3500,
    convergence_threshold=500,
    mutation_rate=0.02,
    log_level="INFO",
    log_interval=100
)

Expected: ~3-5 minutes, good quality ✅

Preset 3: High Quality

Purpose: Best possible solution

quality_config = GAConfig(
    population_size_multiplier=2.0,
    number_of_generations=10000,
    convergence_threshold=1000,
    mutation_rate=0.03,
    log_level="INFO",
    log_interval=200
)

Expected: ~15-20 minutes, excellent quality

Preset 4: Debug

Purpose: Detailed logging for debugging

debug_config = GAConfig(
    population_size_multiplier=1.0,
    number_of_generations=3500,
    convergence_threshold=500,
    mutation_rate=0.02,
    log_level="DEBUG",
    verbose=True,
    log_interval=10
)

Expected: Verbose output, same runtime


🎯 Configuration Guidelines

For Different Problem Sizes

Small (< 100 cities):

config = GAConfig(
    population_size_multiplier=1.5,
    number_of_generations=1500,
    convergence_threshold=300
)

Medium (100-500 cities):

config = GAConfig(
    population_size_multiplier=1.0,
    number_of_generations=3500,
    convergence_threshold=500
)

Large (500-1000 cities):

config = GAConfig(
    population_size_multiplier=1.5,
    number_of_generations=7000,
    convergence_threshold=1000
)

Very Large (1000+ cities):

config = GAConfig(
    population_size_multiplier=2.0,
    number_of_generations=15000,
    convergence_threshold=2000
)

For Different Goals

Goal: Fast Results

config = GAConfig(
    number_of_generations=1000,
    convergence_threshold=100
)

Goal: Best Quality

config = GAConfig(
    population_size_multiplier=2.0,
    number_of_generations=10000,
    convergence_threshold=1000
)

Goal: Escape Local Optima

config = GAConfig(
    mutation_rate=0.08,
    population_size_multiplier=1.5
)

📚 Further Reading


Need help tuning?Performance Tuning Guide

⚠️ **GitHub.com Fallback** ⚠️