dlut-KFQ人工智能导论答案1
人工智能导论作业,仅对fans开放,不要外传,不一定对,最后两个不要抄!!!!!
定义h=n*k n为已经走的步数,k为不同的数字的个数
基本步骤:编码,群体设定,适应度函数,选择复制,交叉重组,变异 主要特点:1、编码操作使其可以直接对结构对象进行操作 2、采用群体搜索策略,具有较好的全局性能 3、仅适用于适应度函数来评估个体
区分群体中个体的好坏,进行自然选择
利用群体中的个体对信息的共享从而使得整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得问题的最优解
1、初始化每个粒子 2、评价每个粒子的适应度 3、设置每个粒子经历过的最好位置Pi 4、设置全局最优值Pg 5、更新粒子的速度和位置 6、设置检测终止条件
else [min_Length,min_index] = min(Length); Length_best(iter) = min(Length_best(iter - 1),min_Length); Length_ave(iter) = mean(Length); if Length_best(iter) == min_Length Route_best(iter,:) = Table(min_index,:); Limit_iter = iter; else Route_best(iter,:) = Route_best((iter-1),:); end end % 更新信息素 Delta_Tau = zeros(n,n); % 逐个蚂蚁计算 for i = 1:m % 逐个城市计算 for j = 1:(n - 1) Delta_Tau(Table(i,j),Table(i,j+1)) = Delta_Tau(Table(i,j),Table(i,j+1)) + Q/Length(i); end Delta_Tau(Table(i,n),Table(i,1)) = Delta_Tau(Table(i,n),Table(i,1)) + Q/Length(i); end Tau = (1-vol) * Tau + Delta_Tau; % 迭代次数加1,清空路径记录表 iter = iter + 1; Table = zeros(m,n);
end %-------------------------------------------------------------------------- %% 结果显示 [Shortest_Length,index] = min(Length_best); Shortest_Route = Route_best(index,:); Time_Cost=etime(clock,t0); disp([‘最短距离:’ num2str(Shortest_Length)]); disp([‘最短路径:’ num2str([Shortest_Route Shortest_Route(1)])]); disp([‘收敛迭代次数:’ num2str(Limit_iter)]); disp([‘程序执行时间:’ num2str(Time_Cost) ‘秒’]); %-------------------------------------------------------------------------- %% 绘图 figure(1) plot([citys(Shortest_Route,1);citys(Shortest_Route(1),1)],… %三点省略符为Matlab续行符 [citys(Shortest_Route,2);citys(Shortest_Route(1),2)],‘o-’); grid on for i = 1:size(citys,1) text(citys(i,1),citys(i,2),[’ ’ num2str(i)]); end text(citys(Shortest_Route(1),1),citys(Shortest_Route(1),2),’ 起点’); text(citys(Shortest_Route(end),1),citys(Shortest_Route(end),2),’ 终点’); xlabel(‘城市位置横坐标’) ylabel(‘城市位置纵坐标’) title([‘ACA最优化路径(最短距离:’ num2str(Shortest_Length) ‘)’]) figure(2) plot(1:iter_max,Length_best,‘b’) legend(‘最短距离’) xlabel(‘迭代次数’) ylabel(‘距离’) title(‘算法收敛轨迹’) %-------------------------------------------------------------------------- %% 程序解释或说明 % 1. ismember函数判断一个变量中的元素是否在另一个变量中出现,返回0-1矩阵; % 2. cumsum函数用于求变量中累加元素的和,如A=[1, 2, 3, 4, 5], 那么cumsum(A)=[1, 3, 6, 10, 15]。
根据经验而定 部分文献中指出:Q=100,m=1~5,残留参数0.7,信息启发因子1.0,期望启发因子1.5
文献: [1] 詹士昌,徐婕,等.蚁群算法中有关算法参数的选择[J].杭州.科技通报,2003,19(5):381~386.
[2] Coloni A,Dorigo M,Maniezzo V, Ant system:Optimization by a colony of cooperating agent[J],IEEE Trans on System,Man and Cybernetics Part B:Cybernetics.1996,1(1):53~66.
[3] 马良,来自昆虫世界的寻优策略——蚁群算法[J].自然杂志,1999,21(3):161~163.