약물 결정화 공정 다목적 최적화
용도
결정화 공정 최적화 요구사항을 "매개변수 집합 / 최적화 대상 공정"에서 "다중 제약 조건을 충족하고, 재현 가능하며, 정량적 비교가 가능한 최적 공정 솔루션(완전한 파레토 프론티어)을 확보"하는 단계로 전환합니다.
핵심은 **해석 가능한 결정론적 동역학 모델(디지털 트윈)**로, 6개의 공정 변수를 4개의 품질 지표(수율 / 순도 / 입자 크기 D50 / 용출 유사성 인자 f2)에 매핑합니다. 본 SKILL은 다음을 편성합니다: 요구사항 식별 → 계산 코어 호출 → 파레토 프론티어 해석 → 최적화 전후 비교 결론 출력.
핵심 방법(해석 가능한 동역학 커널)
| 모듈 | 구현 | 문헌 앵커링 |
|---|---|---|
| 용해도 곡선 | van't Hoff: C*(T)=4.48·exp[8.3/R·(1/293−1/T)] | A등급: Biowaiver Monograph 2017 (20℃ 4.48 mg/mL) |
| 핵 생성 속도 | B = kb·max(σ−0.3,0)⁴ + kb2·G·μ2·f_mixing(교반) | 1차 고전 이론 + 2차 성장 결합; 임계값 S=4.5 (전빈빈 2015) |
| 성장 속도 | G = kg·σ^m, m=1.9955 (BCF 나선 전위 성장) | A등급: 전빈빈 등, 화학공학 2015 실측 |
| 개체군 수지 방정식(PBE) | 모멘트법 μ0…μ4 순환, 농도-모멘트 완전 결합 물질 수지 보존 | B등급: Randolph & Larson 모멘트법 |
최적화 방법(다목적 + 다중 에이전트)
- 주 출력: NSGA-II 4목표 완전 파레토 프론티어(80개 비지배 해 + 무릎점 + max-f₂/max-yield 극값), 목표 = 수율↑ / 순도↑ / f2↑ / 입도 30μm 근접↑.
- 보조: 가우스 과정(GP, RBF 커널 + 백색 잡음, 초매개변수는 로그 한계 우도 LML 학습) + 베이지안 최적화(EGO 방식 EI), 스칼라화 참조점 교차 검증.
- 5 에이전트 파이프라인: Literature(문헌 앵커링 게이트키퍼) → Kinetics Modeler(PBE 솔루션 + 물질 수지 자체 점검) → Optimizer(파레토 프론티어) → Risk/Regulatory(규제 판단 기준 + CQA) → Reviewer(독립 검토, PASS/FAIL 판정).
- 민감도 분석: 온도 ±1℃ / pH ±0.1 / 냉각 속도 ±10% 교란 하에서의 강건성 판단.
트리거 조건(본 SKILL 로드 시기)
다음 시나리오 중 하나라도 해당되면 트리거됩니다:
- 사용자가 결정화 공정 매개변수를 제시하고 품질 지표 평가 또는 적합성 여부를 요청
- 사용자가 결정 공정의 매개변수 "최적화/검색/탐색"을 요청
- 사용자가 수율/순도/입자 크기 D50/용출 f2 등 품질 목표를 언급하고 결정화와 관련
- 사용자가 제네릭 의약품과 오리지널 의약품의 용출 유사성(f2) 평가를 요청
- 사용자가 참조 용출 곡선 또는 문헌 기준선을 제공하고 비교를 요청
트리거 단어: 결정화 공정 최적화, 결정화 매개변수 탐색, 공정 다목적 최적화, 제네릭 의약품 결정화, 입도 윈도우, 용출 f2, 냉각 곡선, 시드 전략, 과포화 제어, 아목시실린 결정화, 파레토 프론티어, 개체군 수지.
입출력 형식
입력
SKILL은 AI가 세션에서 로드한 후 scripts/crystallization.py 실행(표준 입력으로 JSON 전달)을 통해 계산 코어를 구동합니다. CLI 입력 프로토콜:
{
"mode": "evaluate | optimize | sensitivity | agents | dissolution_plot | explain",
"params": { // evaluate 모드 필수, 6개 공정 변수
"T_cryst_C": 15, // 결정화 온도 ℃, [5, 25]
"r_cool_C_per_min": 0.2, // 냉각 속도 ℃/min, [0.05, 1.0]
"S0": 1.8, // 초기 과포화도(무차원), [1.2, 2.5]
"seed_wt_pct": 2, // 시드량 질량%, [0, 5.0]
"stir_rpm": 300, // 교반 속도 rpm, [100, 600]
"hold_t_min": 120 // 유지 시간 min, [30, 240]
},
"seed": 42 // optimize/agents 모드 선택 사항, 랜덤 시드(기본값 42, 결정적 재현 가능)
}
출력
계산 코어 stdout은 단일 행 JSON을 출력합니다. mode=optimize를 예로 들면 핵심 필드는 다음과 같습니다:
{
"params": {"T_cryst_C": 5.9, "r_cool_C_per_min": 0.11, "S0": 1.9, "seed_wt_pct": 4.58, "stir_rpm": 586, "hold_t_min": 238},
"metrics": {"yield_pct": 67.75, "purity_pct": 99.44, "D50_um": 44.26, "D90_um": 116.0, "f2": 79.13},
"score": 174.88,
"pareto": {"n_pareto": 80, "knee_point": {...}, "extremes": {"max_f2": {...}, "max_yield": {...}}, "pareto_front": [...]},
"agents": {"literature": {...}, "kinetics": {...}, "optimizer": {...}, "risk_regulatory": {...}, "reviewer": {"verdict": "PASS", ...}},
"sensitivity": {"robustness": {"conclusion": "강건: 세 가지 요인 ± 교란 하에서 f2가 ≥50 유지", ...}},
"surrogate_cv": {"r2_mean": 0.74, ...},
"bo_trace": [...],
"cqa_coverage": {...}
}
AI는 JSON 결과를 사람이 읽을 수 있는 비교 결론으로 해석하며, 형식은 본 파일의 "결과 해석" 섹션을 참조합니다.
실행 단계(표준 워크플로우)
순서대로 실행하며, 이전 단계 결과가 다음 단계 동작을 결정합니다:
- 요구사항 식별: 대상 API와 공정 확인; 사용자가 "단일 매개변수 평가"를 원하는지 "최적 매개변수 검색"을 원하는지 판단.
- 기준선 결정: 문헌의 고전적인 공정 기준선(또는 사용자 제공) 읽기; 기본 아목시실린 기준선은
references/tuning-guide.md참조. - 다목적 최적화(optimize):
mode=optimize호출, 주 출력은 완전한 파레토 프론티어(NSGA-II 80 비지배 해). - 결과 평가(evaluate): 후보 솔루션에 대해
mode=evaluate호출,checks.all_satisfied및 PBE 프로세스 양 확인. - 독립 검토: 리뷰어 에이전트가 프론티어의 비지배성과 실현 가능성을 독립적으로 검토하여 PASS/FAIL 발행.
- 결론 출력: 파레토 프론티어 + 무릎점/극값 + 4개 지표 전후 비교 + 민감도 분석 결론 + 경계 조건 설명 제공.
의존성
| 유형 | 의존 항목 | 설명 |
|---|---|---|
| 런타임 | Python 3 (python3 / python / py 중 하나 사용 가능) | 계산 코어 실행 |
| 수치 라이브러리 | NumPy 2.5.4 | GP 가우스 과정 및 NSGA-II 벡터화 연산 (pip install numpy==2.5.4) |
| 핵심 파일 | scripts/crystallization.py | 해석 가능 동역학 코어(PBE) + 다목적 최적화 + 5 에이전트, 본 SKILL의 유일한 실행 가능 로직 |
| 참조 문서 | references/install-and-usage.md | 설치, 등록, 사용 예제 |
| 참조 문서 | references/tuning-guide.md | 모든 조정 가능 매개변수의 물리적 의미, 값 범위 및 영향 |
| 외부 리소스 | 없음 | 자체 포함, 인터넷 연결 또는 외부 API 호출 불필요 |
계산 코어 호출 방식(CLI)
# evaluate: 단일 매개변수 평가
echo '{"mode":"evaluate","params":{...}}' | python scripts/crystallization.py
# optimize: 완전한 파레토 프론티어(주) + GP-BO 참조점 출력
echo '{"mode":"optimize","seed":42}' | python scripts/crystallization.py
# sensitivity: 민감도 분석(T±1℃/pH±0.1/냉각±10%)
echo '{"mode":"sensitivity","params":{...}}' | python scripts/crystallization.py
# explain: optimize 실행 내용 전체 설명(모델 카드/검색 공간/가중치/제약 조건 완전 투명)
echo '{"mode":"explain"}' | python scripts/crystallization.py
결과 해석
pareto.n_pareto→ 파레토 프론티어 비지배 해 수;knee_point는 이상점까지의 거리가 가장 작은 절충 해.metrics.f2 >= 50→ 용출 곡선이 오리지널 참조와 "유사" (FDA/CDE 생물학적 동등성 브리징 기준);f2 < 50은 비유사로 간주.agents.reviewer.verdict = PASS→ 프론티어 비지배성 + 실현 가능성 + 기준선 비교 모두 독립 검토 통과.sensitivity.robustness.f2_stays_above_50→ 교란 하에서 f2가 여전히 ≥50 유지 여부 (운영 강건성).bo_trace→ 64회 평가 각각 기록(매개변수/점수/출처/GP 초매개변수/EI), 최적화 과정 완전 조회 가능.
경계 조건 설명
본 SKILL의 출력은 공정 검색 및 사전 선별 도구이며, 해석 가능한 동역학 커널 기반(GMP 실험 대체 불가). 최종 생물학적 동등성 결론은 실제 실험 및 허가 데이터로 뒷받침되어야 함. 수율 기준: 본 모델의 수율은 물질 수지 기준(석출 고체/조제 고체)이며, 문헌의 "총 수율" 기준과 다름. 자세한 내용은 references/tuning-guide.md 참조.