⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main_fc.m

📁 MatLab环境下编程实现简单交互式单纯形法进行寻优并显示寻优结果。
💻 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 + -