基于蚁群算法的PID控制参数优化Matlab源码
蚁群算法路径优化matlab代码

蚁群算法路径优化matlab代码标题:蚁群算法路径优化 MATLAB 代码正文:蚁群算法是一种基于模拟蚂蚁搜索食物路径的优化算法,常用于求解复杂问题。
在路径优化问题中,蚂蚁需要从起点移动到终点,通过探索周围区域来寻找最短路径。
MATLAB 是一个常用的数值计算软件,可以用来实现蚁群算法的路径优化。
下面是一个基本的 MATLAB 代码示例,用于实现蚁群算法的路径优化:```matlab% 定义参数num_ants = 100; % 蚂蚁数量num_steps = 100; % 路径优化步数search_radius = 2; % 搜索半径max_iterations = 1000; % 最大迭代次数% 随机生成起点和终点的位置坐标start_pos = [randi(100), randi(100)];end_pos = [75, 75];% 初始化蚂蚁群体的位置和方向ants_pos = zeros(num_ants, 2);ants_dir = zeros(num_ants, 2);for i = 1:num_antsants_pos(i, :) = start_pos + randn(2) * search_radius; ants_dir(i, :) = randomvec(2);end% 初始化蚂蚁群体的速度ants_vel = zeros(num_ants, 2);for i = 1:num_antsants_vel(i, :) = -0.1 * ants_pos(i, :) + 0.5 *ants_dir(i, :);end% 初始时蚂蚁群体向终点移动for i = 1:num_antsans_pos = end_pos;ans_vel = ants_vel;for j = 1:num_steps% 更新位置和速度ans_pos(i) = ans_pos(i) + ans_vel(i);ants_vel(i, :) = ones(1, num_steps) * (-0.1 * ans_pos(i) + 0.5 * ans_dir(i, :));end% 更新方向ants_dir(i, :) = ans_dir(i, :) - ans_vel(i) * 3;end% 迭代优化路径max_iter = 0;for i = 1:max_iterations% 计算当前路径的最短距离dist = zeros(num_ants, 1);for j = 1:num_antsdist(j) = norm(ants_pos(j) - end_pos);end% 更新蚂蚁群体的位置和方向for j = 1:num_antsants_pos(j, :) = ants_pos(j, :) - 0.05 * dist(j) * ants_dir(j, :);ants_dir(j, :) = -ants_dir(j, :);end% 更新蚂蚁群体的速度for j = 1:num_antsants_vel(j, :) = ants_vel(j, :) - 0.001 * dist(j) * ants_dir(j, :);end% 检查是否达到最大迭代次数if i > max_iterationsbreak;endend% 输出最优路径[ans_pos, ans_vel] = ants_pos;path_dist = norm(ans_pos - end_pos);disp(["最优路径长度为:" num2str(path_dist)]);```拓展:上述代码仅仅是一个简单的示例,实际上要实现蚁群算法的路径优化,需要更加复杂的代码实现。
蚁群算法matlab程序代码

