西电最优化上机报告(大作业)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

上机报告
一.最速下降法
算法简述:
1.在本例中,先将最速下降方向变量赋一个值,使其二范数满足大于ε的迭代条件,进入循环。

2.将函数的一阶导数化简,存在一个矩阵,将其hesse矩阵存在另一个矩阵。

依照公式求出α,进而求出下一任迭代的矩阵初值。

循环内设置一个计数功能的变量,统计迭代次数。

3.求其方向导数的二范数,进行判别,若小于ε,则跳出循环,否则将继续迭代。

4.显示最优解,终止条件,最小函数值。

心得体会:
最速下降法的精髓,无疑是求梯度,然后利用梯度和hesse矩阵综合计算,求解下一个当前最优解。

但是,要求函数是严格的凸函数,结合严格凸函数的大致图像,这就给初值的选取提供了一点参考。

例如在本例中,由于含有两个变量的二次方之和,结合大致图像,想当然的,初值的选取应当在原点附近;又因为变量的二次方之和后面,还减去了变量的一次形式和一次混合积,所以初值的选取应该再向第一象限倾斜。

综合以上考量,第一次选取(1,1)作为初值,判别精度方面,取到千分位,暂定为0.001。

运行以后,结果显示迭代了25次,最优解为(3.9995,1.9996),终止条件为5.4592e-04,目标函数为-8.0000。

这个结果已经相当接近笔算结果。

整体的运行也比较流畅,运算速度也比较快。

第二次取值,决定保留判别精度不变,将初值再适当向第一象限倾斜,取(2,2)作为初值,运行后,显示只迭代了11次!最优结果显示(3.9996,1.9997),终止条件为3.6204e-04,最优解-8.0000。

可见,最优结果更接近理想值,终止条件也变小了,最关键的是,迭代次数减少至第一次的一半以下!这说明以上初选取的方向是对的!
第三次再进行初值细化,判别精度仍然不变,初值取(3,3)。

结果令人兴奋,只迭代了四次!最优解已经显示为(4.0000,2.0000),终止条件为2.4952e-04,目标函数-8.0000。

第四次,判别精度不变,取初值(4,4)。

这回显示迭代了6次,最优解和目标函数没什么变化,终止条件变大了,变为5.0889e-04。

可见,取(3,3)作为初值,比取(4,4)作初值要更优秀。

接下来对判别精度进行调整,适当缩小,以减少迭代次数从而减少运算量。

取初值为(3,3),判别精度为0.01,。

结果显示,只迭代了三次,但是最优解的判别精度有所下降,为( 3.9986,1.9991)终止条件有所增大,为0.0012,最优解-8.0000。

这意味着计算量确实有所下降。

PS :刚上手matlab 时,对于syms 和logical 的转换不是很懂,编程过程不断遭遇此难题。

幸运的是,我通过增加中间变量,成功解决或者说,规避了此问题。

还好,matlab 不需要不每一个变量进行定义,否则就给跪了。

算法流程图:
将参数设为上述ε,此时设初始点为(1,1)通过迭代,可得最优解为:x1=4,
综上所述:
选取初值为(3,3),判别精度为0.01时,相对迭代次数最少,结果相对最优。

开始,选X0,ε,K=0
P(k)=-f(X(k)) a(K)=||P(k)||^2/(-P(k))'*A *P(k) X(k+1)=X(K)+a(k)P(K); ||k P ||≤ε
Y N
输出
二.共轭梯度法
算法简述:
1.在此方法中,先将最速下降方向变量赋一个值,使其二范数满足大于ε的迭代条件,进入循环。

2.求出函数的方向导数表达式,将其存在一个矩阵,设置变量t,表示出x1[x01,x02]’。

将x1[x01,x02]’代入原函数,求出代入后,该函数取最小值时的最优解t,将t代入x1[x01,x02]’的式子,求出x1[x01,x02]’,求函数的下一任方向导数。

循环内设置一个计数功能的变量,统计迭代次数。

3.求其方向导数的二范数,进行判别,若小于ε,则跳出循环,否则将继续迭代。

直至求出最优解。

4.显示最优解,终止条件,最小函数值。

算法流程图:
开始
选取X0,ε,K=0,计算
P(k)=-f(X(k))
心得体会:
共轭梯度法和最速下降法颇有相似,但是不用求hesse 矩阵,而且收敛速度会快很多。

但是,由于共轭梯度法所涉及的计算量比较大,计算较之最速下降法更复杂,所以,实际运行时,速度会有所减慢。

例如在本例中,所给函数是严格凸函数,由于含有两个变量的二次方之和,结合大致图像,想当然的,初值的选取应当在原点附近;又因为变量的二次方之和后面,还减去了变量的一次形式和一次混合积,所以初值的选取应该再向第一象限倾斜。

