如何制作一个Python有机化学逆合成生成器?
我正在通过编写一个简单的程序来学习Python,这个程序可以生成有机化学学生在考试中常见的一种练习题:逆合成问题。
如果你不太了解这种问题:学生会被给出一系列化学反应的初始物质和最终物质,然后需要确定为了得到最终产品,对初始反应物进行了哪些试剂和反应。
有时候,你只会得到最终产品,然后被要求列出合成所需的反应,通常会给出一些条件(比如只能从一个含有5个碳的化合物开始,或者只能使用醇等)。
到目前为止,我做了一些研究,觉得使用RDkit和Python是个不错的起点。我的计划是使用SMILE格式来读取分子(因为我可以像处理字符串一样操作它),然后为每个反应定义函数,最后我需要一个化学物质的数据库,程序可以从中随机选择物质(作为问题中的初始和最终物质)。程序会从数据库中随机选择一个物质,对其进行一系列反应(用户指定3到5个),然后显示最终产品。用户自己解决这个问题,程序再展示它所采取的路径(使用中间体的图像并打印出获得它们所用的试剂)。听起来简单,原则上是这样。
但是一旦我开始实际编写这些函数,就遇到了一些问题。首先,为每一个反应写一个函数非常繁琐;其次,虽然SMILE几乎可以处理所有分子复杂性(立体化学、几何等),但某些分子有多种形式,我在保持反应特定性上遇到了麻烦。第三,我使用“替换”方法来操作SMILE字符串,这在我想要让某些区域特异性反应变得通用时会出问题。
举个例子:Sn2反应与初级卤代烷反应良好,但与三级卤代烷反应就不好(因为空间位阻),我该如何为这个反应创建一个函数呢?
还有一个问题,我希望反应能根据各自的试剂进行标记,因此我给函数命名时使用了所用的试剂。但当有些试剂可以有很多不同形式时(比如Grignard试剂),这就变得麻烦了。
我觉得有更好、更不重复和繁琐的方法来处理这个问题。希望能得到一些指引。
2 个回答
如果你能找一些免费的,或者如果可能的话,找一些商业软件(用Python写的),来解决相同或相似的问题,那会很有帮助。你可以学习它的功能、解决问题的方法,尽量获取它的源代码。我发现这样做在很多方面都很有帮助。