先新建一个主程序M文件ACATSP.m 代码如下:function [R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ACATSP(C,NC_max,m,Alpha,Beta,Rho,Q)%%================================================================ =========%% 主要符号说明%% C n个城市的坐标,n×2的矩阵%% NC_max 蚁群算法MATLAB程序最大迭代次数%% m 蚂蚁个数%% Alpha 表征信息素重要程度的参数%% Beta 表征启发式因子重要程度的参数%% Rho 信息素蒸发系数%% Q 表示蚁群算法MATLAB程序信息素增加强度系数%% R_best 各代最佳路线%% L_best 各代最佳路线的长度%%================================================================ =========%% 蚁群算法MATLAB程序第一步:变量初始化n=size(C,1);%n表示问题的规模(城市个数)D=zeros(n,n);%D表示完全图的赋权邻接矩阵for i=1:nfor j=1:nif i~=jD(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5;D(i,j)=eps; % i = j 时不计算,应该为0,但后面的启发因子要取倒数,用eps(浮点相对精度)表示endD(j,i)=D(i,j); %对称矩阵endendEta=1./D; %Eta为启发因子,这里设为距离的倒数Tau=ones(n,n); %Tau为信息素矩阵Tabu=zeros(m,n); %存储并记录路径的生成NC=1; %迭代计数器,记录迭代次数R_best=zeros(NC_max,n); %各代最佳路线L_best=inf.*ones(NC_max,1); %各代最佳路线的长度L_ave=zeros(NC_max,1); %各代路线的平均长度while NC<=NC_max %停止条件之一:达到最大迭代次数,停止%% 蚁群算法MATLAB程序第二步:将m只蚂蚁放到n个城市上Randpos=[]; %随即存取for i=1:(ceil(m/n))Randpos=[Randpos,randperm(n)];endTabu(:,1)=(Randpos(1,1:m))'; %此句不太理解?%% 蚁群算法MATLAB程序第三步:m只蚂蚁按概率函数选择下一座城市,完成各自的周游for j=2:n %所在城市不计算for i=1:mvisited=Tabu(i,1:(j-1)); %记录已访问的城市,避免重复访问J=zeros(1,(n-j+1)); %待访问的城市P=J; %待访问城市的选择概率分布for k=1:nif length(find(visited==k))==0 %开始时置0J(Jc)=k;Jc=Jc+1; %访问的城市个数自加1endend%% 下面计算蚁群算法MATLAB程序待选城市的概率分布for k=1:length(J)P(k)=(Tau(visited(end),J(k))^Alpha)*(Eta(visited(end),J(k))^Beta);endP=P/(sum(P));%% 按概率原则选取下一个城市Pcum=cumsum(P); %cumsum,元素累加即求和Select=find(Pcum>=rand); %若计算的概率大于原来的就选择这条路线to_visit=J(Select(1));Tabu(i,j)=to_visit;endendif NC>=2Tabu(1,:)=R_best(NC-1,:);end%% 蚁群算法MATLAB程序第四步:记录本次迭代最佳路线L=zeros(m,1); %开始距离为0,m*1的列向量for i=1:mR=Tabu(i,:);for j=1:(n-1)L(i)=L(i)+D(R(j),R(j+1)); %原距离加上第j个城市到第j+1个城市的距离L(i)=L(i)+D(R(1),R(n)); %一轮下来后走过的距离endL_best(NC)=min(L); %最佳距离取最小pos=find(L==L_best(NC));R_best(NC,:)=Tabu(pos(1),:); %此轮迭代后的最佳路线L_ave(NC)=mean(L); %此轮迭代后的平均距离NC=NC+1 %迭代继续%% 蚁群算法MATLAB程序第五步:更新信息素Delta_Tau=zeros(n,n); %开始时信息素为n*n的0矩阵for i=1:mfor j=1:(n-1)Delta_Tau(Tabu(i,j),Tabu(i,j+1))=Delta_Tau(Tabu(i,j),Tabu(i,j+1))+Q/L(i);%此次循环在路径(i,j)上的信息素增量endDelta_Tau(Tabu(i,n),Tabu(i,1))=Delta_Tau(Tabu(i,n),Tabu(i,1))+Q/L(i);%此次循环在整个路径上的信息素增量endTau=(1-Rho).*Tau+Delta_Tau; %考虑信息素挥发,更新后的信息素%% 蚁群算法MATLAB程序第六步:禁忌表清零Tabu=zeros(m,n); %%直到最大迭代次数end%% 蚁群算法MATLAB程序第七步:输出结果Pos=find(L_best==min(L_best)); %找到最佳路径(非0为真)Shortest_Route=R_best(Pos(1),:) %最大迭代次数后最佳路径Shortest_Length=L_best(Pos(1)) %最大迭代次数后最短距离subplot(1,2,1) %绘制第一个子图形DrawRoute(C,Shortest_Route) %画路线图的子函数subplot(1,2,2) %绘制第二个子图形plot(L_best)hold on %保持图形plot(L_ave,'r')title('平均距离和最短距离') %标题建立一个子程序DrawRoute.m代码如下:function DrawRoute(C,R)%%================================================================ =========%% DrawRoute.m%% 画路线图的子函数%%-------------------------------------------------------------------------%% C Coordinate 节点坐标,由一个N×2的矩阵存储%% R Route 路线%%================================================================ =========N=length(R);scatter(C(:,1),C(:,2));hold onplot([C(R(1),1),C(R(N),1)],[C(R(1),2),C(R(N),2)],'g')hold onfor ii=2:Nplot([C(R(ii-1),1),C(R(ii),1)],[C(R(ii-1),2),C(R(ii),2)],'g')hold onendtitle('旅行商问题优化结果')需要输入的参数数据有:C: n个城市的坐标,n×2的矩阵NC_max: 蚁群算法MATLAB程序最大迭代次数M: 蚂蚁个数Alpha: 表征信息素重要程度的参数Beta:表征启发式因子重要程度的参数Rho: 信息素蒸发系数Q:表示蚁群算法MATLAB程序信息素增加强度系数运行时打开ACATSP.m 点击运行或输入ACATSP(C,NC_max,m,Alpha,Beta,Rho,Q)一个运行实例:m=31;Alpha=1;Beta=5;Rho=0.1;NC_max=200;Q=100;31都市坐标为:1304 23123639 13154177 22443712 13993488 15353326 15563238 12294196 10044312 7904386 5703007 1970 2562 1756 2788 1491 2381 1676 1332 695 3715 1678 3918 2179 4061 2370 3780 2212 3676 2578 4029 2838 4263 2931 3429 1908 3507 2367 3394 2643 3439 3201 2935 3240 3140 3550 2545 2357 2778 2826 2370 2975。
基于蚁群算法的航空发动机PID参数优化

良好 . 有 较 强 的鲁 棒 性 仿 真 结 果表 明 该 控 制 系统 实现 了解耦 控 制 , 航 空 发 动机 模 型 参 具 对
数 在 大 范 围 内的 变化 均有 良好 的 控 制 效果 关键 词 : 空 发 动机 ; 航 蚁群 算法 ; I 控 制 器 ; 耦 ; P D 解 多变 量 系统 中 图分 类 号 : 2 3 V3. 7 文 献标 志 码 : A
PI Pa a e e ni f Ae o Eng n s d o D r m t r Tu ng o r i e Ba e n Ant Co o y Al o ih ln g rt m
F ig U Qa n
( a e fFih e h oo y a d S ft ,CvlAvain Fih nv ri fC ia Gu n h n 6 8 0 , hn ) Acd my o l tT c n lg n aey ii g it 1 tU ies y o hn , a g a 1 3 7 C ia o g t
蚁 群 算 法 是 通 过 模 拟 自然 界 中蚂 蚁 集 体 寻 径 行 为 而 提 出的 一 种基 于种 群 的启 发 式 仿 生 进 化 算
法 Ⅲ。 吸收 了蚂蚁群 体 行为 的典型 特征 , 它 因此 在解
Q ㈨ :
}
() 1
பைடு நூலகம்
设 蚂 蚁 总数为 m. 于每 只蚂 蚁 . 义其 相应 对 k定
t h v r b e y t m k h a r n i e i l t n r s l e n t t h f cie e s o h n o lt l e he mu ia i l s se h e t e eo e gn .S mu ai e ut d mo sr e te ef t n s f t e i c mp eey d — a o s a e v
蚁群算法matlab代码讲解

蚁群算法matlab代码讲解蚁群算法(Ant Colony Algorithm)是模拟蚁群觅食行为而提出的一种优化算法。
它以蚁群觅食的方式来解决优化问题,比如旅行商问题、图着色问题等。
该算法模拟了蚂蚁在寻找食物时的行为,通过信息素的正反馈和启发式搜索来实现问题的最优解。
在蚁群算法中,首先需要初始化一组蚂蚁和问题的解空间。
每只蚂蚁沿着路径移动,通过信息素和启发式规则来选择下一步的移动方向。
当蚂蚁到达目标位置后,会根据路径的长度来更新信息素。
下面是一个用MATLAB实现蚁群算法的示例代码:```matlab% 参数设置num_ants = 50; % 蚂蚁数量num_iterations = 100; % 迭代次数alpha = 1; % 信息素重要程度因子beta = 5; % 启发式因子rho = 0.1; % 信息素蒸发率Q = 1; % 信息素增加强度因子pheromone = ones(num_cities, num_cities); % 初始化信息素矩阵% 初始化蚂蚁位置和路径ants = zeros(num_ants, num_cities);for i = 1:num_antsants(i, 1) = randi([1, num_cities]);end% 迭代计算for iter = 1:num_iterations% 更新每只蚂蚁的路径for i = 1:num_antsfor j = 2:num_cities% 根据信息素和启发式规则选择下一步移动方向next_city = choose_next_city(pheromone, ants(i, j-1), beta);ants(i, j) = next_city;endend% 计算每只蚂蚁的路径长度path_lengths = zeros(num_ants, 1);for i = 1:num_antspath_lengths(i) = calculate_path_length(ants(i, :), distances);end% 更新信息素矩阵pheromone = (1 - rho) * pheromone;for i = 1:num_antsfor j = 2:num_citiespheromone(ants(i, j-1), ants(i, j)) = pheromone(ants(i, j-1), ants(i, j)) + Q / path_lengths(i); endendend```上述代码中的参数可以根据具体问题进行调整。
matlab的蚂蚁算法的实现

matlab的蚂蚁算法的实现
在上述代码中,我们首先设置了一些参数,如蚂蚁数量、迭代次数、信息素和启发式信息 的重要程度等。然后,根据参数初始化了信息素矩阵,并进行了迭代优化过程。
在每次迭代中,我们先初始化蚂蚁的位置,然后根据信息素和启发式信息的重要程度,以 及当前城市和已访问城市的距离,计算每个城市被选择的概率。根据概率选择下一个城市, 直到完成整个路径的选择。然后,根据蚂蚁的路径更新信息素矩阵。重复迭代过程,直到达 到指定的迭代次数。
最后,输出最优路径和最优距离。
matlab的蚂蚁算法的实现
需要注意的是,上述代码只是一个简单的示例,实际应用中可能需要根据具体问题进行适 当的调整和扩展。蚂蚁算法的实现也可能因问题的复杂性和特点而有所不同。
Байду номын сангаас
matlab的蚂蚁算法的实现
以下是一个使用 MATLAB 实现蚂蚁算法的简单示例:
```matlab % 参数设置 numAnts = 10; % 蚂蚁数量 numIterations = 100; % 迭代次数 alpha = 1; % 信息素重要程度 beta = 5; % 启发式信息重要程度 rho = 0.5; % 信息素挥发率 Q = 1; % 信息素增量 numCities = 10; % 城市数量 distances = rand(numCities); % 城市之间的距离矩阵
基于蚁群算法的PID参数的二次整定和优化

中只有一套在工作,另一套处于待命状态,而热冗余是两套设 尔滨工业大学学报. 2001,12,33,6,740~745
备同时工作。冷冗余方式下,假设此时主设备(***A 表示的设 [3]禹春来 等. CAN 总线冗余方法研究[J]. 测控技术. 2003,22,
备)处于工作状态,而备份设备(***B 表示的设备)处于待命状 10,28~30
3 算法的实现
3.1 采用 Ziegler-Nichols(Z-N)法求 PID 参数整定初值
Ziegler-Nichols 法是由 Ziegler 和 Nichols 对由一阶惯性加
纯延迟环节构成的开环系统提出的。它通过测试法求得 KP 的 值,再应用经验公式求 TI 和 TD。
3.2 二次蚁群算法实现 PID 参数整定和优化
rameter faster, avoiding low speed after circulating enough times of an ant colony algorithm, but also obtain accurate parameter values
of proportional, integral and differential quickly. In a word, this algorithm can satisfy the dynamic performances efficiently indicators of the system, as well as improving the speed, the accuracy and the stability for a control system. Key words: PID controller; twice ant colony algorithm; Ziegler-Nichols tuning
基于蚁群算法PID控制寻优实现(有代码超详细)

基于粒子群优化算法对离散PID控制器参数进行优化的研究与分析摘要:目前,PID控制器已经广泛应用于工业控制中,而计算机控制系统又广泛应用于现场环境中。
针对已有的控制对象,如何设计控制性能良好的离散PID控制器,即如何找到一组最合适的离散PID控制器参数已经变得非常重要。
本文采用粒子群优化算法,在二次型性能指标下对离散PID控制器的控制参数进行优化并给出了优化结果。
通过仿真研究与分析,采用粒子群优化算法可以得到PID控制器的最优参数,且在二次型性能指标下控制效果较好。
关键词:粒子群优化算法PID控制器二次型指标参数优化1. 引言在过去的几十年里,PID控制器在工业控制中得到了广泛应用。
在控制理论和技术飞速发展的今天,工业过程控制中95%以上的控制回路都具有PID结构,并且许多高级控制都是以PID控制为基础的。
PID控制器作为最早实用化的控制器已有70多年历史,尽管自1940年以来,许多先进控制方法不断推出,但PID 控制器以其结构简单,使用中参数容易整定,对模型误差具有鲁棒性及易于操作等优点,仍被广泛应用于冶金、化工、电力、轻工和机械等工业过程控制中。
PID控制器的参数整定是控制系统设计的核心内容。
它是根据被控过程的特性确定PID控制器的比例系数、积分时间和微分时间的大小。
PID控制器参数整定的方法很多,概括起来有两大类:一是实验凑试法,它主要依赖调试经验,直接在控制系统的试验中进行,且方法简单、易于掌握,在工程实际中被广泛采用。
二是理论计算整定法,它主要是依据系统的数学模型,经过理论计算确定控制器参数。
这种方法所得到的计算数据未必可以直接用,还必须通过工程实际进行调整和修改[1]。
但根据参数凑试法得出的控制器参数的控制效果并不是很理想,而手动调整控制器参数找到较优值费时又费力,因此利用一种优化算法对控制器参数进行优化是非常必要的。
为此,本文采用粒子群优化算法,在二次型性能指标下对离散PID 控制器的控制参数进行优化并给出了优化结果,同时通过仿真进行研究与分析。
基于进制蚁群算法的自适应pid控制器优化设计与整定方法

基于进制蚁群算法的自适应pid控制器优化设计与整定方
法
自适应PID控制器是一种根据系统状态自动调整PID参数
的控制器。
进制蚁群算法是一种模拟蚁群行为的优化算法,可以应用于PID控制器参数的优化。
基于进制蚁群算法的自适应PID控制器优化设计与整定方
法可以按照以下步骤进行:
1. 确定控制系统的目标和性能要求,包括稳定性、快速性
和精确性等指标。
2. 设计PID控制器结构,包括选择合适的比例系数、积分
系数和微分系数。
3. 将PID控制器的参数表示为进制形式,即通过进制编码
将参数转化为二进制形式。
4. 初始化进制蚁群算法中的参数,包括蚂蚁数量、迭代次数和信息素浓度等。
5. 利用蚁群算法搜索最优的PID参数组合,通过信息素的分布和挥发,蚂蚁在参数空间中搜索最优解。
6. 根据蚁群算法的搜索结果,更新PID控制器的参数。
7. 在实际控制系统中进行仿真或实验,评估优化后的PID 控制器的性能。
8. 根据实际反馈结果,对PID控制器进行进一步的调整和优化。
通过以上的步骤,基于进制蚁群算法的自适应PID控制器优化设计与整定方法能够根据系统的需求和性能要求,自动搜索最优的PID参数组合,提高控制系统的稳定性和性能。
同时,由于进制蚁群算法的全局搜索能力,可以避免陷入局部最优解的问题,提高了优化的准确性和效率。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于蚁群算法的PID控制参数优化Matlab源码
(2009-07-26 12:31:02)
除了蚁群算法,可用于PID参数优化的智能算法还有很多,比如遗传算法、模拟退火算法、粒子群算法、人工鱼群算法,等等。
function [BESTX,BESTY,ALLX,ALLY]=ACOUCP
(K,N,Rho,Q,Lambda,LB,UB,Num,Den,Delay,ts,StepNum,SigType,PIDLB,PIDUB)
%% 此函数实现蚁群算法,用于PID控制参数优化
% GreenSim团队原创作品,转载请注明
%Email:****************
% GreenSim团队主页:/greensim
% [color=red]欢迎访问GreenSim——算法仿真团队→[url=/greensim]
/greensim[/url][/color]
%% 输入参数列表
% K 迭代次数
% N 蚁群规模
% Rho 信息素蒸发系数,取值0~1之间,推荐取值0.7~0.95
% Q 信息素增加强度,大于0,推荐取值1左右
% Lambda 蚂蚁爬行速度,取值0~1之间,推荐取值0.1~0.5
% LB 决策变量的下界,M×1的向量
% UB 决策变量的上界,M×1的向量
% Num 被控制对象传递函数的分子系数向量
% Den 被控制对象传递函数的分母系数向量
% Delay 时间延迟
% ts 仿真时间步长
% StepNum 仿真总步数
% SigType 信号类型,1为阶跃信号,2为方波信号,3为正弦波信号
% PIDLB PID控制输出信号限幅的下限
% PIDUB PID控制输出信号限幅的上限
%% 输出参数列表
% BESTX K×1细胞结构,每一个元素是M×1向量,记录每一代的最优蚂蚁
% BESTY K×1矩阵,记录每一代的最优蚂蚁的评价函数值
% ALLX K×1细胞结构,每一个元素是M×N矩阵,记录每一代蚂蚁的位置
% ALLY K×N矩阵,记录每一代蚂蚁的评价函数值
%% 第一步:初始化
M=length(LB);%决策变量的个数
%蚁群位置初始化
X=zeros(M,N);
for i=1:M
x=unifrnd(LB(i),UB(i),1,N);
X(i,:)=x;
end
%输出变量初始化
ALLX=cell(K,1);%细胞结构,每一个元素是M×N矩阵,记录每一代的个体ALLY=zeros(K,N);%K×N矩阵,记录每一代评价函数值
BESTX=cell(K,1);%细胞结构,每一个元素是M×1向量,记录每一代的最优个体BESTY=zeros(K,1);%K×1矩阵,记录每一代的最优个体的评价函数值
k=1;%迭代计数器初始化
Tau=ones(1,N);%信息素初始化
Y=zeros(1,N);%适应值初始化
%% 第二步:迭代过程
while k<=K
YY=zeros(1,N);
for n=1:N
x=X(:,n);
[J,u,yout,error]=PIDOBJ(x(1),x(2),x
(3),Num,Den,Delay,ts,StepNum,SigType,PIDLB,PIDUB);
YY(n)=J;
end
maxYY=max(YY);
temppos=find(YY==maxYY);
POS=temppos(1);
%蚂蚁随机探路
for n=1:N
if n~=POS
x=X(:,n);
[J,u,yout,error]=PIDOBJ(x(1),x(2),x
(3),Num,Den,Delay,ts,StepNum,SigType,PIDLB,PIDUB);
Fx=J;
mx=GaussMutation(x,LB,UB);
[J,u,yout,error]=PIDOBJ(mx(1),mx(2),mx
(3),Num,Den,Delay,ts,StepNum,SigType,PIDLB,PIDUB);
Fmx=J;
if Fmx<Fx
X(:,n)=mx;
Y(n)=Fmx;
elseif rand>1-(1/(sqrt(k)))
Y(n)=Fmx;
else
X(:,n)=x;
Y(n)=Fx;
end
end
end
for n=1:N
if n~=POS
x=X(:,n);
[J,u,yout,error]=PIDOBJ(x(1),x(2),x
(3),Num,Den,Delay,ts,StepNum,SigType,PIDLB,PIDUB);
Fx=J;
mx=GaussMutation(x,LB,UB);
[J,u,yout,error]=PIDOBJ(mx(1),mx(2),mx
(3),Num,Den,Delay,ts,StepNum,SigType,PIDLB,PIDUB);
Fmx=J;
if Fmx<Fx
Y(n)=Fmx;
elseif rand>1-(1/(sqrt(k)))
X(:,n)=mx;
Y(n)=Fmx;
else
X(:,n)=x;
Y(n)=Fx;
end
end
end
%朝信息素最大的地方移动
for n=1:N
if n~=POS
x=X(:,n);
r=(K+k)/(K+K);
p=randperm(N);
t=ceil(r*N);
pos=p(1:t);
TempTau=Tau(pos);
maxTempTau=max(TempTau);
pos2=find(TempTau==maxTempTau);
pos3=pos(pos2(1));
x2=X(:,pos3(1));
x3=(1-Lambda)*x+Lambda*x2;
[J,u,yout,error]=PIDOBJ(x(1),x(2),x
(3),Num,Den,Delay,ts,StepNum,SigType,PIDLB,PIDUB);
Fx=J;
[J,u,yout,error]=PIDOBJ(x(1),x(2),x
(3),Num,Den,Delay,ts,StepNum,SigType,PIDLB,PIDUB);
Fx3=J;
if Fx3<Fx
X(:,n)=x3;
Y(n)=Fx3;
elseif rand>1-(1/(sqrt(k)))
X(:,n)=x3;
Y(n)=Fx3;
else
X(:,n)=x;
Y(n)=Fx;
end
end
end
%更新信息素并记录
Tau=Tau*(1-Rho);
maxY=max(Y);
minY=min(Y);
DeltaTau=(maxY-Y)/(maxY-minY);
Tau=Tau+Q*DeltaTau;
ALLX{k}=X;
ALLY(k,:)=Y;
minY=min(Y);
pos4=find(Y==minY);
BESTX{k}=X(:,pos4(1));
BESTY(k)=minY;
disp(k);
k=k+1;
end。