對傳統優化演算法的一些總結(上)

2021-07-30 12:38:32 字數 2348 閱讀 6108

對之前的優化設計的課做一些總結,也是自己對優化演算法的一些總結和感悟,這篇主要總結一下傳統單變數演算法,在下幾篇將會對一些傳統多變數以及智慧型優化演算法進行總結。

傳統的單變數主要有.進退法2.**分割法3.斐波那契法4.多項式近似法(牛頓法)5.多項式近似法(拋物線法)等。下面對上述方法原理簡單介紹一下。

進退法又名爬山法,可以說**於一種貪心的思想,設定初始步長以及初始值,當往更好的方向發展時,則增加步長更新位置,否則更新步長為-h/4,直至收斂。

**分割法既需要確定一定的區間,很明顯其的劣勢即必須尋找的極值需存在在事先確定的區間內,否則找不到極值。

斐波那契法與**分割法在原理上是類似的,只不過利用斐波那契數列的中的比值替代的**分割比。

牛頓法是假設函式可微,在x附近利用二次函式逼近fx,並根據極小值滿足函式導數為0從而得到函式極值。

拋物線法即假定函式上的三點構造二次拋物線函式每次更新區間直至逼近極值。

double advance_retreat(double h, double x0,double accuracy,int function_number)

else

}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)

if((function_select(function_number,a))<(function_select(function_number,b)))

else

}

double *determine_the_interva(double *p,double x,double h0,int function_number)//用來確定**分割法區間選擇的函式

h=h0;

a=x-h;

while(function_select(function_number,a)x))

p[0]=a;

p[1]=b;

printf("利用區間選擇法為您所確定的初始區間為[%lf

%lf]\n",a,b);

return p;

}

void fibonacci(double accuracy,double a,double b,int function_number)       

int n=i;//儲存滿足條件的下標代號

while(n>=2)

if((function_select(function_number,a))<(function_select(function_number,b)))

else

free(f);

}

printf("極值點:%lf",result[i-1]);

printf("極值為:%lf\n",(function_select(function_number,result[i-1])));

free(p);

free(result);

p=null;

result=null;}

else

if(function_select(function_number,x)>function_select(function_number,x2)&&(x>x2))

else

if(function_select(function_number,x)x>x2))

else

if(function_select(function_number,x)x

<=x2))

x=0.5

*((x2*x2-x3*x3)*function_select(function_number,x1)+(x3*x3-x1*x1)*function_select(function_number,x2)+(x1*x1-x3*x3)*function_select(function_number,x3))/((x2-x3)*function_select(function_number,x1)+(x3-x1)*function_select(function_number,x2)+(x1-x3)*function_select(function_number,x3));

}if((function_select(function_number,x))<(function_select(function_number,x2)))

else}

對集合框架一些總結(上)

256m記憶體的本本跑jbuilder真是慢!實在受不了了!罷了!還是寫blog吧!總結下剛學的集合框架吧!集合框架在j2ee中占有很重要的位置!1.為什麼使用集合框架?因為在開發的時候經常要處理不定長度和型別不確定的集合。但是陣列顯然是不能達到要求的。使用集合框架提供的相應操作可以解決很多問題。2...

一些優化演算法

1.內點法介紹 interior point method dymodi的專欄 csdn部落格 2.column generation 列生成 演算法 從下料問題看整數規劃中的列生成方法 附gurobi求解器源 知乎 3.群演算法 遺傳演算法ga 最優化演算法之粒子群演算法 pso 模擬退火演算法s...

A 演算法的一些總結

看拓撲狀態監控的一篇文章時發現提到了a 演算法,他的目的是提取拓撲中的重要拓撲資訊來進行監控,進而減少控制資訊消耗。覺得這個想法不錯,但具體a 演算法是怎麼樣的呢?於是找了一下資料,覺得下面這篇帶著例項講的不錯,比較直觀,雖說博主也是借他山之石吧,但還是總結歸納的不錯,排版也很清晰,點讚。理解a 演...