过渡态反应路径的计算方法及相关问题.docx

上传人:b****1 文档编号:145956 上传时间:2023-04-28 格式:DOCX 页数:32 大小:43.40KB
下载 相关 举报
过渡态反应路径的计算方法及相关问题.docx_第1页
第1页 / 共32页
过渡态反应路径的计算方法及相关问题.docx_第2页
第2页 / 共32页
过渡态反应路径的计算方法及相关问题.docx_第3页
第3页 / 共32页
过渡态反应路径的计算方法及相关问题.docx_第4页
第4页 / 共32页
过渡态反应路径的计算方法及相关问题.docx_第5页
第5页 / 共32页
过渡态反应路径的计算方法及相关问题.docx_第6页
第6页 / 共32页
过渡态反应路径的计算方法及相关问题.docx_第7页
第7页 / 共32页
过渡态反应路径的计算方法及相关问题.docx_第8页
第8页 / 共32页
过渡态反应路径的计算方法及相关问题.docx_第9页
第9页 / 共32页
过渡态反应路径的计算方法及相关问题.docx_第10页
第10页 / 共32页
过渡态反应路径的计算方法及相关问题.docx_第11页
第11页 / 共32页
过渡态反应路径的计算方法及相关问题.docx_第12页
第12页 / 共32页
过渡态反应路径的计算方法及相关问题.docx_第13页
第13页 / 共32页
过渡态反应路径的计算方法及相关问题.docx_第14页
第14页 / 共32页
过渡态反应路径的计算方法及相关问题.docx_第15页
第15页 / 共32页
过渡态反应路径的计算方法及相关问题.docx_第16页
第16页 / 共32页
过渡态反应路径的计算方法及相关问题.docx_第17页
第17页 / 共32页
过渡态反应路径的计算方法及相关问题.docx_第18页
第18页 / 共32页
过渡态反应路径的计算方法及相关问题.docx_第19页
第19页 / 共32页
过渡态反应路径的计算方法及相关问题.docx_第20页
第20页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

过渡态反应路径的计算方法及相关问题.docx

《过渡态反应路径的计算方法及相关问题.docx》由会员分享,可在线阅读,更多相关《过渡态反应路径的计算方法及相关问题.docx(32页珍藏版)》请在冰点文库上搜索。

过渡态反应路径的计算方法及相关问题.docx

过渡态反应路径的计算方法及相关问题

过渡态、反应路径的计算方法及相关问题

Sobereva

DepartmentofChemistry,UniversityofScienceandTechnologyBeijing,Beijing100083,China

前言:

本文主要介绍过渡态、反应路径的计算方法,并讨论相关问题。

由于这类算法极多,可以互相组合,限于精力不可能面面俱到展开,所以只介绍常用,或者实用价值有限但有启发性的方法。

文中图片来自相关文献,做了一定修改。

由于本文作为帖子发布,文中无法插入复杂公式,故文中尽量将公式转化为文字描述并加以解释,这样必然不如公式形式严谨,而且过于复杂的公式只能略过,但我想这样做的好处是更易把握方法的梗概,有兴趣可以进一步阅读原文了解细节。

对于Gaussian中可以实现的方法,文中对其在Gaussian中的使用进行了一些讨论,希望能纠正一些网上流传的误区。

虽然绝大多数人不专门研究计算方法,其中很多方法也不会用到,但多了解一下对开阔思路是很有好处的。

文中指的“反应”包括构象变化、异构化、单分子反应等任何涉及到过渡态的变化过程。

“反应物”与“产物”泛指这些过程的初态和末态。

“优化”若未注明,包括优化至极小点和优化至过渡态。

势能面是高维的,但为了直观以及表述方便,文中一般用二维势能面模型来讨论,应推广至高维情况。

限于纯文本格式,向量、矩阵无法加粗表示,但容易自行判断。

目录:

1.过渡态

2.过渡态搜索算法

基于初猜结构的算法

  牛顿-拉弗森法(Newton-Raphson,NR)与准牛顿法(quasi-Newton,QN)

  AH方法(augmentedHessian)

  RFO法(RationalFunctionOptimization,有理函数优化)

  P-RFO法(Partitioned-RFO)

  QA法(QuadraticApproximation,二次逼近)

  TRIM法(trust-regionimageminimization,置信区域镜像最小化)

  在高斯中的常见问题

  GDIIS法(GeometryDirectInversionintheIterativeSubspace)

  梯度模优化(gradientnormminimization)

  Dimer方法

