想象一间定制蛋糕工坊。老师傅手艺高超,能烤出千变万化的蛋糕,可今天的订单偏偏写着:低糖、高蛋白、无坚果、造型还要好看。老师傅当然不会把店里所有蛋糕先烤一遍再挑——那样又慢又浪费,而且很可能一炉都不达标。真正聪明的做法,是让“顾客要求”从一开始就介入每个环节:选食材时避开坚果,调糖浆时减去三分之二糖,裱花时对照图纸反复修正。这就是“性质约束生成”的日常:让 AI 在生成分子的过程中,每一刻都记着“目标性质”这张订单,而不是等分子都长好了再大浪淘沙。目标性质可以是溶解度、带隙、结合能……任何能写出评分规则的性质。这条技术路线正在幕后支撑着电池材料筛选、药物分子优化、聚合物定制等前沿工作,把“大海捞针”变成“按图索骥”。
学懂性质约束生成,你将掌握 AI 驱动材料发现的“定向生成”能力——从海量候选中精准命中目标性质分子,显著缩短新材料与药物的研发周期,这是 AI for Science 时代材料信息学工程师的核心竞争力之一。
可视化演示
展示性质约束分子生成三种策略:条件扩散去噪过程注入性质向量、分类器引导梯度采样、约束强度与有效性权衡曲线,切换步骤查看。
本节配有交互动效(进入视口后自动加载,约 3KB)。
条件扩散去噪 性质向量PROP注入去噪网络每一步 噪声逐步去除分子结构清晰化 x_{t-1}=f(x_t,c,eps) 条件c引导去噪方向
约束注入策略
订单可以在三个时刻介入烘焙。第一种,顾客提前把要求写进配方,师傅照着配方从头做;第二种,烤到一半师傅试吃,根据口味偏差往盆里补料;第三种,把所有蛋糕烤完,拿糖度计逐个量,不合格的扔掉。三种方式都能让成品靠近订单,但效率和成本天差地别。性质约束生成做的正是类似的事——所谓“约束注入策略”,指的是把目标分子性质(溶解度、带隙、结合能等)嵌入生成流程的方式。
条件注入把性质作为生成模型的额外输入,让网络“知道订单再开工”;引导注入在采样过程中用性质的梯度不断修正中间产物,像边烤边尝;后置筛选则先无差别生成,再按性质阈值过滤。后置筛选实现最简单,但面对指数级膨胀的候选空间,命中率低得可怜,好比把全城蛋糕店都烤完也未必找得到订单要的那款。条件注入让生成分布在源头就向目标偏移,是当前主流;引导注入更灵活,但要额外训练性质预测器。
1. 目标函数符号:这是评价生成效果的总分数,数值越大代表“定制配方”越好。
2. 期望符号:表示对所有可能生成的分子取平均,相当于统计师傅做一百个蛋糕的平均达标率。
3. 条件分布:竖线右边是订单 P,左边是生成的分子——“知道订单之后的生成分布”。
4. 性质分数:分子 M 的性质与目标 P 的接近程度,满分 1 代表完全命中。
5. 有效性分数:分子 M 化学上是否合法,合法为 1,否则为 0,像质检章一样一票否决。
三种注入方式的取舍,就像蛋糕工坊对“订单介入时机”的取舍:介入越早,生成越定向,但配方越难中途改;介入越晚,越灵活,但浪费越多。现实中的系统往往是混着用——配方定制加中途微调,后置筛选只当最后一道质量门。
条件扩散模型
蛋糕不是凭空变出来的。师傅从一盆面粉糊开始,经过搅拌、注模、烘烤、冷却,一步步“去噪”成蓬松的成品。分子生成也类似——扩散模型从一团几乎全是噪声的“生面糊”出发,经过成百上千步去噪,逐渐显露出原子排列和化学键。而“订单”(目标性质)就贴在搅拌盆上,每一步去噪都要看它一眼。这就是条件扩散模型:把性质条件 y 喂进去噪网络,让生成过程自始至终被订单牵引。
扩散模型分两个方向。前向过程(加噪)把干净分子 x₀ 逐步变成纯噪声,像一个蛋糕被慢慢搅回面粉糊,这个过程不需要学习;逆向过程(去噪)学习如何从噪声一步步恢复分子,同时把 y 作为输入条件。条件 y 的编码方式也有讲究——可以是性质数值的嵌入向量,也可以是目标分子片段的结构编码。条件编码越“贴题”,去噪过程就越像师傅边烤边瞄着订单。
1. 时间步:指加噪进行到第几步,类似蛋糕烤到第几分钟,决定“现在是面糊还是接近成品”。
2. 带噪分子:干净分子 x₀ 与纯噪声 ε 的加权混合,t 越大噪声占比越高,t=0 时就是原始分子。
3. 条件去噪网络:以带噪分子、时间步、订单 y 为输入,输出预测噪声,是这块蛋糕的“核心配方”。
4. 均方误差:预测噪声与真实噪声的平方距离,越小说明去噪越准,训练就是在压这个数。
训练完成后,采样生成就是从纯噪声出发,按学习到的条件去噪方向一步步走回分子空间。每一步都问一遍“订单要我生成什么”,最终落地的分子自然带着目标性质的痕迹。这正是“订单写进每一步”在算法层面的实现。
属性引导采样
只把订单贴在搅拌盆上还不够。真正的手艺,在于烘烤中段的“试吃调整”:师傅尝一口,觉得不够甜就补糖,太甜就加点面粉。生成分子同样可以被“尝”——用一个性质预测器对中间产物打分,算出“距离订单还差多少”,再沿着改进方向推一把。这个改进方向,数学上叫梯度。属性引导采样就是在去噪的中间步骤,用性质的梯度不断修正生成方向。
引导采样分两派。分类器引导需要额外训练一个性质预测模型 p(y|x_t),采样时计算它对 x_t 的梯度来修正,像请了一位专职“试吃员”;无分类器引导更巧妙:训练时随机把条件 y 置空,让同一个网络既会“看订单做”也会“不看订单做”,采样时同时跑两条路,用两者之差充当引导方向——相当于同一个师傅,左手拿订单、右手不拿订单,对比两次手法差异来体会订单到底改变了什么。
1. 无条件预测:不看订单时的去噪方向,相当于师傅的默认手艺。
2. 有条件预测:看过订单后的去噪方向,默认手艺加上订单修正。
3. 引导增量:两个方向的差——“订单让师傅改了多少”,是引导的核心信号。
4. 引导强度:放大或压缩这份修正量的旋钮,s 越大越听话,但也越可能“用力过猛”。
引导强度是一把双刃剑。s 太小,分子性质容易跑偏,订单形同虚设;s 太大,分子可能被推出合理的化学空间,变成“味道对了但造型塌了”的蛋糕。如何选择 s,正是下一节“分子有效性”要回答的问题。
分子有效性
工坊里最尴尬的场面:低糖做到了,蛋糕却塌成一摊。性质命中的前提,是分子本身“成立”——原子按化学规则成键、空间构象不冲突、合成路线真实存在。有效性是约束生成的第一道质检,它通常包含三关:化学价约束(碳四价、氧二价,键不能多也不能少)、构象合理(三维结构中原子不重叠、键角正常)、可合成性(逆合成分析能找到原料和路径)。
1. 有效性集合:所有化学上合法的分子组成的集合,相当于“合格蛋糕”的圈子。
2. 示性函数:括号里的判断成立返回 1,否则返回 0,像质检员逐个盖章。
3. 求和与平均:对 N 个生成分子的质检结果求平均,得到有效的比例。
有趣的是,约束注入和有效性互相牵制:条件注入能让性质更准,但过度拟合订单也会让网络生成“奇形怪状”的分子——键价错乱、原子重叠。因此,报告实验结果时,有效性和命中率必须成对出现,缺一不可。提升有效性本身,也被单列为一条重要的优化方向。
命中率评估
蛋糕做出来、形状没塌,就算完事了吗?顾客要低糖,含糖量超标十倍照样退货。分子生成也一样:有效性通过之后,还要看性质是否真正命中目标区间。命中率回答的是“生成的一批分子里,有多少个的性质落在目标范围”。它和有效性是两把互补的尺子:有效性管“能不能用”,命中率管“好不好用”。
1. 目标值:订单要求的性质数值,比如溶解度不低于某个阈值。
2. 预测值:模型估算出的分子性质,是“试吃员”报出的口味数据。
3. 偏差与容差:只要偏差绝对值不超过 δ 就算达标,δ 越大越宽松。
4. 命中比例:N 个分子里达标的比例,这是给老板看的核心 KPI。
基线对比时,通常用“随机生成 + 后置筛选”当对照组。约束生成的优势在于:同样的生成数量下,命中率往往成倍提升。但也要警惕“命中率虚高”——如果性质预测器本身不准,命中的分子拿去实验照样翻车。预测器的误差分析因此成为评估报告中必讲的一页,指标权衡(松一点 δ 还是紧一点)也考验研究者的判断。
优化方向
工坊接到大订单后要琢磨三件事:怎么烤得更快、怎么保证每炉品质稳定、怎么同时满足“低糖、高蛋白、好看”这三个互相打架的要求。这三个方向正是性质约束生成当前的优化主线。首先是采样加速:标准扩散要上千步去噪,像盯着一块蛋糕烤一整夜;蒸馏技术把几百步压缩到几步,代价是精度略降。其次是生成稳定:抑制随机种子带来的方差,让同一订单每次出品都接近。最后是多目标均衡——现实订单从不止一条性质,低糖可能牺牲口感,高强度可能牺牲柔性。
1. 生成损失:负责分子整体结构的合理性,是师傅的基本功。
2. 性质损失:负责命中的性质偏差,越接近订单越好。
3. 有效性损失:负责化学合法性,保证分子不“塌方”。
4. 平衡权重:两个 λ 控制三个目标的主次关系,总原则是先保证有效性不为零,否则性质再准也是空中楼阁。
除了算法层面的优化,人机协同也在兴起:让化学家把经验性约束(“这个官能团太难合成,别用”)以规则形式注入生成过程,AI 负责检索组合,人负责把关常识。这就像老师傅带徒弟——算法管效率,人管品味。
实验验证
光说不练是假把式。工坊要开品鉴会,用同一批面粉、同一个烤箱,把新配方和老配方放在一起烤,由盲测评委打分。实验验证做的就是这件事:在公开数据集上,用统一指标,对比约束生成和基线方法。分子生成领域常用 QM9(小分子性质数据集)和 ZINC(药物分子库)做基准,评测指标就是前面讲的有效性 V 和命中率 H,外加性质误差 MAE。消融实验是品鉴会的重头戏:把条件注入去掉、把引导去掉、把有效性质检去掉,逐项看哪一步贡献最大。
1. 新方法命中率:本文方法的性质命中率,是待检验的“新配方”。
2. 基线命中率:对照组(随机生成加后置筛选)的命中率,是“老配方”。
3. 相对提升比:两者之差除以基线,再乘 100%,得到百分比形式的提升幅度。
大量公开实验显示:条件扩散 + 属性引导的组合,命中率比纯后置筛选高出数倍,且不会牺牲太多有效性。但研究者也坦承,合成验证仍是薄弱环节——性质在计算机里命中了,实验室里能不能做出来,才是真正的终审。这也是“结果分析”里总少不了一句“有待湿实验验证”的原因。
应用前景
品鉴会大获成功后,工坊决定把定制流程复制到更多市场:有人要无麸质,有人要低脂,有人要特定造型。性质约束生成的“市场”同样广阔——只要能写出性质打分规则,就能定向生成候选。最热的两大市场是新材料发现(电池电解质、催化剂、光伏材料)和药物分子设计(先导化合物优化)。在材料信息学的大闭环里,生成模型负责“出题”,高通量计算和实验负责“验题”,实验数据回流再训练,形成“生成—打分—实验—反馈”的加速循环。
1. 暴力候选数:传统随机筛选需要尝试的候选分子总数,可能高达百万级。
2. 生成候选数:约束生成实际产出的候选数量,通常只有前者的零头。
3. 命中率:候选里真正达标者的比例,是“出题质量”的体现。
4. 加速倍数:三者相除得到研发提速的倍数,是写给投资人看的数字。
前景不等于坦途。性质预测器的误差、可合成性验证、实验闭环的成本,都是这座“定制蛋糕工厂”要翻过的坎。但方向已经清晰:让 AI 从“会生成分子”进化到“按订单生成分子”,这正是材料信息学从论文走向产业的关键一跃。
AI 应用场景
电池电解质溶剂定向筛选
阶段:候选生成与筛选优化阶段
解决的问题:传统做法是遍历数千种溶剂分子库做实验测量,测完一轮要数月。约束生成把“高离子电导率、低粘度”写成订单,直接产出候选电解质分子,再少量实测验证,把“先做后挑”变成“先算再验”。
具体案例:某研究组用条件扩散模型生成 2000 个电解质分子,约束注入“离子电导率 > 8 mS/cm、粘度 < 5 cP”,模拟打分后 60% 命中目标区间;实测 5 个分子有 3 个达标,比随机库筛选快约 20 倍。
药物先导化合物优化
阶段:分子生成与性质优化阶段
解决的问题:传统药物设计靠药物化学家手工修饰数百个衍生物,周期以年计。属性引导采样把“结合亲和力 + 类药性 + 可合成性”作为订单,在去噪过程中逐步修正生成方向,让候选分子从一开始就长在目标区域附近。
具体案例:针对某靶点蛋白,团队用无分类器引导生成带目标药效团片段、结合能预测合格的分子,命中率从基线 15% 提升到 62%,最终挑选 8 个分子进入湿实验验证。
聚合物性能定制与实验闭环
阶段:生成—实验闭环迭代阶段
解决的问题:聚合物设计空间巨大,单点实验成本高。性质约束生成按“玻璃化转变温度、拉伸强度”等目标生成单体结构,实验数据回流再训练,形成材料信息学闭环,避免盲目试错。
具体案例:某高分子实验室生成 500 个候选单体,合成其中 20 个,实测数据反馈优化模型,第二轮生成命中率翻倍,且新候选的可合成性明显提升。
Python 演示
import mathimport random class PropertyConstrainedGenerator: """简化版性质约束生成: 用目标感知的梯度引导模拟条件扩散""" def __init__(self, seed=42): random.seed(seed) # 内部候选分子库, 每个"分子"用4维特征表示 self.library = [ [0.90, 0.10, 0.20, 0.80], [0.70, 0.30, 0.50, 0.60], [0.20, 0.80, 0.90, 0.10], [0.50, 0.50, 0.40, 0.50], [0.85, 0.15, 0.10, 0.90], [0.10, 0.90, 0.85, 0.20], [0.60, 0.40, 0.60, 0.40], [0.30, 0.70, 0.70, 0.30], ] def property_score(self, z): """简化水溶性评分: 极性项加分, 疏水交叉项减分""" return 0.7 * z[1] + 0.3 * z[2] - 0.4 * z[0] * z[3] def is_valid(self, z): """简化有效性: 特征不越界且极性特征适中""" ok_range = all(0.05 <= v <= 0.95 for v in z) return ok_range and 0.2 <= z[1] <= 0.85 def grad_property(self, z): """性质评分对特征向量的解析梯度""" return [-0.4 * z[3], 0.7, 0.3, -0.4 * z[0]] def guided_sampling(self, target=0.75, steps=60, lr=0.2): """从噪声出发, 沿"靠近目标"的方向引导去噪""" z = [random.uniform(0.0, 1.0) for _ in range(4)] for _ in range(steps): grad = self.grad_property(z) norm = math.sqrt(sum(g * g for g in grad)) + 1e-9 gap = target - self.property_score(z) for i in range(4): z[i] += lr * gap * grad[i] / norm z = [max(0.0, min(1.0, v)) for v in z] return z def nearest_molecule(self, z): """把连续向量映射回最近的离散候选分子""" best, best_d = None, float("inf") for m in self.library: d = sum((a - b) ** 2 for a, b in zip(z, m)) if d < best_d: best, best_d = m, d return best def evaluate(self, n_samples=60, target=0.75, guided=True): """统计生成分子的有效性与性质命中率""" valid_count, hit_count = 0, 0 for _ in range(n_samples): if guided: z = self.guided_sampling(target) else: z = [random.uniform(0.0, 1.0) for _ in range(4)] m = self.nearest_molecule(z) if self.is_valid(m): valid_count += 1 if abs(self.property_score(m) - target) <= 0.1: hit_count += 1 return valid_count / n_samples, hit_count / n_samples def main(): gen = PropertyConstrainedGenerator(seed=42) for guided in (True, False): valid, hit = gen.evaluate(guided=guided) mode = "guided" if guided else "random" print("[%s] validity=%.0f%% hit_rate=%.0f%%" % (mode, valid * 100, hit * 100)) if __name__ == "__main__": main()
self.library = [...]内部候选分子库,相当于“食材库存”,生成结果最终要映射回这些候选return 0.7 * z[1] + 0.3 * z[2] - 0.4 * z[0] * z[3]性质打分器,模拟水溶性预测:极性项加分、疏水交叉项减分def grad_property(self, z):返回性质对特征的解析梯度,是“试吃后该往哪个方向调整”的依据gap = target - self.property_score(z)目标差距:性质偏低时为正(需要补),偏高时为负(需要减)z[i] += lr * gap * grad[i] / norm引导更新:沿性质上升方向迈步,靠近目标后自动停止z = [max(0.0, min(1.0, v)) for v in z]投影回 [0,1] 有效区间,相当于蛋糕不能烤糊def nearest_molecule(self, z):把连续特征向量映射回最近的离散候选分子if abs(self.property_score(m) - target) <= 0.1:命中判定:与目标偏差不超过容差 δ 才算达标for guided in (True, False):对照实验,分别统计引导与无引导的效果,相当于盲测品鉴会
常见误区
误区我一直觉得性质约束生成就是把模型生成的一堆分子用代码筛一筛,留下性质符合条件的就行,模型本身不用改。
正解后置筛选只是约束注入的一种方式,而且是最低效的一种——候选空间指数级膨胀时,纯筛选的命中率低得可怜。条件注入和引导注入在生成过程中就嵌入了性质信息,等于让师傅照着订单做,而不是把全城蛋糕买回来再挑。实验对比中,三者的命中率可差出数倍。
为何常见:后置筛选实现最简单直观,初学者容易把它当作“标准做法”,误以为生成模型不需要为订单做任何改变。
误区引导强度 s 设大一点,生成分子就更能贴近目标性质,反正 s 只是个系数,越大越听话。
正解过强的引导会让采样分布偏离训练数据所在的化学空间,生成大量键价错误、构象冲突的“废分子”——性质命中率上去了,有效性却崩了。引导强度与有效性之间存在权衡,实际使用要做消融实验调参,像加糖一样适量才好。
为何常见:“越用力越听话”是直觉反应,忽略了生成分布本身对输出空间的约束。
误区分子有效性不就是看分子满不满足目标性质吗?满足的就是有效的。
正解有效性是“化学上是否合法”,与目标性质无关——一个分子可以不满足任何预设性质,但化学上完全合法。命中率才是“性质是否达标”。前者好比蛋糕没塌,后者好比味道符合订单:塌了肯定不合格,没塌但太甜也照样退货。两者必须分开报告。
为何常见:生活中常把“合格”和“好用”混为一谈,迁移到分子生成就容易把两个指标揉在一起。
误区只要有个预训练好的分子生成模型,采样时加个梯度算一下就能做性质约束生成,不用再训练。
正解分类器引导需要训练一个性质预测器;无分类器引导需要在训练阶段随机丢弃条件,网络才能学到“条件与无条件的差”。约束能力大部分是在训练阶段“长”进去的,采样时的梯度只是最后一公里。把训练阶段当空气,效果会大打折扣。
为何常见:采样时加梯度看起来像“事后补救”,让人误以为训练环节可以省掉。
误区AI 生成的分子性质预测完全达标,那直接让实验室照着合成就可以了。
正解性质达标是“理论上好用”,可合成性是“现实中做得出来”。有些分子性质完美,但合成路径极长甚至根本不存在。优化方向里把可合成性作为约束或评分项,正是为了弥合计算与实验之间的鸿沟。
为何常见:仿真指标让人乐观,忽略了化学合成现实的硬约束。
面试题
Q1. 性质约束生成的核心目标是什么?
- A.让生成分子满足预设性质← 正确答案
- B.生成任意结构的候选分子
- C.缩短模型训练的时间成本
- D.扩大候选分子库的规模
答案:A。性质约束生成的核心是在生成过程中嵌入目标性质,让输出的分子满足预设性质(订单要求)。生成任意结构、缩短训练时间、扩大库规模都不是它的目标。好比定制蛋糕的核心是“符合订单口味”,而不是“烤得够多够快”。
Q2. 以下哪种做法属于“后置筛选”式约束注入?
- A.生成网络以目标性质为输入
- B.采样过程中施加梯度引导
- C.生成之后再按性质过滤← 正确答案
- D.训练时随机丢弃条件
答案:C。后置筛选是“先无差别生成,再按性质阈值过滤”,对应 C。A 是条件注入,B 是引导注入,D 是无分类器引导的训练技巧。就好比把蛋糕全部做完再称糖度,而不是一开始就按订单做或中途试吃调整。
Q3. 分类器引导在采样时,性质预测器的梯度被施加到哪个变量上?
- A.网络的权重参数
- B.当前去噪样本← 正确答案
- C.学习率的大小
- D.训练数据集合
答案:B。分类器引导计算的是“对当前带噪样本 x_t 求导”的梯度 ∇log p(y|x_t),用该梯度修正采样方向,让中间产物朝性质更优的区域移动。它不更新网络权重,也不改学习率和数据集。就像师傅尝的是“当前这炉面糊”,而不是改配方书。
Q4. 无分类器引导采样时,模型需要几次前向计算来获得引导增量?
- A.一次条件前向计算即可
- B.条件与无条件各前向一次← 正确答案
- C.每一个去噪步都重新训练
- D.完全不需要任何前向计算
答案:B。无分类器引导的公式是 ε_θ(x_t,∅)+s·[ε_θ(x_t,y)−ε_θ(x_t,∅)],需要同时跑一次“无条件”和一次“有条件”的前向,两者做差才是订单带来的引导增量。一次前向算不出增量,每步重新训练更不可能。相当于让“看过订单的师傅”和“没看过的师傅”各说一句,对比出差异。
Q5. 分子有效性主要指什么?
- A.结构符合化学规则← 正确答案
- B.性质数值达标
- C.生成速度更快
- D.数据规模更大
答案:A。有效性指分子在化学上是否“成立”——键价正确、构象合理、路径可合成,与目标性质无关。性质达标属于命中率的范畴。蛋糕比喻里,有效性是“蛋糕没塌能成形”,性质达标是“味道符合订单”。
Q6. 引导强度设置过大时,最容易出现的后果是?
- A.生成速度变慢
- B.分子有效性下降← 正确答案
- C.存储开销暴涨
- D.数据清洗困难
答案:B。引导强度 s 太大会让采样分布偏离训练数据的化学空间,生成大量键价错误、构象冲突的无效分子。速度、存储、数据清洗都不是引导强度直接影响的指标。就像糖加太多,蛋糕虽然“很甜”,但可能压根没发起来。
Q7. 性质命中率的准确含义是?
- A.生成结构的唯一性
- B.模型参数量大小
- C.达标候选分子的占比← 正确答案
- D.数据增广的次数
答案:C。命中率 H = (1/N)Σ I[|p̂(M_i)−P*|≤δ],统计一批生成分子中性质落在目标容差范围内的比例。结构唯一性、参数量、增广次数都与命中率无关。它回答的是“这炉蛋糕里有多少个真正符合订单”。
Q8. 下列哪些属于性质约束的注入策略?
- A.条件输入注入← 正确答案
- B.采样梯度引导← 正确答案
- C.生成后筛选← 正确答案
- D.数据清洗流程
答案:ABC。三种主流策略是条件注入(A)、引导注入(B)、后置筛选(C)。数据清洗发生在训练前,不是把目标性质嵌入生成过程的方式。三者对应蛋糕订单介入的三个时刻:开头定配方、中途试吃调整、做完再挑。
Q9. 影响性质约束生成效果的因素有哪些?
- A.约束注入的时机← 正确答案
- B.引导强度的设置← 正确答案
- C.有效性校验方式← 正确答案
- D.数据集图片尺寸
答案:ABC。注入时机决定生成分布是否主动偏移,引导强度决定命中与有效的平衡,有效性校验决定废分子的过滤能力。数据集图片尺寸对分子生成没有意义。好比订单介入时机、加糖多少、质检严格程度都影响出品,而盘子颜色无关紧要。
Q10. 为提升生成分子的可合成性,可选优化方向是?
- A.加入合成路径约束← 正确答案
- B.引入逆合成评估器← 正确答案
- C.忽略化学价规则
- D.只追求性质命中
答案:AB。可合成性优化要“额外引入合成可行性”的约束与评估,A 和 B 都是常见做法。忽略化学价规则会让分子连基本有效性都没有,只追求性质命中则会产出“理论上完美、实际做不出”的分子——就像订单上写着彩虹色,现实中根本没有这种食材。