┌─────────────────────────────────────────────────────────────┐
│ 사용자 인터페이스 │
│ (CLI, Jupyter Notebooks, API) │
└────────────────────┬────────────────────────────────────────┘
│
┌────────────────────┴────────────────────────────────────────┐
│ 문제 정의 계층 │
│ - TSP - SAT │
│ - Graph Coloring - Knapsack │
│ (Problem 추상 클래스 구현) │
└────────────────────┬────────────────────────────────────────┘
│
┌────────────────────┴────────────────────────────────────────┐
│ 솔버 계층 │
│ ┌──────────────┬──────────────┬─────────────────┐ │
│ │ Traditional │ ML/RL │ LLM │ │
│ │ - Greedy │ - DQN │ - GPT-4 │ │
│ │ - Genetic │ - GNN │ - Claude │ │
│ │ - SA │ - PPO │ - Few-shot │ │
│ └──────────────┴──────────────┴─────────────────┘ │
│ (Solver 추상 클래스 구현) │
└────────────────────┬────────────────────────────────────────┘
│
┌────────────────────┴────────────────────────────────────────┐
│ 평가 및 벤치마크 │
│ - Benchmark - Metrics │
│ - Visualization - Reporting │
└─────────────────────────────────────────────────────────────┘
책임: NP-complete 문제의 추상화
주요 메서드:
generate_instance(): 문제 인스턴스 생성evaluate(solution): 해의 품질 평가is_valid_solution(solution): 해 유효성 검증get_state_representation(): ML용 상태 표현to_text(): LLM용 텍스트 표현
구현 클래스:
TSPProblem: 외판원 문제SATProblem: 충족 가능성 문제GraphColoringProblem: 그래프 색칠 문제KnapsackProblem: 배낭 문제
책임: 문제 해결 알고리즘의 추상화
주요 메서드:
solve(problem): 문제 해결get_stats(): 통계 정보 반환
구현 클래스:
GreedySolver: 탐욕 알고리즘GeneticAlgorithmSolver: 유전 알고리즘SimulatedAnnealingSolver: 담금질 기법
DQNSolver: Deep Q-NetworkGNNSolver: Graph Neural NetworkPPOSolver: Proximal Policy Optimization
LLMSolver: GPT-4/Claude 기반 해결
책임: 문제의 해 표현
속성:
value: 해의 값cost: 해의 비용/품질is_valid: 유효성 여부metadata: 추가 정보
책임: 솔버 성능 평가 및 비교
주요 메서드:
run_benchmark(): 벤치마크 실행plot_results(): 결과 시각화generate_report(): 리포트 생성
1. 문제 생성
Problem.generate_instance(seed) → Problem.data
2. 해 탐색
Solver.solve(problem) → Solution
3. 해 평가
Problem.evaluate(solution.value) → cost
4. 결과 수집
Benchmark.run_benchmark() → DataFrame
from src.problems.base import Problem, Solution
class MyProblem(Problem):
def generate_instance(self, seed):
# 구현
pass
def evaluate(self, solution):
# 구현
pass
def is_valid_solution(self, solution):
# 구현
pass
def get_state_representation(self):
# ML용
pass
def to_text(self):
# LLM용
passfrom src.solvers.base import Solver
class MySolver(Solver):
def __init__(self):
super().__init__("MySolver")
def solve(self, problem, **kwargs):
# 구현
solution_value = ...
cost = problem.evaluate(solution_value)
return Solution(
value=solution_value,
cost=cost,
is_valid=problem.is_valid_solution(solution_value)
)- 대규모 문제: 희소 행렬 사용
- 배치 처리: 제너레이터 패턴
- NumPy 벡터화 연산
- PyTorch GPU 가속
- 병렬 처리 (multiprocessing)
- 모듈화된 설계
- 플러그인 아키텍처
- 설정 파일 기반 커스터마이징
Core:
- NumPy, SciPy: 수치 계산
- NetworkX: 그래프 연산
ML/RL:
- PyTorch: 딥러닝
- PyTorch Geometric: GNN
- Stable-Baselines3: RL
LLM:
- OpenAI: GPT API
- LangChain: LLM 통합
Evaluation:
- pandas: 데이터 분석
- matplotlib, seaborn: 시각화
Development:
- pytest: 테스트
- black: 코드 포매팅
- 각 Problem 클래스의 메서드
- 각 Solver의 기본 동작
- 유틸리티 함수
- Problem + Solver 조합
- 전체 벤치마크 파이프라인
- 다양한 크기의 문제
- 시간/메모리 제약 확인