基于反应物与产物结构的算法

  同步转变方法(synchronoustransit,ST)

  STQN方法(CombinedSynchronousTransitandQuasi-NewtonMethods)

  赝坐标法(pseudoreactioncoordinate)

  DHS方法(Dewar-Healy-Stewart,亦称Saddle方法)与LTP方法(Line-Then-Plane)

  Ridge方法

  Step-and-Slide方法

  Müller-Brown方法

  CI-NEB、ANEBA方法

基于反应物结构的算法

  最缓上升法(leaststeepascent,shallowestascent)

  本征向量/本征值跟踪法(eigenvector/eigenvaluefollowing,EF。

也称modewalking/modefollowing/Walkingupvalleys)

  ARTn(activation-relaxationtechniquenouveau)

  梯度极值法(Gradientextremal,GE)

  约化梯度跟踪(reducedgradientfollowing,RGF)

  等势面搜索法(IsopotenialSearching)

  球形优化(Sphereoptimization)

全势能面扫描

3.过渡态相关问题

无过渡态的反应途径(barrierlessreactionpathways)

Hammond-Leffler假设

对称性问题

溶剂效应

计算过渡态的建议流程

4.内禀反应坐标(intrinsicreactioncoordinate,IRC)

算法

最陡下降法(Steepestdescent)

IMK方法(Ishida-Morokuma-Kormornicki)

Müller-Brown方法

GS(Gonzalez-Schlegel)方法

方法

Dragmethod方法

PEB方法(plainelasticband)

Elber-Karplus方法

SPW方法(Self-PenaltyWalk)

LUP方法(LocallyUpdatedplanes)

NEB方法(NudgedElasticBand)

DNEB方法(DoubleNudgedElasticBand)

String方法

SimplifiedString方法

寻找过渡态的chain-of-state方法

  CI-NEB方法

  ANEBA方法(adaptivenudgedelasticbandapproach)

chain-of-states方法的一些特点

高斯中opt关键字的path=M方法

CPK方法(ConjugatePeakRefinement)

1.过渡态

过渡态结构指的是势能面上反应路径上的能量最高点,它通过最小能量路径(minimumenergypath,MEP)连接着反应物和产物的结构(如果是多步反应的机理,则这里所指反应物或产物包括中间体)。

对于多分子之间的反应,更确切来讲过渡态结构连接的是它们由无穷远接近后因为范德华力和静电力形成的复合物结构,以及反应完毕但尚未无限远离时的复合物结构。

确定过渡态有助于了解反应机理,以及通过势垒高度计算反应速率。

一般来讲,势垒小于21kcal/mol就可以在室温下发生。

在势能面上,过渡态结构的能量对坐标的一阶导数为0,只有在反应坐标方向上曲率(对坐标二阶导数)为负,而其它方向上皆为正,是能量面上的一阶鞍点。

过渡态结构的能量二阶导数矩阵(Hessian矩阵)的本征值仅有一个负值,这个负值也就是过渡态拥有唯一虚频的来源。

若将分子振动简化成谐振子模型,这个负值便是频率公式中的力常数,开根号后即得虚数。

分子构象转变、化学反应过程中往往都有过渡态的存在,即这个过程在势能面上的运动往往都会经历满足上述条件的一点。

化学反应的过渡态更确切应当成为“反应过渡态”。

需要注意的是化学反应未必都经历过渡态结构。

由于过渡态结构存在时间极短,所以很难通过实验方法获得,直到飞秒脉冲激光光谱的出现才使检验反应机理为可能。

计算化学方法在目前是预测过渡态的最有力武器,尽管计算上仍有一些困难,比如其附近势能面相对于平衡结构更为平坦得多、低水平方法难以准确描述、难以预测过渡态结构、缺乏绝对可靠的方法(如优化到能量极小点可用的最陡下降法)等。

搜索过渡态的算法一般结合从头算、DFT方法,在半经验、或者小基组条件下,难以像描述平衡结构一样正确描述过渡态结构,使得计算尺度受到了限制。

