西电最优化上机报告(大作业)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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。相对迭代次数最少,结果相对最优。
三.外点罚函数发
算法简述: