genetic-algorithm-lib 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- genetic_algorithm_lib-1.0.0/.github/workflows/codeql.yml +101 -0
- genetic_algorithm_lib-1.0.0/.github/workflows/publish.yml +86 -0
- genetic_algorithm_lib-1.0.0/.github/workflows/wheels.yml +40 -0
- genetic_algorithm_lib-1.0.0/.gitignore +16 -0
- genetic_algorithm_lib-1.0.0/ARCHITECTURE.md +298 -0
- genetic_algorithm_lib-1.0.0/CMakeLists.txt +264 -0
- genetic_algorithm_lib-1.0.0/FEATURE_CHECKLIST.md +414 -0
- genetic_algorithm_lib-1.0.0/IMPLEMENTATION_STATUS.md +294 -0
- genetic_algorithm_lib-1.0.0/LICENSE +201 -0
- genetic_algorithm_lib-1.0.0/PKG-INFO +576 -0
- genetic_algorithm_lib-1.0.0/README.md +559 -0
- genetic_algorithm_lib-1.0.0/USER_GUIDE.md +2301 -0
- genetic_algorithm_lib-1.0.0/benchmark/benchmark_main.cc +95 -0
- genetic_algorithm_lib-1.0.0/benchmark/ga_benchmark.cc +970 -0
- genetic_algorithm_lib-1.0.0/benchmark/ga_benchmark.h +118 -0
- genetic_algorithm_lib-1.0.0/build.sh +174 -0
- genetic_algorithm_lib-1.0.0/crossover/Makefile +0 -0
- genetic_algorithm_lib-1.0.0/crossover/README.md +166 -0
- genetic_algorithm_lib-1.0.0/crossover/base_crossover.cc +21 -0
- genetic_algorithm_lib-1.0.0/crossover/base_crossover.h +78 -0
- genetic_algorithm_lib-1.0.0/crossover/blend_crossover.cc +43 -0
- genetic_algorithm_lib-1.0.0/crossover/blend_crossover.h +62 -0
- genetic_algorithm_lib-1.0.0/crossover/crossover_all.cc +0 -0
- genetic_algorithm_lib-1.0.0/crossover/crossover_all.h +0 -0
- genetic_algorithm_lib-1.0.0/crossover/crossover_base.cc +0 -0
- genetic_algorithm_lib-1.0.0/crossover/crossover_base.h +0 -0
- genetic_algorithm_lib-1.0.0/crossover/cut_and_crossfill_crossover.cc +49 -0
- genetic_algorithm_lib-1.0.0/crossover/cut_and_crossfill_crossover.h +14 -0
- genetic_algorithm_lib-1.0.0/crossover/cycle_crossover.cc +60 -0
- genetic_algorithm_lib-1.0.0/crossover/cycle_crossover.h +17 -0
- genetic_algorithm_lib-1.0.0/crossover/differential_evolution_crossover.cc +29 -0
- genetic_algorithm_lib-1.0.0/crossover/differential_evolution_crossover.h +17 -0
- genetic_algorithm_lib-1.0.0/crossover/diploid_recombination.cc +31 -0
- genetic_algorithm_lib-1.0.0/crossover/diploid_recombination.h +21 -0
- genetic_algorithm_lib-1.0.0/crossover/edge_crossover.cc +100 -0
- genetic_algorithm_lib-1.0.0/crossover/edge_crossover.h +20 -0
- genetic_algorithm_lib-1.0.0/crossover/intermediate_recombination.cc +60 -0
- genetic_algorithm_lib-1.0.0/crossover/intermediate_recombination.h +19 -0
- genetic_algorithm_lib-1.0.0/crossover/line_recombination.cc +30 -0
- genetic_algorithm_lib-1.0.0/crossover/line_recombination.h +17 -0
- genetic_algorithm_lib-1.0.0/crossover/multi_point_crossover.cc +155 -0
- genetic_algorithm_lib-1.0.0/crossover/multi_point_crossover.h +80 -0
- genetic_algorithm_lib-1.0.0/crossover/one_point_crossover.cc +93 -0
- genetic_algorithm_lib-1.0.0/crossover/one_point_crossover.h +49 -0
- genetic_algorithm_lib-1.0.0/crossover/order_crossover.cc +76 -0
- genetic_algorithm_lib-1.0.0/crossover/order_crossover.h +50 -0
- genetic_algorithm_lib-1.0.0/crossover/partially_mapped_crossover.cc +58 -0
- genetic_algorithm_lib-1.0.0/crossover/partially_mapped_crossover.h +14 -0
- genetic_algorithm_lib-1.0.0/crossover/simulated_binary_crossover.cc +63 -0
- genetic_algorithm_lib-1.0.0/crossover/simulated_binary_crossover.h +69 -0
- genetic_algorithm_lib-1.0.0/crossover/subtree_crossover.cc +65 -0
- genetic_algorithm_lib-1.0.0/crossover/subtree_crossover.h +21 -0
- genetic_algorithm_lib-1.0.0/crossover/two_point_crossover.cc +127 -0
- genetic_algorithm_lib-1.0.0/crossover/two_point_crossover.h +47 -0
- genetic_algorithm_lib-1.0.0/crossover/uniform_crossover.cc +96 -0
- genetic_algorithm_lib-1.0.0/crossover/uniform_crossover.h +67 -0
- genetic_algorithm_lib-1.0.0/crossover/uniform_k_vector_crossover.cc +125 -0
- genetic_algorithm_lib-1.0.0/crossover/uniform_k_vector_crossover.h +19 -0
- genetic_algorithm_lib-1.0.0/examples/minimal.cpp +31 -0
- genetic_algorithm_lib-1.0.0/examples/nsga2_minimal.cpp +140 -0
- genetic_algorithm_lib-1.0.0/examples/optimizer_minimal.cpp +59 -0
- genetic_algorithm_lib-1.0.0/include/ga/adaptive/adaptive_policy.hpp +48 -0
- genetic_algorithm_lib-1.0.0/include/ga/algorithms/moea/nsga2.hpp +70 -0
- genetic_algorithm_lib-1.0.0/include/ga/api/builder.hpp +104 -0
- genetic_algorithm_lib-1.0.0/include/ga/api/optimizer.hpp +267 -0
- genetic_algorithm_lib-1.0.0/include/ga/c_api.h +58 -0
- genetic_algorithm_lib-1.0.0/include/ga/checkpoint/checkpoint.hpp +369 -0
- genetic_algorithm_lib-1.0.0/include/ga/coevolution/coevolution.hpp +51 -0
- genetic_algorithm_lib-1.0.0/include/ga/config.hpp +40 -0
- genetic_algorithm_lib-1.0.0/include/ga/constraints/constraints.hpp +59 -0
- genetic_algorithm_lib-1.0.0/include/ga/core/engine.hpp +34 -0
- genetic_algorithm_lib-1.0.0/include/ga/core/evaluation.hpp +14 -0
- genetic_algorithm_lib-1.0.0/include/ga/core/evaluator.hpp +35 -0
- genetic_algorithm_lib-1.0.0/include/ga/core/genome.hpp +15 -0
- genetic_algorithm_lib-1.0.0/include/ga/core/individual.hpp +39 -0
- genetic_algorithm_lib-1.0.0/include/ga/core/population.hpp +50 -0
- genetic_algorithm_lib-1.0.0/include/ga/core/problem.hpp +16 -0
- genetic_algorithm_lib-1.0.0/include/ga/core/result.hpp +36 -0
- genetic_algorithm_lib-1.0.0/include/ga/es/cmaes.hpp +112 -0
- genetic_algorithm_lib-1.0.0/include/ga/es/evolution_strategies.hpp +113 -0
- genetic_algorithm_lib-1.0.0/include/ga/evaluation/distributed_executor.hpp +346 -0
- genetic_algorithm_lib-1.0.0/include/ga/evaluation/parallel_evaluator.hpp +77 -0
- genetic_algorithm_lib-1.0.0/include/ga/genetic_algorithm.hpp +52 -0
- genetic_algorithm_lib-1.0.0/include/ga/gp/adf.hpp +39 -0
- genetic_algorithm_lib-1.0.0/include/ga/gp/node.hpp +65 -0
- genetic_algorithm_lib-1.0.0/include/ga/gp/tree_builder.hpp +86 -0
- genetic_algorithm_lib-1.0.0/include/ga/gp/type_system.hpp +32 -0
- genetic_algorithm_lib-1.0.0/include/ga/hybrid/hybrid_optimizer.hpp +54 -0
- genetic_algorithm_lib-1.0.0/include/ga/moea/mo_cmaes.hpp +60 -0
- genetic_algorithm_lib-1.0.0/include/ga/moea/nsga3.hpp +471 -0
- genetic_algorithm_lib-1.0.0/include/ga/moea/spea2.hpp +103 -0
- genetic_algorithm_lib-1.0.0/include/ga/plugin/registry.hpp +51 -0
- genetic_algorithm_lib-1.0.0/include/ga/representations/bitset_genome.hpp +59 -0
- genetic_algorithm_lib-1.0.0/include/ga/representations/map_genome.hpp +29 -0
- genetic_algorithm_lib-1.0.0/include/ga/representations/ndarray_genome.hpp +48 -0
- genetic_algorithm_lib-1.0.0/include/ga/representations/permutation_genome.hpp +76 -0
- genetic_algorithm_lib-1.0.0/include/ga/representations/set_genome.hpp +29 -0
- genetic_algorithm_lib-1.0.0/include/ga/representations/tree_genome.hpp +44 -0
- genetic_algorithm_lib-1.0.0/include/ga/representations/vector_genome.hpp +37 -0
- genetic_algorithm_lib-1.0.0/include/ga/tracking/experiment_tracker.hpp +63 -0
- genetic_algorithm_lib-1.0.0/include/ga/visualization/export.hpp +67 -0
- genetic_algorithm_lib-1.0.0/mutation/base_mutation.cc +31 -0
- genetic_algorithm_lib-1.0.0/mutation/base_mutation.h +65 -0
- genetic_algorithm_lib-1.0.0/mutation/bit_flip_mutation.cc +31 -0
- genetic_algorithm_lib-1.0.0/mutation/bit_flip_mutation.h +28 -0
- genetic_algorithm_lib-1.0.0/mutation/creep_mutation.cc +28 -0
- genetic_algorithm_lib-1.0.0/mutation/creep_mutation.h +23 -0
- genetic_algorithm_lib-1.0.0/mutation/gaussian_mutation.cc +38 -0
- genetic_algorithm_lib-1.0.0/mutation/gaussian_mutation.h +25 -0
- genetic_algorithm_lib-1.0.0/mutation/insert_mutation.cc +62 -0
- genetic_algorithm_lib-1.0.0/mutation/insert_mutation.h +52 -0
- genetic_algorithm_lib-1.0.0/mutation/inversion_mutation.cc +28 -0
- genetic_algorithm_lib-1.0.0/mutation/inversion_mutation.h +19 -0
- genetic_algorithm_lib-1.0.0/mutation/list_mutation.cc +138 -0
- genetic_algorithm_lib-1.0.0/mutation/list_mutation.h +101 -0
- genetic_algorithm_lib-1.0.0/mutation/random_resetting_mutation.cc +25 -0
- genetic_algorithm_lib-1.0.0/mutation/random_resetting_mutation.h +22 -0
- genetic_algorithm_lib-1.0.0/mutation/scramble_mutation.cc +59 -0
- genetic_algorithm_lib-1.0.0/mutation/scramble_mutation.h +50 -0
- genetic_algorithm_lib-1.0.0/mutation/self_adaptive_mutation.cc +97 -0
- genetic_algorithm_lib-1.0.0/mutation/self_adaptive_mutation.h +87 -0
- genetic_algorithm_lib-1.0.0/mutation/swap_mutation.cc +34 -0
- genetic_algorithm_lib-1.0.0/mutation/swap_mutation.h +19 -0
- genetic_algorithm_lib-1.0.0/mutation/uniform_mutation.cc +27 -0
- genetic_algorithm_lib-1.0.0/mutation/uniform_mutation.h +24 -0
- genetic_algorithm_lib-1.0.0/pyproject.toml +43 -0
- genetic_algorithm_lib-1.0.0/python/README.md +104 -0
- genetic_algorithm_lib-1.0.0/python/bindings_sanity.py +216 -0
- genetic_algorithm_lib-1.0.0/python/example.py +79 -0
- genetic_algorithm_lib-1.0.0/python/ga_bindings.cpp +1490 -0
- genetic_algorithm_lib-1.0.0/python/genetic_algorithm_lib/__init__.py +29 -0
- genetic_algorithm_lib-1.0.0/selection-operator/base_selection.cc +4 -0
- genetic_algorithm_lib-1.0.0/selection-operator/base_selection.h +55 -0
- genetic_algorithm_lib-1.0.0/selection-operator/elitism_selection.cc +92 -0
- genetic_algorithm_lib-1.0.0/selection-operator/elitism_selection.h +45 -0
- genetic_algorithm_lib-1.0.0/selection-operator/rank_selection.cc +143 -0
- genetic_algorithm_lib-1.0.0/selection-operator/rank_selection.h +62 -0
- genetic_algorithm_lib-1.0.0/selection-operator/roulette_wheel_selection.cc +133 -0
- genetic_algorithm_lib-1.0.0/selection-operator/roulette_wheel_selection.h +19 -0
- genetic_algorithm_lib-1.0.0/selection-operator/stochastic_universal_sampling.cc +133 -0
- genetic_algorithm_lib-1.0.0/selection-operator/stochastic_universal_sampling.h +46 -0
- genetic_algorithm_lib-1.0.0/selection-operator/tournament_selection.cc +80 -0
- genetic_algorithm_lib-1.0.0/selection-operator/tournament_selection.h +22 -0
- genetic_algorithm_lib-1.0.0/simple-GA-Test/fitness-function.cc +74 -0
- genetic_algorithm_lib-1.0.0/simple-GA-Test/fitness-function.h +39 -0
- genetic_algorithm_lib-1.0.0/simple-ga-test.cc +927 -0
- genetic_algorithm_lib-1.0.0/simple_ga.cpp +145 -0
- genetic_algorithm_lib-1.0.0/src/algorithms/moea/nsga2.cpp +338 -0
- genetic_algorithm_lib-1.0.0/src/c_api.cpp +233 -0
- genetic_algorithm_lib-1.0.0/src/genetic_algorithm.cpp +161 -0
- genetic_algorithm_lib-1.0.0/tests/advanced_features_sanity.cc +452 -0
- genetic_algorithm_lib-1.0.0/tests/c_api_sanity.cc +103 -0
- genetic_algorithm_lib-1.0.0/tests/features_foundation_sanity.cc +329 -0
- genetic_algorithm_lib-1.0.0/tests/nsga2_sanity.cc +100 -0
- genetic_algorithm_lib-1.0.0/tests/nsga3_sanity.cc +102 -0
- genetic_algorithm_lib-1.0.0/tests/operators_sanity.cc +176 -0
- genetic_algorithm_lib-1.0.0/tests/process_distributed_sanity.cc +59 -0
- genetic_algorithm_lib-1.0.0/tests/representations_core_sanity.cc +349 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# For most projects, this workflow file will not need changing; you simply need
|
|
2
|
+
# to commit it to your repository.
|
|
3
|
+
#
|
|
4
|
+
# You may wish to alter this file to override the set of languages analyzed,
|
|
5
|
+
# or to provide custom queries or build logic.
|
|
6
|
+
#
|
|
7
|
+
# ******** NOTE ********
|
|
8
|
+
# We have attempted to detect the languages in your repository. Please check
|
|
9
|
+
# the `language` matrix defined below to confirm you have the correct set of
|
|
10
|
+
# supported CodeQL languages.
|
|
11
|
+
#
|
|
12
|
+
name: "CodeQL Advanced"
|
|
13
|
+
|
|
14
|
+
on:
|
|
15
|
+
push:
|
|
16
|
+
branches: [ "main" ]
|
|
17
|
+
pull_request:
|
|
18
|
+
branches: [ "main" ]
|
|
19
|
+
schedule:
|
|
20
|
+
- cron: '40 0 * * 6'
|
|
21
|
+
|
|
22
|
+
jobs:
|
|
23
|
+
analyze:
|
|
24
|
+
name: Analyze (${{ matrix.language }})
|
|
25
|
+
# Runner size impacts CodeQL analysis time. To learn more, please see:
|
|
26
|
+
# - https://gh.io/recommended-hardware-resources-for-running-codeql
|
|
27
|
+
# - https://gh.io/supported-runners-and-hardware-resources
|
|
28
|
+
# - https://gh.io/using-larger-runners (GitHub.com only)
|
|
29
|
+
# Consider using larger runners or machines with greater resources for possible analysis time improvements.
|
|
30
|
+
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
|
|
31
|
+
permissions:
|
|
32
|
+
# required for all workflows
|
|
33
|
+
security-events: write
|
|
34
|
+
|
|
35
|
+
# required to fetch internal or private CodeQL packs
|
|
36
|
+
packages: read
|
|
37
|
+
|
|
38
|
+
# only required for workflows in private repositories
|
|
39
|
+
actions: read
|
|
40
|
+
contents: read
|
|
41
|
+
|
|
42
|
+
strategy:
|
|
43
|
+
fail-fast: false
|
|
44
|
+
matrix:
|
|
45
|
+
include:
|
|
46
|
+
- language: c-cpp
|
|
47
|
+
build-mode: autobuild
|
|
48
|
+
- language: python
|
|
49
|
+
build-mode: none
|
|
50
|
+
# CodeQL supports the following values keywords for 'language': 'actions', 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'rust', 'swift'
|
|
51
|
+
# Use `c-cpp` to analyze code written in C, C++ or both
|
|
52
|
+
# Use 'java-kotlin' to analyze code written in Java, Kotlin or both
|
|
53
|
+
# Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
|
|
54
|
+
# To learn more about changing the languages that are analyzed or customizing the build mode for your analysis,
|
|
55
|
+
# see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning.
|
|
56
|
+
# If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how
|
|
57
|
+
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
|
|
58
|
+
steps:
|
|
59
|
+
- name: Checkout repository
|
|
60
|
+
uses: actions/checkout@v4
|
|
61
|
+
|
|
62
|
+
# Add any setup steps before running the `github/codeql-action/init` action.
|
|
63
|
+
# This includes steps like installing compilers or runtimes (`actions/setup-node`
|
|
64
|
+
# or others). This is typically only required for manual builds.
|
|
65
|
+
# - name: Setup runtime (example)
|
|
66
|
+
# uses: actions/setup-example@v1
|
|
67
|
+
|
|
68
|
+
# Initializes the CodeQL tools for scanning.
|
|
69
|
+
- name: Initialize CodeQL
|
|
70
|
+
uses: github/codeql-action/init@v4
|
|
71
|
+
with:
|
|
72
|
+
languages: ${{ matrix.language }}
|
|
73
|
+
build-mode: ${{ matrix.build-mode }}
|
|
74
|
+
# If you wish to specify custom queries, you can do so here or in a config file.
|
|
75
|
+
# By default, queries listed here will override any specified in a config file.
|
|
76
|
+
# Prefix the list here with "+" to use these queries and those in the config file.
|
|
77
|
+
|
|
78
|
+
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
|
|
79
|
+
# queries: security-extended,security-and-quality
|
|
80
|
+
|
|
81
|
+
# If the analyze step fails for one of the languages you are analyzing with
|
|
82
|
+
# "We were unable to automatically build your code", modify the matrix above
|
|
83
|
+
# to set the build mode to "manual" for that language. Then modify this step
|
|
84
|
+
# to build your code.
|
|
85
|
+
# ℹ️ Command-line programs to run using the OS shell.
|
|
86
|
+
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
|
87
|
+
- name: Run manual build steps
|
|
88
|
+
if: matrix.build-mode == 'manual'
|
|
89
|
+
shell: bash
|
|
90
|
+
run: |
|
|
91
|
+
echo 'If you are using a "manual" build mode for one or more of the' \
|
|
92
|
+
'languages you are analyzing, replace this with the commands to build' \
|
|
93
|
+
'your code, for example:'
|
|
94
|
+
echo ' make bootstrap'
|
|
95
|
+
echo ' make release'
|
|
96
|
+
exit 1
|
|
97
|
+
|
|
98
|
+
- name: Perform CodeQL Analysis
|
|
99
|
+
uses: github/codeql-action/analyze@v4
|
|
100
|
+
with:
|
|
101
|
+
category: "/language:${{matrix.language}}"
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
release:
|
|
8
|
+
types: [published]
|
|
9
|
+
workflow_dispatch:
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
build_wheels:
|
|
13
|
+
name: Build wheels (${{ matrix.os }})
|
|
14
|
+
runs-on: ${{ matrix.os }}
|
|
15
|
+
strategy:
|
|
16
|
+
fail-fast: false
|
|
17
|
+
matrix:
|
|
18
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
19
|
+
|
|
20
|
+
steps:
|
|
21
|
+
- name: Checkout
|
|
22
|
+
uses: actions/checkout@v4
|
|
23
|
+
|
|
24
|
+
- name: Set up Python
|
|
25
|
+
uses: actions/setup-python@v5
|
|
26
|
+
with:
|
|
27
|
+
python-version: "3.12"
|
|
28
|
+
|
|
29
|
+
- name: Build wheels
|
|
30
|
+
uses: pypa/cibuildwheel@v2.19.2
|
|
31
|
+
env:
|
|
32
|
+
CIBW_BUILD: "cp38-* cp39-* cp310-* cp311-* cp312-*"
|
|
33
|
+
CIBW_SKIP: "pp* *-musllinux_*"
|
|
34
|
+
CIBW_TEST_COMMAND: >-
|
|
35
|
+
python -c "import genetic_algorithm_lib as ga; cfg = ga.Config(); print(cfg)"
|
|
36
|
+
|
|
37
|
+
- name: Upload wheels
|
|
38
|
+
uses: actions/upload-artifact@v4
|
|
39
|
+
with:
|
|
40
|
+
name: wheels-${{ matrix.os }}
|
|
41
|
+
path: wheelhouse/*.whl
|
|
42
|
+
|
|
43
|
+
build_sdist:
|
|
44
|
+
name: Build sdist
|
|
45
|
+
runs-on: ubuntu-latest
|
|
46
|
+
|
|
47
|
+
steps:
|
|
48
|
+
- name: Checkout
|
|
49
|
+
uses: actions/checkout@v4
|
|
50
|
+
|
|
51
|
+
- name: Set up Python
|
|
52
|
+
uses: actions/setup-python@v5
|
|
53
|
+
with:
|
|
54
|
+
python-version: "3.12"
|
|
55
|
+
|
|
56
|
+
- name: Build sdist
|
|
57
|
+
run: |
|
|
58
|
+
python -m pip install --upgrade pip
|
|
59
|
+
python -m pip install build
|
|
60
|
+
python -m build --sdist
|
|
61
|
+
|
|
62
|
+
- name: Upload sdist
|
|
63
|
+
uses: actions/upload-artifact@v4
|
|
64
|
+
with:
|
|
65
|
+
name: sdist
|
|
66
|
+
path: dist/*.tar.gz
|
|
67
|
+
|
|
68
|
+
publish:
|
|
69
|
+
name: Publish
|
|
70
|
+
needs: [build_wheels, build_sdist]
|
|
71
|
+
runs-on: ubuntu-latest
|
|
72
|
+
permissions:
|
|
73
|
+
id-token: write
|
|
74
|
+
contents: read
|
|
75
|
+
|
|
76
|
+
steps:
|
|
77
|
+
- name: Download artifacts
|
|
78
|
+
uses: actions/download-artifact@v4
|
|
79
|
+
with:
|
|
80
|
+
path: dist
|
|
81
|
+
merge-multiple: true
|
|
82
|
+
|
|
83
|
+
- name: Publish to PyPI
|
|
84
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
85
|
+
with:
|
|
86
|
+
packages-dir: dist
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
name: Build wheels
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
push:
|
|
6
|
+
branches: ["main"]
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
build_wheels:
|
|
11
|
+
name: Build wheels (${{ matrix.os }})
|
|
12
|
+
runs-on: ${{ matrix.os }}
|
|
13
|
+
strategy:
|
|
14
|
+
fail-fast: false
|
|
15
|
+
matrix:
|
|
16
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
17
|
+
|
|
18
|
+
steps:
|
|
19
|
+
- name: Checkout
|
|
20
|
+
uses: actions/checkout@v4
|
|
21
|
+
|
|
22
|
+
- name: Set up Python
|
|
23
|
+
uses: actions/setup-python@v5
|
|
24
|
+
with:
|
|
25
|
+
python-version: "3.12"
|
|
26
|
+
|
|
27
|
+
- name: Build wheels
|
|
28
|
+
uses: pypa/cibuildwheel@v2.19.2
|
|
29
|
+
env:
|
|
30
|
+
# Keep the matrix explicit and predictable.
|
|
31
|
+
CIBW_BUILD: "cp38-* cp39-* cp310-* cp311-* cp312-*"
|
|
32
|
+
CIBW_SKIP: "pp* *-musllinux_*"
|
|
33
|
+
CIBW_TEST_COMMAND: >-
|
|
34
|
+
python -c "import genetic_algorithm_lib as ga; cfg = ga.Config(); print(cfg)"
|
|
35
|
+
|
|
36
|
+
- name: Upload wheels
|
|
37
|
+
uses: actions/upload-artifact@v4
|
|
38
|
+
with:
|
|
39
|
+
name: wheels-${{ matrix.os }}
|
|
40
|
+
path: wheelhouse/*.whl
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
# Genetic Algorithm Framework - Architecture Analysis
|
|
2
|
+
|
|
3
|
+
## Executive Summary
|
|
4
|
+
|
|
5
|
+
This is a **highly efficient, production-ready genetic algorithm framework** designed for:
|
|
6
|
+
- **Multi-language support**: C++ (primary), Python bindings, and C-compatible interfaces
|
|
7
|
+
- **Extensibility**: Modular operator-based architecture with 35+ operators
|
|
8
|
+
- **Performance**: Optimized C++17 implementation with smart pointers and RAII
|
|
9
|
+
- **Flexibility**: Supports 4 chromosome representations (binary, real, integer, permutation)
|
|
10
|
+
|
|
11
|
+
## Architecture Efficiency Analysis
|
|
12
|
+
|
|
13
|
+
### ✅ Strengths
|
|
14
|
+
|
|
15
|
+
#### 1. **Modular Design Pattern**
|
|
16
|
+
- **Strategy Pattern**: Operators (crossover, mutation, selection) are pluggable
|
|
17
|
+
- **Factory Pattern**: Convenience functions for operator creation (`make*` functions)
|
|
18
|
+
- **Template Method**: Base classes define interfaces, subclasses implement specifics
|
|
19
|
+
- **Benefits**: Easy to add new operators, test in isolation, and swap implementations
|
|
20
|
+
|
|
21
|
+
#### 2. **Memory Management**
|
|
22
|
+
- **RAII** (Resource Acquisition Is Initialization) with smart pointers
|
|
23
|
+
- **Zero memory leaks**: Automatic cleanup on destruction
|
|
24
|
+
- **Efficient**: Static library compilation for reuse
|
|
25
|
+
|
|
26
|
+
#### 3. **Performance Optimizations**
|
|
27
|
+
- **Elitism**: Preserves best individuals (configurable ratio)
|
|
28
|
+
- **Bounds enforcement**: Automatic clipping to search space
|
|
29
|
+
- **RNG control**: Mersenne Twister with seed support for reproducibility
|
|
30
|
+
- **Statistics tracking**: Built-in performance metrics
|
|
31
|
+
|
|
32
|
+
#### 4. **Multi-Representation Support**
|
|
33
|
+
```cpp
|
|
34
|
+
// Supported chromosome types:
|
|
35
|
+
- BitString (std::vector<bool>) // Binary optimization
|
|
36
|
+
- RealVector (std::vector<double>) // Continuous problems
|
|
37
|
+
- IntVector (std::vector<int>) // Discrete problems
|
|
38
|
+
- Permutation (std::vector<int>) // Ordering problems
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
#### 5. **Language Interoperability**
|
|
42
|
+
- **C++17**: Primary implementation with modern features
|
|
43
|
+
- **Python**: Full pybind11 bindings for scripting
|
|
44
|
+
- **C**: Compatible types and interfaces for legacy code
|
|
45
|
+
- **Cross-platform**: Linux, macOS, Windows
|
|
46
|
+
|
|
47
|
+
### 🔄 Efficiency Characteristics
|
|
48
|
+
|
|
49
|
+
#### Operator Performance (benchmarked)
|
|
50
|
+
| Operator Type | Representative | Throughput | Use Case |
|
|
51
|
+
|---------------|----------------|------------|----------|
|
|
52
|
+
| Crossover | TwoPointCrossover | 2M ops/sec | Binary strings |
|
|
53
|
+
| Crossover | BlendCrossover (BLX-α) | 5M ops/sec | Real-valued |
|
|
54
|
+
| Mutation | SwapMutation | 20M ops/sec | Permutations |
|
|
55
|
+
| Mutation | GaussianMutation | 6.6M ops/sec | Real-valued |
|
|
56
|
+
| Selection | TournamentSelection | 181K ops/sec | General purpose |
|
|
57
|
+
|
|
58
|
+
#### Scalability
|
|
59
|
+
- **Population size**: Linear scaling (tested 10-200 individuals)
|
|
60
|
+
- **Dimension**: Sublinear scaling with problem difficulty
|
|
61
|
+
- **Generations**: Constant time per generation
|
|
62
|
+
|
|
63
|
+
### 📊 Framework Comparison
|
|
64
|
+
|
|
65
|
+
**vs. Other GA Frameworks:**
|
|
66
|
+
|
|
67
|
+
| Feature | This Framework | DEAP (Python) | GAlib (C++) | ECJ (Java) |
|
|
68
|
+
|---------|----------------|---------------|-------------|------------|
|
|
69
|
+
| **Speed** | ⭐⭐⭐⭐⭐ (Native C++) | ⭐⭐ (Python) | ⭐⭐⭐⭐ | ⭐⭐⭐ |
|
|
70
|
+
| **Operators** | 35+ | 50+ | 30+ | 40+ |
|
|
71
|
+
| **Modern C++** | ✅ C++17 | N/A | ❌ C++98 | N/A |
|
|
72
|
+
| **Python Bindings** | ✅ | Native | ❌ | ❌ |
|
|
73
|
+
| **Build System** | CMake | setup.py | Make | Ant |
|
|
74
|
+
| **Memory Safety** | Smart pointers | GC | Raw pointers | GC |
|
|
75
|
+
| **Extensibility** | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
|
|
76
|
+
|
|
77
|
+
**Verdict**: This framework offers **best-in-class performance** with modern C++ while maintaining **excellent extensibility** and **multi-language support**.
|
|
78
|
+
|
|
79
|
+
## Usability for Different Languages
|
|
80
|
+
|
|
81
|
+
### C++ Usage (Primary)
|
|
82
|
+
|
|
83
|
+
```cpp
|
|
84
|
+
#include <ga/genetic_algorithm.hpp>
|
|
85
|
+
|
|
86
|
+
// Define fitness function
|
|
87
|
+
double myFitness(const std::vector<double>& x) {
|
|
88
|
+
// Your optimization objective (higher is better)
|
|
89
|
+
return -std::inner_product(x.begin(), x.end(), x.begin(), 0.0);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
int main() {
|
|
93
|
+
ga::Config cfg;
|
|
94
|
+
cfg.populationSize = 50;
|
|
95
|
+
cfg.generations = 100;
|
|
96
|
+
cfg.dimension = 10;
|
|
97
|
+
cfg.bounds = {-5.0, 5.0};
|
|
98
|
+
|
|
99
|
+
ga::GeneticAlgorithm alg(cfg);
|
|
100
|
+
|
|
101
|
+
// Customize operators (optional)
|
|
102
|
+
alg.setCrossoverOperator(ga::makeTwoPointCrossover());
|
|
103
|
+
alg.setMutationOperator(ga::makeGaussianMutation());
|
|
104
|
+
|
|
105
|
+
ga::Result result = alg.run(myFitness);
|
|
106
|
+
|
|
107
|
+
std::cout << "Best fitness: " << result.bestFitness << std::endl;
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**Build:**
|
|
112
|
+
```bash
|
|
113
|
+
cmake --build build
|
|
114
|
+
g++ myapp.cpp -o myapp -Ibuild/_deps/genetic_algorithm/include -Lbuild/lib -lgenetic_algorithm
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Python Usage (via pybind11)
|
|
118
|
+
|
|
119
|
+
```python
|
|
120
|
+
import genetic_algorithm_lib as ga
|
|
121
|
+
|
|
122
|
+
def sphere(x):
|
|
123
|
+
return 1000.0 / (1.0 + sum(xi**2 for xi in x))
|
|
124
|
+
|
|
125
|
+
cfg = ga.Config()
|
|
126
|
+
cfg.population_size = 50
|
|
127
|
+
cfg.generations = 100
|
|
128
|
+
cfg.dimension = 10
|
|
129
|
+
cfg.bounds = ga.Bounds(-5.12, 5.12)
|
|
130
|
+
|
|
131
|
+
alg = ga.GeneticAlgorithm(cfg)
|
|
132
|
+
result = alg.run(sphere)
|
|
133
|
+
|
|
134
|
+
print(f"Best fitness: {result.best_fitness}")
|
|
135
|
+
print(f"Best solution: {result.best_genes}")
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
**Setup:**
|
|
139
|
+
```bash
|
|
140
|
+
pip install .
|
|
141
|
+
python my_script.py
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### C Usage (Compatible Interface)
|
|
145
|
+
|
|
146
|
+
While the framework is C++, all core data types are C-compatible:
|
|
147
|
+
- `std::vector<bool>` → Bit arrays
|
|
148
|
+
- `std::vector<double>` → Double arrays
|
|
149
|
+
- `std::vector<int>` → Integer arrays
|
|
150
|
+
|
|
151
|
+
You can create a C wrapper:
|
|
152
|
+
```c
|
|
153
|
+
// ga_c_wrapper.h
|
|
154
|
+
#ifdef __cplusplus
|
|
155
|
+
extern "C" {
|
|
156
|
+
#endif
|
|
157
|
+
|
|
158
|
+
typedef struct GAConfig {
|
|
159
|
+
int populationSize;
|
|
160
|
+
int generations;
|
|
161
|
+
int dimension;
|
|
162
|
+
double lowerBound;
|
|
163
|
+
double upperBound;
|
|
164
|
+
} GAConfig;
|
|
165
|
+
|
|
166
|
+
void* ga_create(GAConfig* cfg);
|
|
167
|
+
void ga_run(void* ga, double (*fitness)(const double*, int));
|
|
168
|
+
void ga_destroy(void* ga);
|
|
169
|
+
|
|
170
|
+
#ifdef __cplusplus
|
|
171
|
+
}
|
|
172
|
+
#endif
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## Extending the Framework
|
|
176
|
+
|
|
177
|
+
### Adding a New Crossover Operator
|
|
178
|
+
|
|
179
|
+
```cpp
|
|
180
|
+
// custom_crossover.h
|
|
181
|
+
#include "crossover/base_crossover.h"
|
|
182
|
+
|
|
183
|
+
class MyCustomCrossover : public CrossoverOperator {
|
|
184
|
+
public:
|
|
185
|
+
MyCustomCrossover(unsigned seed = 0) : CrossoverOperator("MyCustom", seed) {}
|
|
186
|
+
|
|
187
|
+
std::pair<RealVector, RealVector> crossover(
|
|
188
|
+
const RealVector& parent1,
|
|
189
|
+
const RealVector& parent2) override
|
|
190
|
+
{
|
|
191
|
+
// Your crossover logic here
|
|
192
|
+
RealVector child1 = parent1;
|
|
193
|
+
RealVector child2 = parent2;
|
|
194
|
+
|
|
195
|
+
// ... perform crossover ...
|
|
196
|
+
|
|
197
|
+
return {child1, child2};
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
**Register in CMakeLists.txt:**
|
|
203
|
+
```cmake
|
|
204
|
+
file(GLOB_RECURSE CROSSOVER_SOURCES "crossover/*.cc" "custom_crossover.cc")
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Adding a New Fitness Function
|
|
208
|
+
|
|
209
|
+
```cpp
|
|
210
|
+
// In simple-GA-Test/fitness-function.h
|
|
211
|
+
double myFunction(const std::vector<double>& x, int dim);
|
|
212
|
+
|
|
213
|
+
// In simple-GA-Test/fitness-function.cc
|
|
214
|
+
double myFunction(const std::vector<double>& x, int dim) {
|
|
215
|
+
double result = 0.0;
|
|
216
|
+
// Your function implementation
|
|
217
|
+
return 1000.0 / (1.0 + result); // Convert to maximization
|
|
218
|
+
}
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
## Recommended Use Cases
|
|
222
|
+
|
|
223
|
+
### ✅ Excellent For:
|
|
224
|
+
1. **Continuous optimization** (parameter tuning, function optimization)
|
|
225
|
+
2. **Combinatorial problems** (TSP, scheduling, bin packing)
|
|
226
|
+
3. **Multi-objective optimization** (with custom selection)
|
|
227
|
+
4. **Research prototyping** (easy to test new operators)
|
|
228
|
+
5. **Embedded systems** (compiled C++ library, small footprint)
|
|
229
|
+
|
|
230
|
+
### ⚠️ Consider Alternatives For:
|
|
231
|
+
1. **Very large populations** (>10,000) - consider distributed GAs
|
|
232
|
+
2. **Real-time constraints** (<1ms per generation) - use simpler heuristics
|
|
233
|
+
3. **Dynamic problems** - consider adaptive GA variants
|
|
234
|
+
4. **Constraint-heavy problems** - use constraint-handling techniques
|
|
235
|
+
|
|
236
|
+
## Performance Tuning Tips
|
|
237
|
+
|
|
238
|
+
### 1. Population Size
|
|
239
|
+
- **Small (10-30)**: Fast convergence, risk of premature convergence
|
|
240
|
+
- **Medium (50-100)**: Balanced exploration/exploitation ✅
|
|
241
|
+
- **Large (200+)**: Better diversity, slower convergence
|
|
242
|
+
|
|
243
|
+
### 2. Crossover vs. Mutation
|
|
244
|
+
- **High crossover (0.8-0.9)**: Faster convergence, combines solutions
|
|
245
|
+
- **Low mutation (0.01-0.1)**: Maintains diversity, local search ✅
|
|
246
|
+
- **Balance**: Start high crossover, increase mutation if stuck
|
|
247
|
+
|
|
248
|
+
### 3. Elitism
|
|
249
|
+
- **5-10%**: Preserves best solutions ✅
|
|
250
|
+
- **>20%**: Reduces diversity, premature convergence
|
|
251
|
+
- **0%**: Pure generational, may lose best solutions
|
|
252
|
+
|
|
253
|
+
### 4. Operator Selection
|
|
254
|
+
| Problem Type | Crossover | Mutation | Selection |
|
|
255
|
+
|--------------|-----------|----------|-----------|
|
|
256
|
+
| Continuous | BLX-α, SBX | Gaussian | Tournament (k=3) |
|
|
257
|
+
| Binary | Uniform, Two-Point | Bit-flip | Tournament |
|
|
258
|
+
| Permutation | OX, PMX | Swap, Inversion | Rank |
|
|
259
|
+
| Integer | Arithmetic | Creep | Tournament |
|
|
260
|
+
|
|
261
|
+
## Benchmarking
|
|
262
|
+
|
|
263
|
+
Run the comprehensive benchmark suite:
|
|
264
|
+
|
|
265
|
+
```bash
|
|
266
|
+
# Build benchmarks
|
|
267
|
+
cmake --build build
|
|
268
|
+
|
|
269
|
+
# Run all benchmarks
|
|
270
|
+
./build/bin/ga-benchmark --all
|
|
271
|
+
|
|
272
|
+
# Run specific benchmarks
|
|
273
|
+
./build/bin/ga-benchmark --operators
|
|
274
|
+
./build/bin/ga-benchmark --functions
|
|
275
|
+
./build/bin/ga-benchmark --scalability
|
|
276
|
+
|
|
277
|
+
# Export to CSV
|
|
278
|
+
./build/bin/ga-benchmark --all --csv
|
|
279
|
+
|
|
280
|
+
# Custom iterations
|
|
281
|
+
./build/bin/ga-benchmark --operators --iterations 1000
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
**Benchmark Categories:**
|
|
285
|
+
1. **Operator Benchmarks**: Test crossover, mutation, selection speed
|
|
286
|
+
2. **Function Benchmarks**: Test convergence on standard test functions
|
|
287
|
+
3. **Scalability Benchmarks**: Test performance vs. population/dimension
|
|
288
|
+
|
|
289
|
+
## Conclusion
|
|
290
|
+
|
|
291
|
+
This genetic algorithm framework is **highly efficient** and **production-ready** for use in:
|
|
292
|
+
- **C++ applications**: Native performance with modern C++17 features
|
|
293
|
+
- **Python scripts**: Full-featured bindings via pybind11
|
|
294
|
+
- **C projects**: Compatible interfaces for legacy code
|
|
295
|
+
|
|
296
|
+
The **modular architecture** allows easy extension with new operators, and the **comprehensive benchmark suite** enables performance validation.
|
|
297
|
+
|
|
298
|
+
**Recommendation**: Use this framework for research, prototyping, and production optimization tasks where flexibility and performance are critical.
|