结合分子力场可以描述构象变化的过渡态,但不适用描述反应过渡态,因为大部分分子力场的势函数不允许分子拓扑结构的改变,虽然也有一些力场如ReaxFF可以支持,有的力场还有对应的过渡态原子类型,但目前来看适用面仍然较窄,而且不够精确,尽管更为快速。

注:

严格来说,“过渡结构”是指势能面上反应路径上的能量最高点,而“过渡态”是指自由能面上反应路径上的能量最高点,由于自由能变主要贡献自势能部分,所以多数情况二者结构近似一致。

但随着温度升高,往往熵变的贡献导致自由能面与势能面形状发生明显偏离,从而导致过渡结构与过渡态明显偏离,两个词就不能混用了。

但本文不涉及相关问题,故文中过渡态、过渡结构一律指势能面上反应路径上的能量最高点。

2.过渡态搜索算法

基于初猜结构的算法

牛顿-拉弗森法(Newton-Raphson,NR)与准牛顿法(quasi-Newton,QN)

NR法是寻找函数一阶导数为0(驻点)位置的方法。

通过对能量函数的泰勒级数的二阶近似展开,然后使用稳态条件dE/dr=0,可导出步进公式:

下一步的坐标向量=当前坐标向量-能量一阶导数向量*Hessian矩阵的逆矩阵。

在势能面上以NR法最终找到的结果是与初猜位置Hessian矩阵本征值正负号一致、离初猜结构最近的驻点,由于能量极小点、过渡态和高阶鞍点的能量一阶导数皆为0,故都可以用NR法寻找。

对于纯二次形函数NR法仅需一步即可找到正确位置,而势能面远比之复杂,所以需要反复走步直至收敛。

也因为势能面这个特点,为了改进优化,实际应用中NR法一般还结合线搜索步(linesearch),对于优化至极小点,就是找当前点与NR法算出来的下一点的连线上的能量极小点作为实际下一步结构;若优化至过渡态,且连线方向主要指向过渡态,则找的是连线上能量极大点,若主要指向其它方向则找连线的能量极小点,若指向二者程度均等则一般不做线搜索。

由于精确的线搜索很花时间,所以一般只是在连线的当前位置附近计算几个点的能量,以高阶多项式拟和后取其最小/最大点。

NR法每一步需要计算Hessian矩阵并且求其逆,所以十分昂贵。

QN法与NR法的走步原理一样,但Hessian矩阵最初是用低级或经验方法猜出来的,每一步优化中通过当前及前一步的梯度和坐标对Hessian矩阵逆矩阵逐渐修正。

由于只需计算一阶导数,即便Hessian矩阵不准确造成所需收敛步数增加,但一般仍比NR法速度快得多。

QN法泛指基于此原理的一类方法,常用的是BFGS(BroydenFletcherGoldfarbShanno),此法对Hessian的修正保持其对称性和正定性,最适合几何优化,但显然不能用于找过渡态。

还有DFP(Davidon-Fletcher-Powell),MS(Murtagh-Sargent,亦称symmetricrank1,SR1),PSB(Powell-symmetric-Broyden)。

也有混合方法,如Bofill法是PSB和MS法对Hessian修正量的权重线性组合,比二者独立使用更优,权重系数通过位移、梯度改变量和当前Hessian计算得到,它对Hessian的修正不强制正定,很适宜搜索过渡态。

将NR步进公式放到Hessian本征向量空间下其意义更为明显(此时Hessian为对角矩阵),可看出在每个方向上的位移就是这个方向势能的负梯度除以对应的本征值,比如在i方向上的位移可写为ΔX(i)=-g(i)/h(i),在受力越大、越平坦的方向位移越大。

每一步实际位移就是这些方向上位移的矢量和。

对于寻找过渡态,因为虚频方向对应Hessian本征值为负,使位移为受力相反方向,所以NR法在过渡态附近每一步都是使虚频方向能量升高,而在其它正交的方向朝着能量降低的方向位移,通过这个原理步进到过渡态。

若有n个虚频,则NR法就在n个方向升高能量而其它方向降低能量找到n阶鞍点。

由于NR法的这个特点,为找到正确类型的驻点,初猜结构必须在目标结构的二次区域(quadraticregion)内。

