📄 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 + -