对传统优化算法的一些总结(上)

本文是对优化设计课程的总结,聚焦于传统单变量优化算法,包括进退法、黄金分割法、斐波那契法、牛顿法和抛物线法。这些方法基于不同的原理,如贪心思想和函数近似,但都可能陷入局部最优。后续文章将探讨多变量及智能优化算法,如粒子群、模拟退火和遗传算法。
摘要由CSDN通过智能技术生成

对之前的优化设计的课做一些总结,也是自己对优化算法的一些总结和感悟,这篇主要总结一下传统单变量算法,在下几篇将会对一些传统多变量以及智能优化算法进行总结。
传统的单变量主要有.进退法2.黄金分割法3.斐波那契法4.多项式近似法(牛顿法)5.多项式近似法(抛物线法)等。下面对上述方法原理简单介绍一下。
进退法又名爬山法,可以说来源于一种贪心的思想,设置初始步长以及初始值,当往更好的方向发展时,则增加步长更新位置,否则更新步长为-h/4,直至收敛。
黄金分割法既需要确定一定的区间,很明显其的劣势即必须寻找的极值需存在在事先确定的区间内,否则找不到极值。
斐波那契法与黄金分割法在原理上是类似的,只不过利用斐波那契数列的中的比值替代的黄金分割比。
牛顿法是假设函数可微,在x附近利用二次函数逼近fx,并根据极小值满足函数导数为0从而得到函数极值。
抛物线法即假定函数上的三点构造二次抛物线函数每次更新区间直至逼近极值。

下面附上自己编写的相关函数:

double Advance_retreat(double h, double x0,double accuracy,int function_number)
{
 double x;
 x=x0;
 while(abs(h)>accuracy)//截止判断条件
 {
   if ((function_select(function_number,(x+h)))<(function_select(function_number,(x))))//进退法进成功的判断条件
   {
        x=x+h;
        h=h*2;
    }
else
   {
       h=-h/4;
       x=x+h;
   }
 }
 printf("极值点:%lf\n",x);
printf("极小值为:%lf\n",(function_select(function_number,x)));
 return x;
}                                                                 
double golden_section( double q,double a,double b,double accuracy,int function_number)
{
  double u1,u2;//黄金分割法中间所需的试验点
  while(abs(b-a)>accuracy)  
  {u1=b-q*(b-a);
   u2=a+q*(b-a);
   if((function_select(function_number,u1))<(function_select(function_number,u2))) 
       b=u2;
   else
       a=u1;
  }
if((function_select(function_number,a))<(function_select(function_number,b))) 
{
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值