所谓的二次区域,是指驻点附近保持Hessian矩阵本征值符号不变的区域,它的形状可以用多变量的二次函数近似描述,例如二维势能面情况下这样的区域可以用F(x,y)=A*x^2+B*y^2+C*x+D*y+E*x*y来近似描述。

对于能量极小点,就是指初猜点在目标结构附近Hessian矩阵为正定矩阵的范围;对于找过渡态,就需要初猜点在它附近含有且仅含有一个负本征值的范围内。

并且这个范围内不能有其它同类驻点比目标结构距离初猜结构更近。

NR法方便之处是只需要提供一个初猜结构即可,但是由于过渡态二次区域很小(相对于能量极小点来讲),复杂反应过渡态又不容易估计,故对使用者的直觉和经验有一定要求,即便是老手,也往往需要反复尝试。

NR法对初猜结构比较敏感,离过渡态越近所需收敛步数越少,成功机率越高。

模版法可以帮助给出合理的初猜,也就是如果已经知道其它机理相同的反应的过渡态结构,可以保持反应位点部分的结构不变而替换周围的原子,使之变成自己要研究的化合物反应的初猜结构。

AH方法(AugmentedHessian)

AH方法并不是独立的寻找过渡态的方法,而是通过修改原始Hessian矩阵来调整NR法步进的长度和方向的一种方法。

在NR法的步进公式中加入了一个移位参数λ,式子变为ΔX(i,λ)=-g(i)/(h(i)-λ),NR法相当于λ等于0时的特例。

λ控制着每步步进距离,它与h(i)的相对大小也控制着这个坐标上的步进方向。

根据设定λ方法的不同,常见的有RFO、P-RFO和QA/TRIM。

这些方法每一步也使用QN方法来快速地更新Hessian。

下面提及的置信半径R(Trustradius)是指二阶泰勒级数展开这种近似的合理的区域,可以在优化过程中固定也可以动态改变,比如下一步位置的实际能量与使用二阶泰勒级数展开预测的能量符合较好则加大R,反之减小。

优化的每一步移动距离不应超过R,否则可能进入二阶泰勒级数展开近似的失效区域,NR法在势能面平坦的时候容易超过这个范围,应调整λ避免。

RFO法(RationalFunctionOptimization,有理函数优化)

对能量函数根据有理近似展开,而不是NR法的二阶泰勒级数近似展开,可推得与AH方法形式相同的步进公式。

确定其中λ的公式是λ=∑(g(i)^2/(h(i)-λ)),g(i)和h(i)代表此方向的梯度和本征值,加和是对所有本征向量方向加和。

通过迭代方法会解出N+1个λ(N代表势能面维数),将λ按大小排列,则有λ(i)≤h(i)≤λ(i+1)。

故选其中最小的λ可使各个方向位移公式的(h(i)-λ)项皆为正,保证每步位移都向着极小点。

选其中大于m个Hessian本征值的λ,将会在本征值最低的m个方向上沿其上的受力反方向位移提升能量,在其余N-m个方向上降低能量,由此确保优化到m阶鞍点,若m为1即用来找过渡态。

所以用了这个方法寻找指定类型驻点不再像NR法对初猜位置Hessian本征值符号有要求,而是直接通过选择λ来设定向着何种鞍点位移。

如果每步步长度超过了R,则乘以一个小于1的因子来减小步长。

值得一提的是,λ与势能面维数N的平方根近似成正比,随着体系尺度的增大,RFO的λ对NR法的二次近似就会趋现“校正过度”情况,产生大小不一致问题,可使用SIRFO(SizeindependentRFO)方法解决,即AH走步公式中的λ改为λ/N^。

P-RFO法(Partitioned-RFO)

专用于优化过渡态,效率比RFO更高。

RFO对所有方向的步进都使用同一个λ,而在P-RFO中在指向过渡态的方向使用独立计算的λ(TS),λ(TS)=g(TS)^2/(h(TS)-λ(TS)),应选这个一元二次方程的最大的解,可保证在这个方向上升高能量。

其余方向λ的确定和RFO的公式一样,加和就不再包含指向过渡态的方向,并且选最小的λ解以使这些方向能量降低。

这里所谓指向过渡态的方向一般是指最低本征值的方向,在上述RFO方法m为1时也是如此假设(限于其形式RFO也只能用这最低模式),但有时会是其它的非最低的模式,P-RFO也可以将这样的模式作为指向过渡态的模式,见后文EF方法的讨论。

