zoukankan      html  css  js  c++  java
  • 工程优化部分概念

    矩阵行列式计算

    二阶行列式计算

    [det left( egin{matrix} a & b \ c & d end{matrix} ight ) = ad - bc ]

    三阶行列式计算

    [det left ( egin{matrix} a_{11} & a_{12} & a_{13} \ a_{21} & a_{22} & a_{23} \ a_{31} & a_{32} & a_{33} end{matrix} ight) = a_{11}a_{22}a_{33} + a_{12}a_{23}a_{31} + a_{13}a_{21}a_{32} - a_{13}a_{22}a_{31}-a_{12}a_{21}a_{33}-a_{11}a_{23}a_{32} ]

    形式化表述为:(红线为加数,蓝线为减数)

    矩阵的逆的计算

    1. 待定系数法

    令矩阵 (A = left( egin{matrix} 1 & 2 \ -1 & -3 end{matrix} ight)),令所要求解的逆矩阵为(A^{-1} = left( egin{matrix} a & b \ c & d end{matrix} ight))。则有(A*A^{-1} = I),可得到方程组

    [egin{matrix} a + 2c = 1 \ b + 2d = 0 \ -a - 3c = 0 \ -b - 3d = 1 end{matrix} ]

    从而解的(a = 3, b = 2, c = -1, d = -1),即

    [A^{-1} = left( egin{matrix} 3 & 2 \ -1 & -1 end{matrix} ight) ]

    2. 初等变换求逆矩阵

    同样,令矩阵 (A = left( egin{matrix} 1 & 2 \ -1 & -3 end{matrix} ight)),写出它的增广矩阵 (A|E),即矩阵(A)右侧放置一个同阶的单位矩阵,得到一个新矩阵。

    [A|E = left( egin{matrix} 1 & 2 & 1 & 0 \ -1 & -3 & 0 & 1 end{matrix} ight) ]

    对其进行初等变换,使原来(A)处的矩阵变换成为单位矩阵,则原单位矩阵处就变换成了(A^{-1}),变换后的矩阵为:

    [left( egin{matrix} 1 & 0 & 3 & 2 \ 0 & 1 & -1 & -1 end{matrix} ight) ]

    常用的梯度公式

    [(1) f(x) = C(常数), abla f(x) = 0, 即 abla C = 0 ]

    [(2) f(x) = b^{T}x, abla f(x) = b ]

    [(3) f(x) = x^{T}x, abla f(x) = 2x ]

    [(4) f(x) = x^{T}Qx (Q^T=Q), abla f(x) = 2Qx ]

    Taylor展开公式

    (f:R^n ightarrow R)二阶可导,在(x^*)的领域内
    一阶Taylor展开式为

    [f(x) = f(x^*)+( abla f(x^*))^T(x-x^*) + o(||x-x^*||) ]

    二阶Taylor展开式为

    [f(x) = f(x^*)+( abla f(x^*))^T(x-x^*) + frac{1}{2}(x-x^*)^T abla ^2f(x^*)(x-x^*) + o(||x-x^*||) ]

    凸集

    若集合(D)中任意两点的连线段都属于(D),则称(D)为凸集。

    两点(x^1, x^2)连线段上任一点可表示为(x=ax^1+(1-a)x^2,ain[0,1])

    (A,Bsubseteq R^n)是凸集,则(Aigcap B, A + B, A - B)也是凸集。其中(A + B := {a+b:ain A, bin B}), (A-B:={a-b:ain A, b in B}),注意(A igcup B)不一定是凸集。

    (D)是凸集(Longleftrightarrow D)中任意有限多个点的凸组合也属于(D)

    凸函数判定定理
    (D subseteq R^n)为非空开凸集,函数(f:D ightarrow R)(D)上二次可微,则
    (i) (f)(D)上为凸函数 (Longleftrightarrow forall xin D, abla^2f(x))半正定
    (ii) 若(forall x in D, abla^2 f(x))正定,则(f)(D)上为严格凸函数

    对于凸规划
    ( min f(x) )
    ( s.t. g_i(x) leq 0, i=1,2,L,m )

    (overline{x} in D, f in C^1),则(overline{x})为上式的最优解的充要条件为(forall x in D),有

    [(x-overline{x})^T abla f(overline{x}) ge 0) ]

    精确一维搜索

    成功失败法

    步骤1:选取初始点(xin R),初始步长(h gt 0)及精度(epsilon gt 0)(varphi_1 = f(x))
    步骤2:计算 (varphi_2 = f(x+h))
    步骤3:若(varphi_2 < varphi_1),搜索成功, 转步骤4;否则,搜索失败,转步骤5。
    步骤4:令(x:= x + h), (varphi_1 := varphi_2, h := 2h),转步骤2。
    步骤5:判断(|h| < epsilon)?,若(|h| < epsilon)停止迭代,(x^*=x);否则令(h = frac{-h}{4})转步骤2。

    0.618法

    使用四个点来依次缩短区间,当区间长度充分小时,可将区间中点取做极小点的近似点。所选取的四个点分别为(a,b,x_1,x_2),其中,(a,b)分别为区间的下界和上界。(x_1,x_2)的计算符合0.618准则,如下:

    [egin{matrix} x_1 = a+0.382(b–a) \ x_2 = a+0.618(b–a) end{matrix} ]

    二分法

    因为我们假定函数在所给区间为凸函数,因此区间范围内必存在一点使得其导数为0,该点即为极小点。所以可以每次计算区间中点的导数值,以此来缩小区间,当区间足够小时,使区间的中点为局部极小点。

    步骤1:计算 (x_0 = frac{a+b}{2})
    步骤2:若(f^{'}(x_0) lt 0),令(a = x_0),转步骤3;
    (f^{'}(x_0) gt 0),令(b = x_0),转步骤3;
    (f^{'}(x_0) = 0),停止,(x^* = x_0)
    步骤3:若(|b-a| lt epsilon),则(x^* = frac{a+b}{2}),停止,否则,转步骤1.

    牛顿法

    步骤1:给定初始点(x_1,epsilon gt 0),令(k=1)
    步骤2:计算(x_{k+1} = x_{k} - frac{f^{'}(x_k)}{f^{''}(x_k)})
    步骤3:若(|f^{'}(x_{k+1})| lt epsilon),停止,(x^* approx x_{k+1})

    插值法

    使用成功失败法寻找“高,低,高”三点,分别作为区间和区间内的一点,然后通过这三个点构造二(三、四)次方程,得到该方法的极值点作为第四个点,然后通过这四个点的函数值来进一步缩短区间。

    步骤1:(用成功失败法) 寻找“高-低-高”三点:即三点满足

    [x_1 lt x_2 lt x_3, f(x_1) gt f(x_2) lt f(x_3) ]

    步骤2:确定二次插值多项式(P(x) =a_0+a_1 x + a_2 x^2),求出(P)的极小点(overline{x})(因(P(x_1) gt P(x_2) lt P(x_3))),故(a_2 gt 0)(overline{x} in [x_1, x_3])
    步骤3:若(|x_2 - overline{x}| lt epsilon),则迭代结束,取(x^* = overline{x}),否则在点(x_1,x_2,x_3,overline{x})中,选取使(f)最小的点作为新的(x_2),并使新的(x_1,x_3)各是新的(x_2)近旁的左右两点,转步骤2,继续迭代,直到满足终止条件。

    最速下降法

    步骤1:选定初始点(x,epsilon gt 0),并令(k=1)
    步骤2:若(|| abla f(x^k)|| leq epsilon),得到近似驻点(x^k),否则转步骤3
    步骤3:令(d^k = - abla f(x^k))
    步骤4:由精确一维搜索确定最佳步长(lambda_k=arg min f(x^k+lambda d^k))。令(x^{k+1}=x^k+lambda _kd^k, k:=k+1),转步骤2

    Newton法

    求函数(f)的极小点,给定误差极限(epsilon).
    步骤1:选定初始点(x^1),计算(f_1 = f(x^1),k=1)
    步骤2:如果(|| abla f(x^k)|| leq epsilon),停止,得到近似驻点(x^k),否则转步骤3
    步骤3:计算搜索方向(d^k = -( abla ^2f(x^k))^{-1} abla f(x^k))
    步骤4:令(x^{k+1} = x^k+d^k, k=k+1),转步骤2

    阻尼Newton法
    将Newton法中的迭代公式进行替换,加入精确一维搜索(min f(x^k + lambda d^k)),求得最佳步长(lambda_k),得到下一个迭代点(x^{k+1} = x^k+lambda_k d^k)

    利用阻尼Newton法求n元正定二次函数的极小点,从任意初始点出发,一步迭代即可达到极小点。

    FR共轭梯度法

    步骤1:选定初始点(x^1)
    步骤2:如果(||g_1|| leq epsilon),停止,得到近似驻点(x^1),否则转步骤3
    步骤3:取(p^1=-g_1,k=1)
    步骤4:精确一维搜索找最佳步长(lambda_k),令(x^{k+1} = x^k + lambda_kp^k)
    步骤5:如果(||g_{k+1}|| leq epsilon),停止,得到近似驻点(x^{k+1}),否则转步骤6
    步骤6:如果(k=n),令(x^1=x^{k+1},p^1=-g_{k+1},k=1),转步骤4;否则转步骤7
    步骤7:计算(a_k=frac{||g_{k+1}||^2}{||g_k||^2},p^{k+1}=-g_{k+1}+a_kp^k,k=k+1),转步骤4

    变尺度法--DFP算法

    步骤1:选定初始点(x^1),初始矩阵(H_1=I_n),(epsilon gt 0)
    步骤2:如果(||g_1|| leq epsilon),停止,得到近似驻点(x^1),否则转步骤3
    步骤3:取(P^1=-H_1g_1,k=1)
    步骤4:精确一维搜索找最佳步长(lambda _k),令(x^{k+1} = x^k + lambda_k p^k)
    步骤5:如果(||g_{k+1}|| leq epsilon),停止,得到近似驻点(x^{k+1}),否则转步骤6
    步骤6:如果(k=n),令(x^1=x^{k+1},p^1=-g_{k+1},k=1),转步骤4,否则转步骤7
    步骤7:令(Delta x_k = x^{k+1} - x^k, Delta g_k = g_{k+1} - g_k, r_k=H_k Delta g_k),计算:

    [H_{k+1} = H_k + frac{Delta x_k (Delta x_k)^T}{(Delta x_k)^T Delta g_k} - frac{r_k (r_k)^T}{(Delta g_k)^T H_k Delta g_k} ]

    (p^{k+1}=-H_{k+1}g_{k+1}),令(k = k+1),转步骤4

    两阶段法首先需要向原变量等式中引入人工变量,且人工变量均大于等于0,然后使用单纯形方法求解使得人工变量之和最小的条件,之后将修改单纯形表,将人工变量删去,继续使用单纯形方法得到目标函数的最优解。值得注意的是,在选择进基变量时,选择检验数,即(sigma_j)大于0,且最大的一个。选择离基变量时,选择( heta)大于0且最小的一个。当值相等时,离基变量选择下标最大的,进基变量选择下表最小的。

    (M)

    在约束中引入人工变量(x_a),同时修改目标函数,在原目标中加上惩罚项(Me^Tx_a),其中(M)为充分大的正数。

    对偶规划

    对偶单纯形法

    对偶单纯形法的基本思想: 从(P)的一个对偶可行的基本解出发,在保证对偶可行的条件下,逐步使原问题基本解的不可
    行性消失(即x非负),直到获得原问题的一个基本可行解为止,而这个基本可行解就是原问题的最优解.

    对偶单纯形方法与原单纯形方法主要的区别就是,先计算(overline{b}),找出其中小于0,且最小的一个作为离基变量,然后用(sigma_j)除以对应的行,得到参考值,选择参考值中大于0,且最小的一个作为进基变量。目标是使(overline{b})值均大于等于0.

    K-T点计算,一阶最优性条件

    [egin{matrix} abla f(overline{x}) - sum_{i in I(overline{x})}w_i abla g_i(overline{x}) - sum_{j=1}^{l} v_j abla h_j(overline{x}) = 0 \ w_i geq 0,i in I(overline{x}) end{matrix} ]

    [egin{matrix} abla f(overline{x}) - sum_{i=1}^{m}w_i abla g_i(overline{x})-sum_{j=1}^l v_j abla h_j(overline{x}) = 0 \ w_i geq 0, i=1,...,m \ w_i g_i(overline{x}) = 0,i=1,...,m end{matrix} ]

    满足以上两个条件中的任意一个即为K-T点。若要求K-T点,用下式,若要验证,用上式。其中,(g_i)为大于约束,(h_i)为等式约束。

    外点罚函数法

    构造罚函数:(min F(x,M_k)=f(x)+M_k p(x))
    其中(M_k)逐渐趋于无穷

    优化函数为

    [egin{matrix} min f(x) \ s.t. g_i(x) geq 0, i=1,...,m \ h_j(x) = 0,j=1,...,m end{matrix} ]

    (p(x) = sum_{i=1}^{m}(minlbrace g_i(x),0 brace )^2+sum_{j=1}^l h_j^2(x)),可用(x)来表示(M),然后让(M)趋于无穷,以此求得(x)

    内点罚函数法

    构造罚函数:(F(x,r)=f(x)+rB(x)),只可用于不等书约束的条件,要求大于等于0

    [egin{matrix} B(x) = sum_{i=1}^m frac{1}{g_i(x)} \ B(x) = -sum_{i=1}^m ln(g_i(x)) end{matrix} ]

    约坦狄克可行方向法

    步骤1:给定初始可行点(x^0),令(k=0)
    步骤2:在点(x^k)处将(A)(b)分解成( A=left( egin{matrix} A_1 \ A_2 end{matrix} ight) )(b=left( egin{matrix} b_1 \ b_2 end{matrix} ight) ),使得(A_1x^k, A_2x^kgt b_2),计算( abla f(x^k))
    步骤3:求解线性规划( egin{matrix} min( abla f(x^k))^Td \ s.t. A_1d geq 0 \ Cd = 0\ |d_j| leq 1, forall j end{matrix} )得到最优解(d^k)
    步骤4:若(( abla f(x^k))^Td^k = 0),则算法结束,(x^k)是K-T点,否则转步骤5
    步骤5:利用(*)式计算(lambda_{max}),求解一维搜索问题

    [egin{matrix} min f(x^k+lambda d^k) \ s.t. 0leq lambda leq lambda_{max} end{matrix} ]

    得到极小点(lambda _k),令(x^{k+1}=x^k+lambda _kd^k,k=k+1),转步骤2.
    ( lambda _{max}=left lbrace egin{matrix} minlbrace frac{overline{b_i}}{overline{d_i}}| overline{d_i} lt 0 brace if existoverline{d_i} lt 0 \ +infty if overline{d} geq 0 end{matrix} ight. ) (*)

  • 相关阅读:
    记一次 css样式的使用
    Vue -- element
    Ubuntu系统 ,鼠标双击搜索框内容 ,内容会被自动删除
    MetInfo Password Reset Poisoning By Host Header Attack
    wechall writeup
    SQL常用语句
    PHP Tips
    PHP版本差异备忘录
    Docker入门
    JetBrains系列软件用法
  • 原文地址:https://www.cnblogs.com/zhhfan/p/12078458.html
Copyright © 2011-2022 走看看