粒子群演算法(6)—–幾個適應度評價函數

來源:互聯網
上載者:User

下面給出幾個適應度評價函數,並給出圖形表示

 

     頭幾天機子種了病毒,重新安裝了系統,不小心把程式全部格式化了,痛哭!!!沒辦法,好多程式不見了,現在把這幾個典型的函數重新編寫了,把他們給出來,就算粒子群演算法的一個結束吧!痛恨病毒!!!!

第一個函數:Griewank函數,圖形如下所示:

適應度函數如下:(為了求最大值,我去了所有函數值的相反數)

 

function y

=

Griewank(x)

%

Griewan函數

%

輸入x,給出相應的y值,在x

=

(

0

,

0

,…,

0

)處有全域極小點0.

%

編製人:

%

編製日期:

[row,col]

=

size(x);

if

 row

>

1

    error(

'

輸入的參數錯誤

'

);

end

y1

=

1

/

4000

*

sum(x.

^

2

);

y2

=

1

;

for

 h

=

1

:col

    y2

=

y2

*

cos(x(h)

/

sqrt(h));

end

y

=

y1

-

y2

+

1

;

y

=-

y;

繪製函數映像的代碼如下:

function DrawGriewank()

%

繪製Griewank函數圖形

x

=

[

-

8

:

0.1

:

8

];

y

=

x;

[X,Y]

=

meshgrid(x,y);

[row,col]

=

size(X);

for

 l

=

1

:col

    

for

 h

=

1

:row

        z(h,l)

=

Griewank([X(h,l),Y(h,l)]);

    end

end

surf(X,Y,z);

shading interp

第二個函數:Rastrigin函數,圖形如下所示:

適應度函數如下:(為了求最大值,我去了所有函數值的相反數)

 

function y

=

Rastrigin(x)

%

Rastrigin函數

%

輸入x,給出相應的y值,在x

=

(

0

,

0

,…,

0

)處有全域極小點0.

%

編製人:

%

編製日期:

[row,col]

=

size(x);

if

 row

>

1

    error(

'

輸入的參數錯誤

'

);

end

y

=

sum(x.

^

2

-

10

*

cos(

2

*

pi

*

x)

+

10

);

y

=-

y;

繪製函數映像的代碼如下:

function DrawRastrigin()

%

繪製Rastrigin函數圖形

x

=

[

-

5

:

0.05

:

5

];

y

=

x;

[X,Y]

=

meshgrid(x,y);

[row,col]

=

size(X);

for

 l

=

1

:col

    

for

 h

=

1

:row

        z(h,l)

=

Rastrigin([X(h,l),Y(h,l)]);

    end

end

surf(X,Y,z);

shading interp

第三個函數Schaffer函數,圖形如下所示:

函數的代碼如下,因為該函數在(0,...,0)處有最大值1,因此不需要取相反數。

function result=Schaffer(x1)<br />%Schaffer 函數<br />%輸入x,給出相應的y值,在x=(0,0,…,0) 處有全域極大點1.<br />%編製人:<br />%編製日期:<br />[row,col]=size(x1);<br />if row>1<br /> error('輸入的參數錯誤');<br />end<br />x=x1(1,1);<br />y=x1(1,2);<br />temp=x^2+y^2;<br />result=0.5-(sin(sqrt(temp))^2-0.5)/(1+0.001*temp)^2;

  

繪製函數代碼圖形的代碼如下:

function DrawSchaffer()<br />x=[-5:0.05:5];<br />y=x;<br />[X,Y]=meshgrid(x,y);<br />[row,col]=size(X);<br />for l=1:col<br />for h=1:row<br />z(h,l)=Schaffer([X(h,l),Y(h,l)]);<br />end<br />end<br />surf(X,Y,z);<br />shading interp

  

第四個函數:Ackley函數,函數圖形如下:

函數的代碼如下,因為
該函數在(0,...,0)處有最小值0,因此需要取相反數

function result=Ackley(x)<br />%Ackley 函數<br />%輸入x,給出相應的y值,在x=(0,0,…,0) 處有全域極小點0,為得到最大值,傳回值取相反數<br />%編製人:<br />%編製日期:<br />[row,col]=size(x);<br />if row>1<br /> error('輸入的參數錯誤');<br />end<br />result=-20*exp(-0.2*sqrt((1/col)*(sum(x.^2))))-exp((1/col)*sum(cos(2*pi.*x)))+exp(1)+20;<br />result=-result;

 

繪製函數代碼圖形的代
碼如下:

function DrawAckley()<br />%繪製Ackley函數圖形<br />x=[-8:0.1:8];<br />y=x;<br />[X,Y]=meshgrid(x,y);<br />[row,col]=size(X);<br />for l=1:col<br /> for h=1:row<br /> z(h,l)=Ackley([X(h,l),Y(h,l)]);<br /> end<br />end<br />surf(X,Y,z);<br />shading interp

第五個函數是:Rosenbrock函數,該函數在(1,...,1)處有最小值0,為了得到最大值,取函數值的相反數。

函數圖形如下所示

 

函數的代碼:

 

function result=Rosenbrock(x)<br />%Rosenbrock 函數<br />%輸入x,給出相應的y值,在x=(1,1,…,1) 處有全域極小點0,為得到最大值,傳回值取相反數<br />%編製人:<br />%編製日期:<br />[row,col]=size(x);<br />if row>1<br /> error('輸入的參數錯誤');<br />end<br />result=100*(x(1,2)-x(1,1)^2)^2+(x(1,1)-1)^2;<br />result=-result;

繪製函數圖形的代碼如下:

function DrawRosenbrock()<br />%繪製Rosenbrock函數圖形,大鐵鍋函數,哈哈<br />x=[-8:0.1:8];<br />y=x;<br />[X,Y]=meshgrid(x,y);<br />[row,col]=size(X);<br />for l=1:col<br /> for h=1:row<br /> z(h,l)=Rosenbrock([X(h,l),Y(h,l)]);<br /> end<br />end<br />surf(X,Y,z);<br />shading interp

這樣粒子群演算法不得不草草收場。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.