QA法(QuadraticApproximation,二次逼近)

确定λ的公式是(ΔX(i))^2=∑(-g(i)/(h(i)-λ))^2=R^2,也就是说每一步移动的距离恰好是置信半径,这样步进速度较快。

若优化到过渡态,计算λ公式的加和中指向过渡态本征向量的那一项的λ改为-λ,即ΔX(TS)=-g(TS)/(h(TS)+λ)。

TRIM法(trust-regionimageminimization,置信区域镜像最小化)

这个方法假设Hessian本征值最小的方向的梯度和曲率符号与原本相反,而其它方向不变。

经过这样的变化后原来的过渡态位置就成为了能量极小点(过渡态的image),这样就可以通过优化到极小点而得到过渡态。

将TRIM的假设g(TS)'=-g(TS),h(TS)'=-h(TS)代入AH方法的步进公式ΔX(i,λ)=-g(i)/(h(i)-λ),再使分子分母同乘以-1,可知在过渡态方向上的步进公式与其它方向区别仅在于反转了λ的符号。

又由于TRIM也是通过调整λ使步进长度等于为置信半径,所以在公式的形式上与QA法找过渡态的公式完全一致,QA与TRIM可互为同义词。

通过如上调整AH方法引入的λ可使NR法的步进更有效率、更稳定,还可以通过它改变步进公式在不同方向上的分母项符号,使优化过渡态的初猜点不限于过渡态的二次区域。

可直接指定沿某个振动模式升高能量来找过渡态,即便当前点这个方向的Hessian本征值可能是正值,例如从极小点开始跟踪至过渡态,见后文的EF方法。

在高斯中的常见问题

高斯中opt=ts是使用Berny算法来找过渡态,需要提供一个初猜结构。

Berny默认的走步的方法是RFO/P-RFO(分别对于优化至极小值/鞍点),若加了Newton选项,则走步基于NR法。

每一步对Hessian矩阵的更新方法以UpdateMethod选项指定,寻找极小点时默认用BFGS,找过渡态时默认用Bofill。

Berny算法还包括一些细节步骤在内,比如投影掉被冻结的变量、更新置信半径、设定了线搜索过程中几种方案等等,详见手册opt关键字。

使用了每步修正Hessian的准牛顿法后,初猜的Hessian矩阵质量明显影响结构收敛速度,它的不准确容易导致搜索过渡态失败(在高斯中默认使用价键力场得到Hessian)。

这种情况需要昂贵的calcfc关键字以当前方法水平计算最初的Hessian矩阵,若使用的方法在程序中支持解析二阶导数,速度会较好。

或者用readfc来读取包含了Hessian矩阵信息的chk文件,可以先使用低水平方法进行简正振动分析得到chk文件,再将之读入作为Hessian矩阵初猜,能够节约时间,但前提是此势能面对方法等级不敏感(一般如此)。

使用了更准确的初猜后不仅可以增加找到过渡态的成功机率,还有助于在更短的优化步数内达到收敛标准。

若使用calcall,则每一点都重新准确计算Hession,会更为可靠,但极为昂贵。

高斯中berny方法寻找过渡态默认每步会检查Hessian矩阵的本征值是否仅有一个为负,如果不符,就会提示“awrongsigneigenvalueinhessianmatrix”,经常一开始就报错,原因是初猜结构不符合这个条件,即便这个初猜通过berny方法最终能够正确优化到过渡态,这时应加noeigentest选项避免本征值符号的检查,不符合要求也继续优化,但因此可能收敛到其它类型驻点。

有时这种情况由初猜的Hessian不准导致,可用calcfc解决。

如果搜索的过渡态出现多个负本征值,可根据适当的虚频(高斯中以负数频率表示)振动方向调整结构以降低能量,直至剩下一个虚频,再重新优化。

