4. 目标定义与约束建模

在生成式分子设计项目中,真正决定模型“往哪里走”的并不是生成算法本身,而是目标函数与约束条件的工程化表达。一个分子是否值得被推荐,往往同时取决于活性、选择性、药代动力学性质、毒性风险以及合成可及性。如果这些维度只停留在口头描述,模型就无法稳定地朝正确方向搜索。因此,本节的核心任务是把模糊的“好分子”翻译成可计算、可加权、可约束的工程对象。

一、从“好分子”到可计算目标

多目标优化首先要解决的是目标定义问题。假设我们关注五个维度:靶点活性(pIC50)、选择性(对脱靶靶点的差值)、口服暴露(AUC 或 Cmax)、hERG 抑制风险(IC50 或概率)、合成可及性(SAscore)。每个维度都需要明确三件事:方向(越大越好还是越小越好)、量纲(原始单位或归一化区间)、阈值(可接受边界)。例如 pIC50 越大越好,SAscore 越小越好,hERG 概率越小越好。方向不统一会导致加权求和时相互抵消,因此工程上通常先把所有目标统一为“收益型”或“代价型”。

常见做法是构造一个综合评分:

Score = w1 * f1(pIC50) + w2 * f2(selectivity)
      - w3 * g1(hERG_risk) - w4 * g2(SAscore)
      + w5 * h(AUC_pred)

其中 f、g、h 是归一化或分段映射函数。权重不是拍脑袋决定的,而应来自项目阶段:先导发现阶段可能更重视活性与新颖性,先导优化阶段则更重视 ADMET 与合成可行性。权重变化会直接改变推荐分子的排序,因此建议把权重作为显式配置项,而不是硬编码在模型内部。

二、药代动力学约束的工程化表达

药代动力学(PK)约束通常包括吸收、分布、代谢、排泄几个层面。工程上不必一开始就做完整 PBPK 模型,而是先用可计算的代理指标:脂水分配系数 logP、拓扑极性表面积 TPSA、氢键供体数 HBD、分子量 MW、血浆蛋白结合率预测值、CYP450 代谢稳定性预测值。这些指标可以组合成“类药性”约束区间。例如口服药物常见经验区间为:MW ≤ 500、logP 在 1~4、TPSA ≤ 120、HBD ≤ 5。它们不是绝对真理,但可以作为硬约束或软惩罚项。

更工程化的做法是把 PK 约束写成不等式组:

200 ≤ MW ≤ 500
1.0 ≤ logP ≤ 4.0
TPSA ≤ 120
HBD ≤ 5
CYP3A4 代谢概率 ≤ 0.6
血浆蛋白结合率 ≤ 0.95

在生成模型中,这些约束可以转化为过滤规则、惩罚项或条件生成标签。过滤规则简单但容易导致生成空间过窄;惩罚项更平滑,适合梯度优化;条件生成则把约束作为输入条件,让模型直接学习满足约束的分布。

三、毒性与合成可及性约束

毒性约束通常分为结构警示和预测模型两类。结构警示包括 PAINS、Brenk 警示、反应性基团等,适合作为硬过滤;预测模型如 hERG、肝毒性、致突变性则输出概率或类别,适合作为软约束。合成可及性方面,SAscore 是最常用的快速指标,取值通常在 1~10,越低越易合成。工程上可设定 SAscore ≤ 4 为可接受,4~6 为警告,大于 6 为拒绝。

需要注意的是,毒性和合成可及性往往与活性存在冲突。强行提高活性可能引入反应性基团或增加合成难度。因此,多目标优化不是把所有约束都设为硬边界,而是分层处理:硬约束用于不可接受的毒性或法规红线,软约束用于可权衡的性质。这样模型才能在可行域内寻找帕累托前沿,而不是被单一目标锁死。

多目标优化与约束建模的工程化表达 目标方向统一 → 归一化 → 加权评分 → 硬/软约束分层 → 帕累托筛选 目标维度 活性 pIC50 ↑ 越大越好 选择性 ΔpIC50 ↑ 越大越好 PK 暴露 AUC ↑ 越大越好 hERG 风险 ↓ 越小越好 SAscore ↓ 越小越好 CYP 代谢概率 ↓ 越小越好 归一化与加权 方向统一 代价型 → 收益型 x' = 1 - x / x_max 区间归一化 映射到 [0, 1] 保留阈值语义 权重配置 w1…w6 显式可调 随项目阶段变化 综合评分 Score = Σ wi·fi − Σ wj·gj 约束分层与筛选 硬约束(不可违反) • PAINS / Brenk 结构警示 • 致突变性预测为阳性 • 法规红线 / 反应性基团 • SAscore > 6 直接拒绝 软约束(可权衡) • hERG 概率 ≤ 0.3 加分 • logP 1~4 区间奖励 • TPSA ≤ 120 惩罚越界 • CYP 代谢概率 ≤ 0.6 帕累托前沿筛选 • 非支配排序保留候选集 • 按 Score 排序输出 Top-K 输出:满足约束的候选分子排序列表

四、工程实现中的关键细节

把上述逻辑落到代码时,建议采用“配置驱动”的方式。目标权重、约束阈值、归一化区间都放在 YAML 或 JSON 配置中,模型只负责读取和执行。这样可以在不重新训练模型的情况下调整优化方向。例如:

objectives:
  pIC50:      {weight: 0.30, direction: max, range: [4, 9]}
  selectivity:{weight: 0.20, direction: max, range: [0, 3]}
  AUC:        {weight: 0.15, direction: max, range: [0, 100]}
  hERG:       {weight: 0.20, direction: min, range: [0, 1]}
  SAscore:    {weight: 0.15, direction: min, range: [1, 10]}

hard_constraints:
  PAINS: false
  mutagenic: false
  SAscore_max: 6.0

soft_constraints:
  logP:       {range: [1, 4], penalty: 0.1}
  TPSA:       {max: 120, penalty: 0.05}
  CYP3A4:     {max: 0.6, penalty: 0.1}

在每一轮生成后,先执行硬约束过滤,再计算软约束惩罚,最后按综合评分排序。如果候选集过小,说明硬约束过紧,可以适当放宽;如果候选集很大但质量不高,说明软约束权重需要调整。这个反馈循环本身就是多目标优化的一部分。

实践建议:初期不要设置过多硬约束,先用软约束观察模型行为,再逐步收紧。硬约束过多会导致生成空间坍缩,模型只能重复少数已知骨架,丧失探索能力。

五、结果判读与迭代

评估优化结果时,不能只看综合评分最高的分子,还要看帕累托前沿的分布。如果前沿集中在少数几个骨架,说明多样性不足;如果前沿分散但评分普遍偏低,说明约束过严或权重失衡。一个实用的检查方法是:分别统计硬约束通过率、软约束平均惩罚、各目标维度的分布区间,并与项目初始设定对比。若某一维度长期触边,说明该约束可能过于苛刻,需要重新校准。

最终,目标定义与约束建模不是一次性任务,而是伴随项目全程的迭代过程。随着实验数据回流,PK 预测模型和毒性预测模型会更新,约束阈值和权重也应随之调整。把这一套逻辑工程化、配置化,才能让生成式分子设计从“能生成”走向“生成有用的分子”。