介紹
優(yōu)選法在數(shù)學上就是尋找函數(shù)極值的較快較精確的計算方法。1953年美國數(shù)學家J.基弗提出單因素優(yōu)選法棗分數(shù)法和0.618法(又稱黃金分割法) ,后來又提出拋物線法。至于雙因素和多因素優(yōu)選法,則涉及問題較復雜,方法和思路也較多,常用的有降維法、瞎子爬山法、陡度法、混合法、隨機試驗法和試驗設計法等。優(yōu)選法的應用范圍相當廣泛,中國數(shù)學家華羅庚在生產(chǎn)企業(yè)中推廣應用取得了成效。企業(yè)在新產(chǎn)品、新工藝研究,儀表、設備調試等方面采用優(yōu)選法,能以較少的實驗次數(shù)迅速找到較優(yōu)方案,在不增加設備、物資、人力和原材料的條件下,縮短工期、提高產(chǎn)量和質量,降低成本等。
優(yōu)選法,是指研究如何用較少的試驗次數(shù),迅速找到最優(yōu)方案的一種科學方法。例如:在現(xiàn)代體育實踐的科學實驗中,怎樣選取最合適的配方、配比;尋找最好的操作和工藝條件;找出產(chǎn)品的最合理的設計參數(shù),使產(chǎn)品的質量最好,產(chǎn)量最多,或在一定條件下使成本最低,消耗原料最少,生產(chǎn)周期最短等。把這種最合適、最好、最合理的方案,一般總稱為最優(yōu);把選取最合適的配方、配比,尋找最好的操作和工藝條件,給出產(chǎn)品最合理的設計參數(shù),叫做優(yōu)選。也就是根據(jù)問題的性質在一定條件下選取最優(yōu)方案。最簡單的最優(yōu)化問題是極值問題,這樣問題用微分學的知識即可解決。
實際工作中的優(yōu)選問題 ,即最優(yōu)化問題,大體上有兩類:一類是求函數(shù)的極值;另一類是求泛函的極值。如果目標函數(shù)有明顯的表達式,一般可用微分法、變分法、極大值原理或動態(tài)規(guī)劃等分析方法求解(間接選優(yōu));如果目標函數(shù)的表達式過于復雜或根本沒有明顯的表達式,則可用數(shù)值方法或試驗最優(yōu)化等直接方法求解(直接選優(yōu))。
優(yōu)選法是盡可能少做試驗,盡快地找到生產(chǎn)和科研的最優(yōu)方案的方法,優(yōu)選法的應用在我國從70年代初開始,首先由我們數(shù)學家華羅庚等推廣并大量應用,優(yōu)選法也叫最優(yōu)化方法。
優(yōu)點怎樣用較少的試驗次數(shù),打出最合適的訓練量,這就是優(yōu)選法所要研究的問題。應用這種方法安排試驗,在不增加設備、投資、人力和器材的條件下,可以縮短時間、提高質量,達到增強體質.迅速提高運動成績的目的。
基本步驟1)選定優(yōu)化判據(jù)(試驗指標),確定影響因素,優(yōu)選數(shù)據(jù)是用來判斷優(yōu)選程度的依據(jù)。
2)優(yōu)化判據(jù)與影響因素直接的關系稱為目標函數(shù)。
3)優(yōu)化計算。優(yōu)化(選)試驗方法一般分為兩類:
分析法:同步試驗法
黑箱法:循序試驗法
分類優(yōu)選法分為單因素方法和多因素方法兩類。單因素方法1有平分法、0.618法(黃金分割法)、分數(shù)法、分批試驗法等;多因素方法很多.但在理論上都不完備.主要有降維法、爬山法、單純形調優(yōu)勝。隨機試驗法、試驗設計法等。優(yōu)選法已在體育領域得到廣泛應用。
1.單因素優(yōu)選法
如果在試驗時,只考慮一個對目標影響最大的因素,其它因素盡量保持不變,則稱為單因素問題。一般步驟:
(1)首先應估計包含最優(yōu)點的試驗范圍,如果用a表示下限,b表示上限,試驗范圍為[a,b];
(2)然后將試驗結果和因素取值的關系寫成數(shù)學表達式,不能寫出表達式時,就要確定評定結果好壞的方法。
2.多因素優(yōu)選法
多因素問題:首先對各個因素進行分析,找出主要因素,略去次要因素,劃“多”為“少”,以利于解決問題。
計算方法單因素優(yōu)選法解決的問題是針對函數(shù) 在區(qū)間
上有單峰極大值(或者極小值),如何通過更加有效的選點方法縮小極值點的范圍。
在(a,b)區(qū)間內取兩點x1,x2。顯然:
1)當f(x1)>f(x2)時,極大點在(a,x2)的范圍內,(x2,b)的區(qū)間舍去。
2)當f(x1)eps) B(n)=b(n)-a(n); m(n)=yFunc(t(n)); g(n)=yFunc(u(n)); if m(n)>g(n) a(n+1)=t(n); b(n+1)=b(n); t(n+1)=u(n); u(n+1)=a(n+1)+0.618*(b(n+1)-a(n+1)); else a(n+1)=a(n); b(n+1)=u(n); u(n+1)=t(n); t(n+1)=a(n+1)+0.382*(b(n+1)-a(n+1)); end n=n+1; plot(a(n),yFunc(a(n)),'c*'); plot(b(n),yFunc(b(n)),'b*'); pause(0.5);endxStar = (b(n)+a(n))/2; yStar = yFunc(xStar);plot(a(n),yFunc(a(n)),'ro');hold off;t(n)=0;u(n)=0;m(n)=0;g(n)=0;B(n)=b(n)-a(n);n=n-1; log=[a',b',t',u',m',g',B']; function y = yFunc(x) if (length(x)>1) y = x.^2+5.*x;else y = x^2+5*x;end
對應的Fibonacci法的代碼如下:
function [yStar,xStar,log]=FibonacciSearch(a,b,xStep,eps)%% Fibonacci法% 函數(shù):yFunc為y關于x的函數(shù),具體形式見最下,此時為:y=x^2+5*x% 輸入:a,b,eps分別代表了區(qū)間[-4,4]及精度;xStep為Fibonacci序列劃分區(qū)間的精度% 輸出:[yStar,xStar] 分別是函數(shù)的最小值及其對應的x值,log紀錄了具體步驟;% 執(zhí)行:在命令行中輸入[yStar,xStar,log]=FibonacciSearch(-4,4,0.2,0.01),% 即可開始在區(qū)間[-4,4]中查找最小值,優(yōu)化精度達到0.01時停止;%figure(1);x = a:0.01:b;y = yFunc(x);plot(x,y,'k-');hold on; n=1;j=1;a(n)=a;b(n)=b;while(Fibonacci(j)*xStepU(n) a(n+1)=r(n); b(n+1)=b(n); r(n+1)=u(n); u(n+1)=a(n+1)+Fibonacci(j-n-1)/Fibonacci(j-n)*(b(n+1)-a(n+1)); else a(n+1)=a(n); b(n+1)=u(n); u(n+1)=r(n); r(n+1)=a(n+1)+(1-Fibonacci(j-n-1)/Fibonacci(j-n))*(b(n+1)-a(n+1)); end plot(a(n),yFunc(a(n)),'c*'); plot(b(n),yFunc(b(n)),'b*'); pause(0.5);endR(j-1)=yFunc(r(j-1));U(j-1)=yFunc(u(j-1));r(j)=r(j-1);u(j)=r(j-1)+eps;R(j)=yFunc(r(j));U(j)=yFunc(u(j));if R(j)>U(j) a(j)=r(j); b(j)=b(j-1);else a(j)=a(j-1); b(j)=u(j);endZ(j-1)=b(j-1)-a(j-1);Z(j)=b(j)-a(j);x=(a(j)+b(j))/2;xStar = (b(n)+a(n))/2; yStar = yFunc(xStar);plot(a(n),yFunc(a(n)),'ro');hold off;log=[a',b',r',u',R',U',Z']; function y = yFunc(x) if (length(x)>1) y = x.^2+5.*x;else y = x^2+5*x;end function F=Fibonacci(n)i=1;Fibonacci(2)=2;Fibonacci(1)=1;if n==0 F=1;else for i=3:1:n Fibonacci(i)=Fibonacci(i-1)+Fibonacci(i-2); end i=n;endF=Fibonacci(i);