高斯中默认的置信半径为bohr,若优化中步长(RFO/P-RFO步)超过就会输出“Maximumstepsize(  exceededinQuadraticsearch”和“Stepsizescaledbyxxx”,即乘以xxx调小步长至置信半径内。

也可以使用iop(1/8=k)将置信半径改为k*bohr(1bohr=埃),调大后往往可以显著减少收敛步数,很适合势能面平坦的大体系。

注意并不是每一步的步长都固定为k*bohr,若没超过置信半径则步长并不因此改变。

寻找极小点时默认为允许动态改变置信半径,此时iop(1/8)设的就是最初的置信半径,对于寻找过渡态默认为关闭此功能(相当于用了NoTrustUpdate),可以使用trustupdate关键字来打开这个功能。

GDIIS法(GeometryDirectInversionintheIterativeSubspace)

GDIIS与DIIS原理一致,但用于几何优化,这个方法趋于收敛到离初始位置最近的驻点,包括过渡态。

下一步坐标X(new)=X"-H'g",H'代表当前步的Hessian逆矩阵,可见公式形式与NR法是一致的,但是X"与g"不再指当前步的坐标和梯度,而是由之前走过的点的坐标X(k)和梯度g(k)插值得到的,X"=∑c(k)X(k),g"=∑c(k)g(k),代入上式即X(new)=∑c(i)(X(i)-H'g(i)),其中∑是对之前全部走过的点加和。

系数c(k)通过使误差向量r的模最小化得到,r=∑c(k)e(k),并以∑c(k)=1为限制条件。

e(k)常见有两种定义,一种是e(k)=-H'g(k),另一种更常用,是e(k)=g(k),可看出GDIIS利用的是已经搜索过的子空间中坐标与梯度的相关性,目的是估出梯度(即误差向量)的模尽可能小的坐标,这一点与后述的梯度模方法相似。

此方法缺点是由于势能面复杂,步进中容易被拉到已经过的势能面的其它驻点而不能到达指定类型驻点,还容易走到类似肩膀形状的拐点,梯度虽小却不为0,由于不能达到收敛标准而反复在此处震荡。

另外随优化步数增加,误差向量数目逐渐加大,会逐渐出现的误差向量之间的线性相关,导致伪收敛和数值不稳定问题。

在改进的方法中将GDIIS与更可靠的RFO方法结合,比较二者的步进方向和长度,并检验GDIIS中的组合系数c,根据一定规则来决定每一步对之前走过的点的保留方式,必要时全部舍去而重新开始GDIIS。

Gaussian中用的这种改进的GDIIS方法解决了上述问题同时提高了效率,速度等于或优于RFO方法,尤其是以低水平对势能面平坦的大体系优化时更为突出。

GDIIS计算量小,对Hessian矩阵很不敏感,可以在优化中不更新,也可以用QN法更新来改善性能。

此方法自Gaussian98起就是默认的半经验优化算法,其它方法下也可以用OPT的gdiis关键词打开。

梯度模优化(gradientnormminimization)

势能面上的驻点,包括能量极小点、过渡态和高阶鞍点的势能梯度都为0,所以在相应于势能面的梯度模面上进行优化找到数值为0的点,经过Hessian矩阵本征值符号的检验,就能得到过渡态。

这相当于把搜索过渡态问题转化为了能量极小化问题,就有了更可靠的算法可用。

(注:

梯度模指的是势能梯度在各个维度分量平方和的平方根,即梯度大小的绝对值)。

但是寻找数值更小点的优化方法比如最陡下降法只能找到离初始位置最近的极小点,若找到的梯度模面上的极小点数值大于0则是势能面肩膀形拐点,没有什么用处,而这样的点收敛半径往往很大,例如图中在x=2至8的区域内都会收敛到函数拐点,只有提供的初猜结构在x=1和9附近很小的范围内才会收敛到过渡态,收敛半径太小,难以提供合理初猜。

梯度模面上还多出一些极大点,如x=处,若使用收敛更快的NR法找极小点还容易收敛到这样没有意义的点上。

基于这些原因,梯度模法很少使用。

[图1]原函数与它的梯度模曲线。

Dimer方法

Dimer方法是一种高效的定位过渡态的方法。

这个方法定义了由两个点R1和R2组成的一个Dimer,能量和所受势能力(由原始的势能面梯度造成受力,下同)分别为E1和E2、F1和F2。

两个点间距为2ΔR,ΔR为定值。

这两点的中间点为R,其受力F(R)=(F1+F2)/2。

Dimer的总能量为E=(E1+E2)/2。

这个方法的每一步包括平移Dimer和旋转

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2