Back to projects

Problem Optimization Metaheuristics

A comprehensive C++ library implementing metaheuristic algorithms for solving complex combinatorial optimization problems.

Jun 28, 2024

C++CMakeMakefileGenetic AlgorithmsCat Swarm OptimizationGitGCCClang

Problem Optimization Metaheuristics

A robust collection of C++ implementations designed to solve classical optimization problems using evolutionary computing and swarm intelligence.

Project Overview

This repository serves as a research and development playground for metaheuristic algorithms. It currently implements solutions for classic computer science problems, such as the Knapsack Problem and Job Scheduling, using Genetic Algorithms and Cat Swarm Optimization. The project emphasizes performance, modularity, and clear algorithmic structure.

Technologies Used

  • Language: C++ (C++11/C++17)
  • Build Systems: CMake, Makefile
  • Algorithms: Genetic Algorithms (GA), Cat Swarm Optimization
  • Tools: Git, GCC/Clang

Key Features

  1. Multiple Solvers: Dedicated solvers for Knapsack, Job Scheduling, and Traveling Salesman problems.
  2. Evolutionary Operators: Implements various selection, crossover (Ordered OX), and mutation (Inversion) strategies.
  3. Performance Oriented: Written in C++ for maximum computational efficiency.
  4. Modular Architecture: Each algorithm and problem domain is isolated for easy study and extension.

Project Details

The core goal of this project is to explore how non-deterministic algorithms can find near-optimal solutions to NP-hard problems where exact solutions are computationally expensive.

Supported Problems

  • Knapsack Problem: Maximizing the total value of items in a knapsack without exceeding weight limits.
  • Job Scheduling: Optimizing the sequence of jobs to minimize total completion time.
  • Traveling Salesman (TSP): Finding the shortest possible route visiting a set of cities (implied structure).

Challenges

  • Premature Convergence: Preventing the genetic algorithm from getting stuck in local optima.
  • Parameter Tuning: Finding the right balance for mutation rates, population size, and crossover probabilities.
  • Computational Complexity: Ensuring the C++ implementations run efficiently even with large population sizes.

Solutions

  • Configurable Parameters: Extracting key variables (Alpha, Beta, Population Size) into utility files for easy experimentation.
  • Robust Build System: Using CMake to manage dependencies and compilation across different environments.
  • Diverse Operators: Implementing specific crossover methods like Ordered Crossover (OX) to preserve validity in permutation-based problems.

Conclusion

This project demonstrates a deep understanding of algorithmic complexity and C++ software engineering. It provides a solid foundation for students and researchers looking to understand or extend metaheuristic optimization techniques.