標籤:

模擬退火——投影尋蹤

模擬退火——投影尋蹤

附錄:模擬退火投影尋蹤

運行環境:Matlab2014a

程序一:

clear all;close all;clc

%導入數據,列項是指標,行項是指標的數據,比如一個指標01-15年的數據

x=[0.167634 0.171094

0.190174 0.193634

0.175962 0.179422

0.182961 0.186421

0.169013 0.172473

0.190852 0.194312

0.175527 0.178987

0.194058 0.197518

0.186534 0.189994

0.148956 0.152416

0.142630 0.146090

0.138551 0.142011

0.156366 0.159826

0.182605 0.186065

0.186847 0.190307];

%矩陣維度計算,目的在於方便後面的計算

[a,b]=size(x);

%如果各指標數據的單位不同,則需歸一化處理

%max1=max(x);

%min1=min(x);

%正向指標歸一化,例子如下:

%x(:,1)=(0.98*max1(1)-x(:,1))/(0.98*max1(1)-0.02*min1(1));

%x(:,1)指的是x矩陣中的第一列

%負向指標歸一化,例子如下:

%x(:,2)=(x(:,2)-0.02*min1(2))/(0.98max1(2)-0.02*min1(2));

%x(:,2)指的是x矩陣中的第二列

%此外也可直接將歸一化的數據直接導入x矩陣中就不用以上加%的程序了

%這裡的最大最小為什麼要乘以個0.98和0.02呢,這裡小編直接說結果把說下吧,

%如果不分別乘以0.98和0.02,那麼最終的r矩陣可能會出現0,從而干擾結果

tic

for k=1:a

%退火尋找最優投影方向

temperature=100;%初始溫度

iter=100;%迭代次數

L=1;%用於記錄迭代的次數

n=2;%指標個數

c=suiji(n);%隨機生成初始值,在遺傳演算法中就相當於初始種群

p=c;

y=Target(x,c);

while temperature>0.01

for i=L:iter

c1=suiji(n);%這裡為什麼還要隨機呢,目的在於避免演算法陷入局部最優值這一缺陷

y1=Target(x,c1);%計算目標函數值

delta_e=y1-y;

if delta_e>0

y=y1;

p=c1;

else

if

exp(delta_e/temperature)>rand()

y=y1;

p=c1;

end

end

end

L=L+1;

temperature=temperature*0.99;

end

w(k)=y;

e(k,:)=p;

end

toc

disp(max(w));

%求得各樣本投影值 r

c=e(find(w==max(w)),:)%c記錄的是每個指標的權重值,也就是通過對數據分析,賦予了指標一個參比性的一個值

%這裡的find(w==max(w)是什麼意思呢,是找到w矩陣中最後一個最大值的位置,目的也是為了尋找最優的結果

%e記錄的是經L次迭代生成的一個參比性值的矩陣

for i=1:a

for j=1:b

r(i,j)=sum(x(i,j).*c(j));%每行每列的評價值

end

end

sum(r)%01-15年間每個指標的評價值,即總體評價

程序二:

function a=suiji(n)

%初始化

for k=1:n

b(k)=rand();

end

temp=sum(b.^2);

a=sqrt(b.^2/temp);

end

程序三:

function y=Target(x,a)

%計算目標函數值,見模型步驟3

[m,n]=size(x);

for i=1:m

s1=0;

for j=1:n

s1=s1+a(j)*x(i,j);

end

z(i)=s1;

end

Sz=std(z);%方差

R=0.1*Sz;

s3=0;

for i=1:m

for j=1:m

r=abs(z(i)-z(j));

t=R-r;

if t>=0

u=1;

else

u=0;

end

s3=s3+t*u;

end

end

Dz=s3;

y=Sz*Dz;

end


推薦閱讀:

2017年美國數學建模比賽的一點心得
灰色模型的MATLAB代碼——數學建模必備
我的數學建模之路 (關於2017年所有參賽歷程及tips)
【MCM/ICM】數學建模基礎知識儲備(一)
差分方程建模

TAG:數學建模 |