> > > [PyGAD / DEAP] Python으로 Genetic Algorithm 시작하기: 유전 알고리즘 패키지 사용법과 하이퍼파라미터 완전 정리
본문 바로가기
기억하고 싶은 지식/python

[PyGAD / DEAP] Python으로 Genetic Algorithm 시작하기: 유전 알고리즘 패키지 사용법과 하이퍼파라미터 완전 정리

by Remember-me 2026. 4. 7.
반응형

안녕하세요.
“기억하고자 하는 모든 것”을 담아내는 “리멤버미” 입니다.

 

유전 알고리즘(Genetic Algorithm, GA)은 경우의 수가 많고, 미분 기반 최적화가 어려운 문제를 풀 때 자주 쓰이는 대표적인 휴리스틱 최적화 기법입니다.
특히 설계 변수 조합이 많거나, 해 공간이 복잡한 문제에서 꽤 유용하게 활용됩니다.

이번 글에서는 유전 알고리즘 이론 자체보다, Python에서 어떤 패키지를 쓰면 좋은지, 그리고 주요 하이퍼파라미터는 어떤 의미를 가지는지 중심으로 가볍게 정리해보겠습니다.

어떤 Python 패키지를 쓰면 좋을까?

유전 알고리즘을 Python에서 구현할 때 많이 쓰이는 패키지는 대표적으로 PyGADDEAP입니다.

PyGAD

PyGAD는 유전 알고리즘을 비교적 간단하게 실행할 수 있는 패키지입니다.
GA 클래스를 생성한 뒤 세대 수, 부모 수, 돌연변이 방식 같은 값을 넣고 바로 실행할 수 있어서 입문자도 접근하기 쉽습니다.

DEAP

DEAP은 조금 더 유연한 프레임워크에 가깝습니다.
개체 구조, 선택 방식, 교차 방식, 변이 연산 등을 직접 조합할 수 있어서 커스터마이징이 필요한 경우에 강합니다.

간단히 정리하면 아래처럼 볼 수 있습니다.

  • 빠르게 시작하고 싶다 → PyGAD
  • 구조를 세밀하게 제어하고 싶다 → DEAP

1. PyGAD 기본 사용법

설치

pip install pygad

간단한 예제

아래 예제는 두 변수 x1, x2가 있을 때, (3, -1)에 가까운 값을 찾는 아주 단순한 최적화입니다.

 

import pygad

def fitness_func(ga_instance, solution, solution_idx):
    x1, x2 = solution
    return 10.0 - ((x1 - 3.0) ** 2 + (x2 + 1.0) ** 2)

ga_instance = pygad.GA(
    num_generations=100,
    num_parents_mating=8,
    fitness_func=fitness_func,
    sol_per_pop=20,
    num_genes=2,
    gene_space=[
        {'low': -10, 'high': 10, 'step': 0.1},
        {'low': -10, 'high': 10, 'step': 0.1}
    ],
    parent_selection_type="sss",
    keep_elitism=1,
    crossover_type="single_point",
    mutation_type="random",
    mutation_probability=0.1,
    random_seed=42
)

ga_instance.run()

solution, solution_fitness, solution_idx = ga_instance.best_solution()
print("best solution:", solution)
print("best fitness:", solution_fitness)

 

PyGAD의 기본 흐름은 단순합니다.

  1. fitness 함수를 만든다
  2. GA 객체를 생성한다
  3. run()으로 실행한다
  4. best_solution()으로 최적 해를 확인한다

즉, 복잡한 구조를 직접 설계하지 않아도 비교적 빠르게 유전 알고리즘을 적용할 수 있습니다.


2. 주요 하이퍼파라미터 설명

유전 알고리즘은 단순히 실행하는 것보다, 파라미터를 어떻게 설정하느냐가 더 중요합니다.

num_generations

총 몇 세대까지 진화를 반복할지 정하는 값입니다.
너무 작으면 충분히 탐색하지 못하고, 너무 크면 이미 수렴한 뒤에도 불필요하게 오래 실행될 수 있습니다.

sol_per_pop

한 세대의 개체 수입니다.
값이 크면 다양한 해를 탐색하기 좋지만 계산량이 늘어나고, 너무 작으면 조기 수렴 가능성이 커집니다.

num_parents_mating

부모로 선택할 개체 수입니다.
너무 적으면 다양성이 부족해지고, 너무 많으면 선택 압력이 약해질 수 있습니다.

parent_selection_type

부모 선택 방식입니다.
주로 sss, rank, tournament 같은 방식이 많이 사용됩니다.

  • sss : 무난하게 시작하기 좋은 방식
  • rank : fitness 편차가 클 때 안정적인 편
  • tournament : 선택 압력 조절이 쉬움

