?? main_fc.m
字號:
clear all;
clc;
disp('please inpute the value of the flag flag == 0 手動輸入參數 ');
flag = input('flag = ');
if flag == 0
%主程序
%***********本程序最優變量是兩個參量,需初始化K1,T1值參考值K1=0.5;T1=45;
disp('please inpute the value of the system initial parameter K1 and T1 (參考值K1 = 0.5;T1 = 45)');
K1 = input('K1=');
T1 = input('T1=');
disp('please inpute the value of 壓縮因子 lamta (0<lamta<1) and lamta~=0.5 (參考值lamta = 0.6)');
lamta = input('lamta=');
disp('please inpute the value of 擴張因子 mu (mu>1) (參考值mu=1.2)');
mu = input('mu = ');
disp('please inpute the value of 尋優步距 h (參考值h=0.25)');
h = input('h = ');
disp('please inpute 最大搜索次數M_Stp (參考值M_Stp=500)');
M_Stp = input('M_Stp = ');
else
K1 = 0.65;T1 = 95; lamta = 0.6;mu=1.2;h=0.25;M_Stp=500;
end
Sea_Count=0;%尋優次數
N=2;%系統未知變量個數
afa=zeros(N+1,N+1);
afa(1,1)=K1;
afa(1,2)=T1;
e=eye(N+1);
ahuai=zeros(1,N+1);%最壞點
ahao=zeros(1,N+1);%最好點
acihuai=zeros(1,N+1);%次壞點
aReflct=zeros(1,N+1);%反射點
aextend=zeros(1,N+1);%擴張點
ashousuo=zeros(1,N+1);%收縮點
huhuan=zeros(1,N+1);%互換時用到
m_jicun=zeros(1,N+1);%用于寄存最壞點的K1,T1,Q的中間矩陣
%*********************計算初始點
for i = 2:N+1
afa(i,:) = afa(1,:) + h * e(1,:);
end
%計算Q值,性能指標的計算
for i=1:N+1
afa(i,3)=SYS_FUC(afa(i,1),afa(i,2));
end
%比較Q的大小,找到最好,次壞,最壞點
[ahuai,acihuai,ahao] = Bijiao(afa);
m_jicun=ahuai;
afa(1,:)=ahuai;
afa(2,:)=acihuai;
afa(3,:)=ahao;
Sea_Count=Sea_Count+1
afa
yigexilong=0.0005;%規定一個結束循環的極小值
while abs(ahuai(1,3)-ahao(1,3))/abs(ahao(1,3)) > yigexilong && Sea_Count < M_Stp
Sea_Count=Sea_Count+1
%計算反射點
aReflct(1,:) = ahao(1,:) + acihuai(1,:) - ahuai(1,:);
aReflct(1,3)=SYS_FUC(aReflct(1,1),aReflct(1,2));
disp('反射點');
aReflct
%往中間寄存矩陣中存入最壞點m_jicun=ahuai;
if m_jicun(1,3)>aReflct(1,3)
aReflct=aReflct;
else
m_jicun=aReflct;
end
if aReflct(1,3)<acihuai(1,3)
if (1-mu)*ahuai(1,3)+mu*aReflct(1,3) < ahao(1,3)
%擴張
aextend(1,:)=(1-mu)*ahuai(1,:)+mu*aReflct(1,:);
aextend(1,3)=SYS_FUC(aextend(1,1),aextend(1,2));
disp('擴張');
aextend
if aextend(1,3)<aReflct(1,3)
ashousuo=aextend;
disp('擴張');
else
ashousuo=aReflct;
disp('反射點');
end
else
ashousuo=aReflct;
disp('反射點');
end
ahuai=ashousuo;
[ahao,acihuai,ahuai] = Paixu(ahuai,acihuai,ahao) ; %再次找最好,最壞,次壞點
ahuai
acihuai
ahao
else
if aReflct(1,3)< ahuai(1,3)
ashousuo(1,:)=(1-lamta)*ahuai(1,:)+lamta*aReflct(1,:);
ashousuo(1,3)=SYS_FUC(ashousuo(1,1),ashousuo(1,2));
if ashousuo(1,3)<acihuai(1,3)
ahuai=ashousuo;
%再次排序
[ahao,acihuai,ahuai] = Paixu(ahuai,acihuai,ahao) ;
disp('壓縮')
ahuai
ahao
else
%單純型收縮
afa(1,:)=(ahuai(1,:)+ahao(1,:))/2;
afa(2,i)=(acihuai(1,:)+ahao(1,:))/2;
afa(1,3)=SYS_FUC(afa(1,1),afa(1,2));
afa(2,3)=SYS_FUC(afa(2,1),afa(2,2));
%比較Q的大小,再次找到最好,次壞,最壞點
[ahuai,acihuai,ahao] = Bijiao(afa);
disp('收縮')
ahuai
acihuai
ahao
end
else
huhuan=ahuai;
ahuai=aReflct;
aReflct=huhuan;
ashousuo(1,:)=(1-lamta)*ahuai(1,:)+lamta*aReflct(1,:);
ashousuo(1,3)=SYS_FUC(ashousuo(1,1),ashousuo(1,2));
if ashousuo(1,3)<acihuai(1,3)
ahuai=ashousuo;
%比較出最好,最壞,次壞點
[ahao,acihuai,ahuai] = Paixu(ahuai,acihuai,ahao)
else
%單純型收縮
for i=1:N
afa(1,i)=(ahuai(1,i)+ahao(1,i))/2;
afa(2,i)=(acihuai(1,i)+ahao(1,i))/2;
end
afa(1,3)=SYS_FUC(afa(1,1),afa(1,2));
afa(2,3)=SYS_FUC(afa(2,1),afa(2,2));
%比較Q的大小,再次找到最好,次壞,最壞點
[ahuai,acihuai,ahao] = Bijiao(afa);
end
disp('收縮')
ahuai
acihuai
ahao
end
end
end
%**********************最后結果的打印和繪圖
ahuai=m_jicun;
disp('最優點');ahao
disp('最壞點');ahuai
SYSZL_FC1(ahuai(1,1),ahuai(1,2));%最壞點系統輸出
SYSZH_FC2(ahao(1,1),ahao(1,2));%最優點系統輸出
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -