Configuration‐Reference - adylagad/CSCI-561_Genetic-Algorithm GitHub Wiki
Complete reference for all configuration options.
The GA can be configured via:
-
JSON file -
config/default_config.json -
Python code -
GAConfigdataclass - Command line - (future feature)
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 = 100Type: 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
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
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_thresholdinstead
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
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")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.
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)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)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 generationsTrade-offs:
| Interval | Updates | Performance | Best For |
|---|---|---|---|
| 10 | Many | Slower | Monitoring closely |
| 100 ✅ | Balanced | Minimal impact | Normal use |
| 500 | Few | Fastest | Long runs |
from config.config import GAConfig
# Use all defaults
config = GAConfig()# Override specific parameters
config = GAConfig(
mutation_rate=0.05,
number_of_generations=5000
)
# All other parameters use defaultsCreate 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")# 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()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
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 ✅
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
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
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
)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
)- Performance Tuning Guide - Optimize these parameters
- Quick Start Tutorial - Get started
- FAQ - Common configuration questions
Need help tuning? → Performance Tuning Guide