发明名称 一种基于非线性共轭梯度法的工业过程动态优化系统及方法
摘要 一种基于非线性共轭梯度法的工业过程动态优化系统,包括与工业过程对象连接的现场智能仪表、DCS系统和上位机;上位机包括:约束处理模块,用于处理优化过程中的控制变量边界约束;初始化处理模块,用于初始参数的设置;ODE求解模块,用于求解动态优化问题的常微分方程组;迭代优化模块,用于搜寻使目标函数J最优的决策向量w;收敛判断模块,用于判断当前迭代得到的目标值与前一次迭代所得目标值的误差绝对值是否小于等于设定的收敛精度ξ,若成立,将当前的最优决策向量w*、最优目标值J*和迭代次数k保存。以及提供一种基于非线性共轭梯度法的工业过程动态优化方法。本发明能同时满足在线动态优化求解高效率、高精度。
申请公布号 CN101763087A 申请公布日期 2010.06.30
申请号 CN200910155694.5 申请日期 2009.12.29
申请人 浙江大学 发明人 刘兴高;陈珑
分类号 G05B19/418(2006.01)I 主分类号 G05B19/418(2006.01)I
代理机构 杭州天正专利事务所有限公司 33201 代理人 王兵;王利强
主权项 1.一种基于非线性共轭梯度法的工业过程动态优化系统,包括与工业过程对象连接的现场智能仪表、DCS系统和上位机;所述的DCS系统包括操作站和数据库;所述现场智能仪表与DCS系统连接,所述DCS系统与上位机连接,其特征在于:所述的上位机包括:约束处理模块,用于处理优化过程中的控制变量边界约束,采用以下转换方程:u(t)=0.5(u<sub>max</sub>-u<sub>min</sub>)×{sin[w(t)]+1}+u<sub>min</sub>    (1)将带有边界约束u<sub>min</sub>≤u(t)≤u<sub>max</sub>的控制变量u(t)转化为不受边界约束的变量w(t),其中下标min、max分别表示最小值和最大值,u<sub>min</sub>、u<sub>max</sub>分别对应控制变量的下界和上界,并将w(t)作为优化问题的决策变量进行求解;初始化处理模块,用于初始参数的设置,决策变量w(t)的离散化和初始赋值,具体步骤如下:[3.1]设置判断迭代优化是否终止的收敛精度值ξ,当优化目标值迭代误差小于ξ时,停止迭代;取迭代次数k初值为0;[3.2]将时间域[t<sub>0</sub>,tf]平均分成n小段:[t<sub>0</sub>,t<sub>1</sub>],[t<sub>1</sub>,t<sub>2</sub>],…,[t<sub>n-1</sub>,t<sub>n</sub>];每个时间段的长度为h=(tf-t<sub>0</sub>)/n;[3.3]对决策变量w(t)在[3.2]所述时间分段上进行离散化,将w(t)替换为由n个分段常值组成的向量w,并选取任意常数向量作为决策向量的初始值w<sup>0</sup>;[3.4]设置一维搜索的初始步长α,并设定一维搜索的相关参数α1,α2,p,q;ODE求解模块,用于求解动态优化问题的常微分方程组,为迭代优化过程的梯度计算和收敛条件判断做准备,采取以下步骤来完成:[4.1]数值求解状态方程:<maths num="0001"><![CDATA[<math><mrow><mfrac><mrow><mi>dx</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow></mrow><mi>dt</mi></mfrac><mo>=</mo><mi>f</mi><mo>[</mo><mi>x</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>,</mo><mi>w</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>,</mo><mi>t</mi><mo>]</mo></mrow></math>]]></maths>边界条件:<maths num="0002"><![CDATA[<math><mrow><mi>x</mi><mrow><mo>(</mo><msub><mi>t</mi><mn>0</mn></msub><mo>)</mo></mrow><mo>=</mo><mi>x</mi><mn>0</mn><mo>;</mo><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>2</mn><mo>)</mo></mrow></mrow></math>]]></maths>其中f表示微分函数向量,x(t)为由m个状态变量组成的向量,x<sub>0</sub>为状态向量x在初始时刻t<sub>0</sub>的值,采用龙格库塔法由初始值x(t<sub>0</sub>)正向积分求出;[4.2]数值求解协态方程:<maths num="0003"><![CDATA[<math><mrow><mfrac><mrow><mi>d&lambda;</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow></mrow><mi>dt</mi></mfrac><mo>=</mo><mo>-</mo><mfrac><mrow><mo>&PartialD;</mo><mi>&psi;</mi><mo>[</mo><mi>x</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>,</mo><mi>w</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>,</mo><mi>t</mi><mo>]</mo></mrow><mrow><mo>&PartialD;</mo><mi>x</mi></mrow></mfrac><mo>-</mo><mi>&lambda;</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>&CenterDot;</mo><mfrac><mrow><mo>&PartialD;</mo><mi>f</mi><mo>[</mo><mi>x</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>,</mo><mi>w</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>,</mo><mi>t</mi><mo>]</mo></mrow><mrow><mo>&PartialD;</mo><mi>x</mi></mrow></mfrac><mo>,</mo></mrow></math>]]></maths>含边界条件:<img file="F2009101556945C00014.GIF" wi="453" he="100" />其中φ、ψ分别是目标函数<maths num="0004"><![CDATA[<math><mrow><mi>J</mi><mo>=</mo><mi>&phi;</mi><mo>[</mo><mi>x</mi><mrow><mo>(</mo><mi>tf</mi><mo>)</mo></mrow><mo>]</mo><mo>+</mo><msubsup><mo>&Integral;</mo><mn>0</mn><mi>tf</mi></msubsup><mi>&psi;</mi><mo>[</mo><mi>x</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>,</mo><mi>w</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>,</mo><mi>t</mi><mo>]</mo><mi>dt</mi></mrow></math>]]></maths>中的非积分项和定积分项,λ(t)为由m个协态变量组成的向量,λ(tf)为协态向量λ在终端时刻tf的值,采用龙格库塔法由终端值λ(tf)通过反向积分求出;[4.3]由[4.1]、[4.2]所得的状态向量和协态向量计算出目标函数值:<maths num="0005"><![CDATA[<math><mrow><mi>J</mi><mo>=</mo><mi>&phi;</mi><mo>[</mo><mi>x</mi><mrow><mo>(</mo><mi>tf</mi><mo>)</mo></mrow><mo>]</mo><mo>+</mo><msubsup><mo>&Integral;</mo><mn>0</mn><mi>tf</mi></msubsup><mi>&psi;</mi><mo>[</mo><mi>x</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>,</mo><mi>w</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>,</mo><mi>t</mi><mo>]</mo><mi>dt</mi><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>4</mn><mo>)</mo></mrow></mrow></math>]]></maths>迭代优化模块,用于搜寻使目标函数J最优的决策向量w,采取以下步骤来完成,上标k均表示迭代次数,初始赋值为零,获取ODE求解模块输出的状态向量、协态向量及目标函数值,即当前目标值J<sup>k</sup>,进行如下操作:[6.1]计算当前迭代的梯度g<sup>k</sup>,其中,x(t)和λ(t)分别为ODE求解模块得出的当前状态向量和协态向量,上标T表示转置:<maths num="0006"><![CDATA[<math><mrow><msup><mi>g</mi><mi>k</mi></msup><mo>=</mo><mo>{</mo><mfrac><mrow><mo>&PartialD;</mo><mi>&psi;</mi><mo>[</mo><mi>x</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>,</mo><mi>w</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>,</mo><mi>t</mi><mo>]</mo></mrow><mrow><mo>&PartialD;</mo><mi>w</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow></mrow></mfrac><mo>+</mo><mi>&lambda;</mi><msup><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mi>T</mi></msup><mo>&CenterDot;</mo><mfrac><mrow><mo>&PartialD;</mo><mi>f</mi><mo>[</mo><mi>x</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>,</mo><mi>w</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>,</mo><mi>t</mi><mo>]</mo></mrow><mrow><mo>&PartialD;</mo><mi>w</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow></mrow></mfrac><mo>}</mo><msub><mo>|</mo><mrow><mi>w</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>=</mo><msup><mi>w</mi><mi>k</mi></msup></mrow></msub><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>5</mn><mo>)</mo></mrow></mrow></math>]]></maths>[6.2]计算当前迭代的搜索方向d<sup>k</sup>,d<sup>k-1</sup>表示第k-1次迭代的搜索方向,β<sup>k</sup>是中间参数:<maths num="0007"><![CDATA[<math><mrow><msup><mi>d</mi><mi>k</mi></msup><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mo>-</mo><msup><mi>g</mi><mi>k</mi></msup><mo>,</mo><mi>k</mi><mo>=</mo><mn>1</mn><mo>;</mo></mtd></mtr><mtr><mtd><mo>-</mo><msup><mi>g</mi><mi>k</mi></msup><mo>+</mo><msup><mi>&beta;</mi><mi>k</mi></msup><msup><mi>d</mi><mrow><mi>k</mi><mo>-</mo><mn>1</mn></mrow></msup><mo>,</mo><mi>k</mi><mo>&GreaterEqual;</mo><mn>2</mn><mo>.</mo></mtd></mtr></mtable></mfenced></mrow></math>]]></maths>其中,<maths num="0008"><![CDATA[<math><mrow><msup><mi>&beta;</mi><mi>k</mi></msup><mo>=</mo><mfrac><mrow><msup><mrow><mo>(</mo><msup><mi>g</mi><mi>k</mi></msup><mo>)</mo></mrow><mi>T</mi></msup><mrow><mo>(</mo><msup><mi>g</mi><mi>k</mi></msup><mo>-</mo><msup><mi>g</mi><mrow><mi>k</mi><mo>-</mo><mn>1</mn></mrow></msup><mo>)</mo></mrow></mrow><msup><mrow><mo>|</mo><mo>|</mo><msup><mi>g</mi><mrow><mi>k</mi><mo>-</mo><mn>1</mn></mrow></msup><mo>|</mo><mo>|</mo></mrow><mn>2</mn></msup></mfrac><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>6</mn><mo>)</mo></mrow></mrow></math>]]></maths>[6.3]进行一维搜索,从当前的迭代点w<sup>k</sup>出发,沿方向d<sup>k</sup>作一维搜索,计算出最佳步长α<sup>*</sup>,满足<maths num="0009"><![CDATA[<math><mrow><mi>H</mi><mrow><mo>(</mo><msup><mi>w</mi><mi>k</mi></msup><mo>+</mo><msup><mi>&alpha;</mi><mo>*</mo></msup><mo>&CenterDot;</mo><msup><mi>d</mi><mi>k</mi></msup><mo>)</mo></mrow><mo>=</mo><munder><mi>min</mi><mrow><mi>&alpha;</mi><mo>&GreaterEqual;</mo><mn>0</mn></mrow></munder><mi>H</mi><mrow><mo>(</mo><msup><mi>w</mi><mi>k</mi></msup><mo>+</mo><mi>&alpha;</mi><mo>&CenterDot;</mo><msup><mi>d</mi><mi>k</mi></msup><mo>)</mo></mrow><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>7</mn><mo>)</mo></mrow></mrow></math>]]></maths>其中H表示哈密顿函数,由下式计算出,<maths num="0010"><![CDATA[<math><munder><mi>min</mi><mrow><mi>&alpha;</mi><mo>&GreaterEqual;</mo><mn>0</mn></mrow></munder></math>]]></maths>表示在[0,+∞)中寻找使H达到最小值的步长α;H=ψ[x(t),w(t),t]+λ(t)<sup>T</sup>f[x(t),w(t),t]    (8)[6.4]取当前迭代的搜索步长<maths num="0011"><![CDATA[<math><mrow><msup><mi>&alpha;</mi><mi>k</mi></msup><mo>=</mo><mi>min</mi><mrow><mo>(</mo><mfrac><mi>&pi;</mi><mrow><mi>B</mi><mo>&CenterDot;</mo><mo>|</mo><mo>|</mo><msup><mi>d</mi><mi>k</mi></msup><mo>|</mo><mo>|</mo></mrow></mfrac><mo>,</mo><msup><mi>&alpha;</mi><mo>*</mo></msup><mo>)</mo></mrow><mo>,</mo></mrow></math>]]></maths>B取区间[5,8]内的整数值;[6.5]计算下一个迭代点w<sup>k+1</sup>=w<sup>k</sup>+α<sup>k</sup>·d<sup>k</sup>,增加迭代次数:k=k+1,并把新的迭代点传给ODE求解模块以计算新的状态向量、协态向量及目标函数值J<sup>k+1</sup>;收敛判断模块,用于判定是否终止迭代计算,即判断当前迭代得到的目标值与前一次迭代所得目标值的误差绝对值是否小于等于设定的收敛精度ξ,即收敛条件为:<maths num="0012"><![CDATA[<math><mrow><msup><mi>J</mi><mi>k</mi></msup><mo>-</mo><msup><mi>J</mi><mrow><mi>k</mi><mo>+</mo><mn>1</mn></mrow></msup><mo>|</mo><mo>&le;</mo><mi>&xi;</mi><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>14</mn><mo>)</mo></mrow></mrow></math>]]></maths>其中,J<sup>k</sup>和J<sup>k+1</sup>分别表示第k次和第k+1次迭代计算得到的目标函数值;若上式(14)成立,则将当前的最优决策向量w<sup>*</sup>、最优目标值J<sup>*</sup>以及迭代次数k保存到结果输出模块;若上式(14)不成立,则保存当前目标值J<sup>k</sup>,然后转入迭代优化模块进行下一次迭代求解。
地址 310027 浙江省杭州市西湖区浙大路38号