keep_elitism

현재 세대의 가장 좋은 해를 다음 세대에 그대로 유지할지 정하는 옵션입니다.
좋은 해를 보존하는 데 유리하지만, 너무 강하면 다양성이 빨리 줄어들 수 있습니다.

crossover_type

부모 해를 섞어 자식 해를 만드는 방식입니다.
대표적으로 single_point, two_points, uniform 등이 있습니다.
좋은 해의 조합을 만들 수 있지만, 과하면 기존에 잘 맞던 구조를 깨뜨릴 수도 있습니다.

mutation_type / mutation_probability

돌연변이 방식과 확률입니다.
유전 알고리즘에서 매우 중요한 요소입니다.

  • 돌연변이가 너무 약하면 조기 수렴 가능성이 커짐
  • 돌연변이가 너무 강하면 탐색이 불안정해짐

즉, 다양성을 유지하되 해를 지나치게 흔들지 않는 균형이 중요합니다.

gene_space

각 변수가 가질 수 있는 값의 범위입니다.
실무에서는 이 옵션이 특히 중요합니다.

예를 들어,

  • 어떤 변수는 0 이상만 가능하고
  • 어떤 변수는 0.1 간격만 허용되며
  • 어떤 변수는 특정 후보 값 중 하나만 선택해야 할 수 있습니다

이럴 때 gene_space를 잘 설정하면 불필요한 탐색을 크게 줄일 수 있습니다.

random_seed

실험 재현성을 위해 사용하는 값입니다.
같은 결과를 반복 확인하고 싶다면 꼭 넣는 것이 좋습니다.


3. 자주 겪는 문제

너무 빨리 수렴할 때

조기 수렴일 가능성이 큽니다.
이때는 보통 아래를 먼저 점검합니다.

  • sol_per_pop이 너무 작은지
  • mutation_probability가 너무 낮은지
  • keep_elitism이 너무 큰지

결과가 너무 불안정할 때

탐색이 지나치게 강한 경우일 수 있습니다.

  • mutation이 너무 큰지
  • gene 범위가 너무 넓은지
  • 세대 수만 늘리고 탐색 공간 제약은 없는지

이럴 때는 mutation 강도를 조금 낮추고, gene_space를 더 현실적으로 제한하는 편이 좋습니다.


4. DEAP은 언제 쓸까?

DEAP은 PyGAD보다 조금 더 자유도가 높은 패키지입니다.
개체 구조, 선택 방식, 교차 연산, 변이 연산을 직접 조합할 수 있어서 실험적인 알고리즘 구성에 유리합니다.

설치도 간단합니다.

pip install deap

 

PyGAD가 “바로 써보는 유전 알고리즘”에 가깝다면,
DEAP은 “직접 조립하는 진화 알고리즘 프레임워크”에 더 가깝다고 볼 수 있습니다.

그래서 처음에는 PyGAD로 감을 잡고,
필요하면 DEAP으로 넘어가는 방식도 꽤 괜찮습니다.

 

마무리

정리하면 이렇습니다.

  • PyGAD는 빠르게 시작하기 좋고
  • DEAP은 세밀한 제어와 확장에 강합니다

그리고 유전 알고리즘의 핵심 하이퍼파라미터는 아래처럼 이해하면 편합니다.

  • sol_per_pop : 다양성
  • num_generations : 탐색 시간
  • selection : 선택 압력
  • crossover : 좋은 해의 조합
  • mutation : 새로운 탐색
  • gene_space : 문제 제약 반영

유전 알고리즘은 만능은 아니지만, 해 공간이 복잡하고 수학적으로 풀기 어려운 문제에서는 여전히 꽤 강력한 도구입니다.
특히 설계 최적화, 파라미터 튜닝, 조합 탐색 문제에서는 지금도 충분히 실용적인 방법입니다.

 

2026.04.07 - [기억하고 싶은 지식/인공지능] - [최적화/AI] 유전 알고리즘(Genetic Algorithm)이란? 선택·교차·돌연변이로 이해하는 핵심 원리

 

[최적화/AI] 유전 알고리즘(Genetic Algorithm)이란? 선택·교차·돌연변이로 이해하는 핵심 원리

안녕하세요.“기억하고자 하는 모든 것”을 담아내는 “리멤버미” 입니다. 최적화 문제를 다루다 보면, 해를 한 번에 정확히 계산해서 찾기 어려운 경우가 많습니다.특히 변수 조합이 너무 많

diary.remembermeeternally.com

 

반응형

댓글