薬物結晶プロセスの多目的最適化
用途
結晶プロセスの最適化要求を、「一連のパラメータ/最適化対象セクションがある」状態から、「複数の制約を満たし、再現可能で定量的比較が可能な最適プロセス方案(完全なパレートフロンティア)を入手する」状態に進めます。
中核は**解釈可能な決定論的動力学モデル(デジタルツイン)**であり、6つのプロセス変数を4つの品質指標(収率/純度/粒径D50/溶出類似性因子f2)にマッピングします。このスキルは次の流れを編成します:要件の特定 → 計算コアの呼び出し → パレートフロンティアの解釈 → 最適化前後の比較結論の出力。
中核的手法(解釈可能な動力学カーネル)
| モジュール | 実装 | 文献アンカーリング |
|---|---|---|
| 溶解度曲線 | 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(撹拌) | 初等古典理論 + 二次成長結合;分岐 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% 擾乱下でのロバスト性判定。
トリガー条件(いつこのスキルをロードするか)
以下のいずれかのシナリオが発生した場合にトリガーされます:
- ユーザーが結晶プロセスパラメータを提示し、品質指標の評価や基準達成の確認を要求
- ユーザーが「最適化/探索/最適値探索」を要求する結晶セクションがある
- ユーザーが収率/純度/粒径D50/溶出f2などの品質目標に言及し、結晶が関係する
- ユーザーがジェネリック医薬品と原薬の溶出類似性(f2)評価を要求
- ユーザーが参照溶出曲線または文献ベースラインを提供し、比較を要求
トリガーワード:結晶プロセス最適化、結晶パラメータ探索、プロセス多目的最適化、ジェネリック医薬品結晶、粒径ウィンドウ、溶出f2、冷却曲線、種晶戦略、過飽和制御、アモキシシリン結晶、パレートフロンティア、個体群バランス。
入出力形式
入力
スキルは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は1行の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": "ロバスト:3因子 ± 擾乱下で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プロセス量を検証。 - 独立レビュー:Reviewerエージェントがフロンティアの非劣性と実現可能性を独立にレビューし、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エージェント、このスキルの唯一の実行可能ロジック |
| 参考ドキュメント | 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回の評価を1回ごとに記録(パラメータ/スコア/ソース/GPハイパーパラメータ/EI)、最適化プロセスが完全に追跡可能。
境界宣言
このスキルの出力はプロセス探索と事前スクリーニングツールであり、解釈可能な動力学カーネルに基づきます(GMP実験の代替ではありません)。最終的な生物学的同等性の結論は、実際の実験と申請データによって裏付けられる必要があります。収率の範囲:本モデルの収率は物質収支計算上の口径(析出固体/溶液調整固体)であり、文献の「総収率」口径とは異なります。詳細は references/tuning-guide.md を参照してください。