||P(k)||≤ε 算法停止,输出 Y N 进行一维搜索,使f (X+k k P t )=min (f (X+k k P t )),令X(k+1)=X+k k P t ||P(k)||<ε Y N λ=,k=k+1
根据以上分析,第一次选取(1,1)作为初值,判别精度千分位,暂定为0.001。

运行以后,结果显示迭代了25次,最优解为(3.9995,1.9996),终止条件为5.4592e-04,目标函数为-8.0000。

这个结果已经相当接近笔算结果。

但是,整体的运行不太流畅,运算速度也不快。

第二次取值,决定保留判别精度不变,将初值再适当向第一象限倾斜,取(2,2)作为初值,运行后,显示只迭代了11次!最优结果显示(3.9996,1.9997),终止条件为3.6204e-04,最优解-8.0000。

可见,最优结果更接近理想值,终止条件也变小了,迭代次数也减少至第一次的一半以下!这说明以上初选取的方向是对的!但是,运算速度仍不太快。

第三次再进行初值细化,判别精度仍然不变,初值取(3,3)。

结果令人兴奋,只迭代了四次!最优解已经显示为(4.0000,2.0000),终止条件为2.4952e-04,目标函数-8.0000。

速度显然快很多。

结合最速下降法的经验,初值选取测试到此结束。

接下来着重调整判别精度,适当缩小,以减少迭代次数从而减少运算量。

第一次,取初值为(3,3),判别精度为0.01,。

结果显示,只迭代了三次,但是最优解的判别精度有所下降,为( 3.9986,1.9991)终止条件有所增大,为0.0012,最优解-8.0000。

这意味着计算量确实有所下降。

第二次,取初值为(3,3),判别精度为0.05,。

结果显示,只迭代了两次,但是,最优解的判别精度继续下降,为(3.9941,2.0059)终止条件有所增大,为0.0424,最优解-7.9998。

本次计算速度明显快了许多。

仅就以上的示例而言,可以明明显的看到,同样的判别精度和初值选取,共轭梯度法和最速下降法的所得结果,是非常接近,甚至一致的。

这也验证了共轭梯度法和最速下降法的算法相似性
综上所述:
选取初值为(3,3),判别精度为0.01。

相对迭代次数最少,结果相对最优。

三.外点罚函数发
算法简述:
1.在此方法中,先构建出一个罚函数(只取其违反约束条件时的值)。

2.将函数化简,分别求偏导,求最值。

3.在求得x1,x2的最值形式之后,分别求罚函数(不带罚因子)的绝对值,若小于ε,则跳出循环,否则进入循环,罚因子翻十倍,代入求最值。

对所得值进行罚函数(不带罚因子)判别,若小于ε,则跳出循环,否则继续迭代。

循环内设置一个计数功能的变量,统计迭代次数。

4.对求得的x1和x2进行验证,将不合条件的值删去。

5.显示最优解,终止条件,最小函数值。

