資源簡介
采用遺傳算法實現pid參數的優化,
代碼片段和文件信息
clear?all
close?all
Size=50;%?規模
CodeL=3;%?代碼長度
Gmax=200;%?迭代次數
Pc=0.9;?%?交叉概率
Pm=0.1;%?變異概率
MinX?=[0?0?0];%最小范圍
MaxX?=[30?0.03?5000];
for?kg=1:Gmax?%?開始循環
????disp([‘正在進行第‘?num2str(kg)?‘代優化/共‘?num2str(Gmax)?‘代‘])
????for?i=1:Size
????????if?kg==1?%?第一代初始生成
????????????E(i:)=?(MaxX-MinX).*rand(1CodeL)+MinX;%?生成范圍內的代碼
????????end
????????kp=E(i1);%?pid提取
????????ki=E(i2);
????????kd=E(i3);
????????
????????Bsf=pid_ga(kpkikd);%?目標函數計算?調用pid
????????
????????fi(i)=1/Bsf;%?適應度是目標函數的倒數
????end
????
????[Val?Ind?]=max(fi);%?找到最大適應度
????BestJ(kg)=Val?;%?最大適應度保存
????BestS=E(Ind:);
????
????%?選擇
????fi_sum=sum(fi);?????????????%?適應度和
????Pr=fi/fi_sum;???????????????%?選擇概率
????Pri=cumsum(Pr);%?形成輪盤
????for?i=1:Size
????????Prand=rand;?????%?隨機概率生成
????????Pi0=find(Pri>Prand);?%?所處的輪盤區間
????????Pi1=Pi0(1);
????????TempE(i:)=E(Pi1:);????%?把輪盤對應的代碼保存
????end
????
????%?交叉
????for?i=1:2:(S
- 上一篇:svpwm逆變及電機轉差頻率控制
- 下一篇:最速下降法MATLAB程序
評論
共有 條評論