算法流程图:
心得体会:
开始 选取初始点 设定惩罚因子,放大系数C=10 求解),(min k M X F
)
,(min k M X F N 置1,1+==+k k CM M k k 算法停止,输出、 Y εα≤)(X M k
外点法着力于构造罚函数,将不符合约束条件的解求得的函数值,使之急剧增加,从而巩固可行域内的最优解。

在本例中,由于含有变量的三次方,结合所学过的一元函数的立方的图像,估计函数的解在原点附近,其邻近程度取决于括号内与之相加减的常数。

罚因子的选取,不太容易做估计,无妨从1开始,罚因子的翻倍系数,参照一般例题所给,先设为10。

综合以上考量,第一次选取1作为罚因子的初值,判别精度方面,取到千分位,暂定为0.001。

运行以后,结果显示迭代了3次,最优解为(1.0032,-0.0005),终止条件分别为0.0032,5.0000e-04,目标函数为0.6693。

这个结果已经相当接近笔算结果。

整体的运行也比较流畅,运算速度也比较快。

第二次取值,保留判别精度不变,将罚因子的初值适当增大,取3作为罚因子的初值,运行后,结果显示迭代了3次,最优解为(1.0032,-0.0002),终止条件分别为0.0032,1.6667e-04,目标函数为0.6697。

结果变化不大,继续试着改变罚因子的初值。

第三次取值,保留判别精度不变,将罚因子的初值再适当增大,取5作为罚因子的初值,运行后,结果显示迭代了2次,最优解为(1.0032,-0.0010),终止条件分别为0.0032,1.0000e-03,目标函数为0.6688。

结果已经更接近理想状态,说明罚因子的改变方向是正确的。

最重要的是,迭代的次数已经很理想。

接下来对判别精度进行调整,适当缩小,以减少迭代次数从而减少运算量。

选取5作为罚因子的初值,判别精度暂定为0.01。

运行以后,结果显示只迭代了1次!最优解为(1.0032,-0.0100),终止条件分别为0.0032,0.0100,目标函数为0.6598。

这个结果还可以接受。

计算量确实非常理想,运算速度很快。

PS:在算法具体实施的时候,由于求得的解可能有多个,所以对求出的x1和x2进行范围验证。

但是,并不直接采用题目中所给的限定条件,而是适当的放宽限制,以免将已经逼近结果,但是处在罚函数所构筑的高墙之外的,较好的解误删掉。

题目要求x1>=1,x2>=0;此处放宽至x1>=0,x2>=-0.5。

所以最优解的第二项会出现负值。

综上所述:
综合考量,选取罚因子的初值为5,判别精度为0.001,此时结果和运算都很理想。

四.内点障碍函数法
算法简述:
1.在此方法中,先构建出一个障碍函数。

2.将函数化简,分别求偏导,求最值。

3.对求得的最值进行取舍,用for 循环配合if 函数,将不再题目要求的范围内的解去除,保留符合条件的值。

4.将求得的值代入障碍函数部分,若结果小于ε,则跳出循环;否则进入循环,障碍因子缩小十倍,代入求最值。

对求得的x1和x2进行验证,将不合条件的值删去。

对符合条件值进行障碍函数判别,若小于ε,则跳出循环,否则继续迭代。

直至求出结果。

5.显示最优解,终止条件,最小函数值。

算法流程图:
开始 给定初始点:0X ,
11.010===k c r k ,, 求出),(min
k r X F , 求取)(k r X
心得体会:
外点法关键在构造障碍函数,使得接近边界的函数部分急剧增加。

障碍因子不容易估计,无妨从1开始,障碍因子的翻倍系数,参照一般例题所给,先设为0.1。

第一次选取1作为障碍因子的初值,判别精度方面,取到千分位,暂定为0.001。

运行以后,结果显示迭代了3次,最优解为(1.7321,1.0000),终止条件为 2.3660e-04,目标函数为 2.6994。

这个结果和笔算结果存在较大误差。

整体的运行不算快快。

第二次取值,保留判别精度不变,适当减小障碍因子,选取0.1作为障碍因子的初值。

运行以后,结果显示迭代了3次,最优解为(1.2777,0.3162),终止条件为 6.7636e-04,目标函数为 1.3009。

这个结果比上一次更接近理想状态。

第三次取值,保留判别精度不变,再适当减小障碍因子,选取0.01作为障碍因子的初值。

运行以后,结果显示迭代了3次,最优解为(1.0954,0.1000),终止条件为2.0477e-04,目标函数为0.8667。

这个结果比上上次更接近理想状态。

但是误差还需修正。

第四次取值,保留判别精度不变,再适当减小障碍因子,选取0.001作为障碍因子的初值。

运行以后,结果显示迭代了3次,最优解为( 1.0311,0.0316),终止条件为6.3738e-04,目标函数为 0.7299。

这个结果虽然更接近理想状态。

但是,结果的优化速度明显比上几次更慢了。

所以是时候从判别精度方面考虑了。

接下来对判别精度进行调整,以优化结果的理想程度。

∑=≤l i i k X g r 1)(1ε 输出)2(,)1(X X Y N 1,1+==+k k cr r k k
第四次取值,选取0.001作为障碍因子的初值。

将判别精度提升至0.0001运行以后,运行以后,结果显示迭代了3次,最优解为( 1.0311,0.0316),终止条件为6.3738e-04,目标函数为0.7299。

居然较之上一次没有改变。

看来只能返回障碍因子方面考虑了。

第六次取值,取判别精度为0.001,加快减小障碍因子,选取0.00001作为障碍因子的初值。

运行以后,结果显示迭代了3次,最优解为( 1.0032,0.0032),终止条件为6.3295e-04,目标函数为0.6730。

这个结果显然更接近理想状态。

第七次取值,取判别精度为0.001,再度减小障碍因子,选取0.000001作为障碍因子的初值。

运行以后,结果显示迭代了3次,最优解为( 1.0010,0.0010,终止条件为2.0005e-04,目标函数为0.6687。

PS:在算法具体实施的时候,由于求得的解可能有多个,所以对求出的x1和x2进行范围验证。

与外点法算法不同的是此处直接采用题目中所给的限定条件。

综上所述:
综合考量,选取障碍因子的初值为0.000001,判别精度为0.001,此时结果相对最优。

相关文档
最新文档