蚁群算法matlab程序
⑴ MATLAB建模方法有哪些
首先,Matlab是一个工具,它不是一个方法。
其次,我给你推荐一本书
《MATLAB 在数学建模中的应用(第2版)》
然后它的目录可以回答你的问题:
第1章 数学建模常规方法及其MATLAB实现
1.1 MATLAB与数据文件的交互
1.1.1 MATLAB与Excel的交互
1.1.2 MATLAB与TXT交互
1.1.3 MATLAB界面导入数据的方法
1.2 数据拟合方法
1.2.1 多项式拟合
1.2.2 指定函数拟合
1.2.3 曲线拟合工具箱
1.3 数据拟合应用实例
1.3.1 人口预测模型
1.3.2 薄膜渗透率的测定
1.4 数据的可视化
1.4.1 地形地貌图形的绘制
1.4.2 车灯光源投影区域的绘制(CUMCM2002A)
1.5 层次分析法(AHP)
1.5.1 层次分析法的应用场景
1.5.2 AHPMATLAB程序设计
第2章 规划问题的MATLAB求解
2.1 线性规划
2.1.1 线性规划的实例与定义
2.1.2 线性规划的MATLAB标准形式
2.1.3 线性规划问题解的概念
2.1.4 求解线性规划的MATLAB解法
2.2 非线性规划
2.2.1 非线性规划的实例与定义
2.2.2 非线性规划的MATLAB解法
2.2.3 二次规划
2.3 整数规划
2.3.1 整数规划的定义
2.3.2 01整数规划
2.3.3 随机取样计算法
第3章 数据建模及MATLAB实现
3.1 云模型
3.1.1 云模型基础知识
3.1.2 云模型的MATLAB程序设计
3.2 Logistic回归
3.2.1 Logistic模型
3.2.2 Logistic回归MATLAB程序设计
3.3 主成分分析
3.3.1 PCA基本思想
3.3.2 PCA步骤
3.3.3 主成分分析MATLAB程序设计
3.4 支持向量机(SVM)
3.4.1 SVM基本思想
3.4.2 理论基础
3.4.3 支持向量机MATLAB程序设计
3.5 K均值(KMeans)
3.5.1 KMeans原理、步骤和特点
3.5.2 KMeans聚类MATLAB程序设计
3.6 朴素贝叶斯判别法
3.6.1 朴素贝叶斯判别模型
3.6.2 朴素贝叶斯判别法MATLAB设计
3.7 数据建模综合应用
参考文献
第4章 灰色预测及其MATLAB实现
4.1 灰色系统基本理论
4.1.1 灰色关联度矩阵
4.1.2 经典灰色模型GM(1,1)
4.1.3 灰色Verhulst模型
4.2 灰色系统的程序设计
4.2.1 灰色关联度矩阵的程序设计
4.2.2 GM(1,1)的程序设计
4.2.3 灰色Verhulst模型的程序设计
4.3 灰色预测的MATLAB程序
4.3.1 典型程序结构
4.3.2 灰色预测程序说明
4.4 灰色预测应用实例
4.4.1 实例一长江水质的预测(CUMCM2005A)
4.4.2 实例二预测与会代表人数(CUMCM2009D)
4.5 小结
参考文献
第5章 遗传算法及其MATLAB实现
5.1 遗传算法基本原理
5.1.1 人工智能算法概述
5.1.2 遗传算法生物学基础
5.1.3 遗传算法的实现步骤
5.1.4 遗传算法的拓展
5.2 遗传算法的MATLAB程序设计
5.2.1 程序设计流程及参数选取
5.2.2 MATLAB遗传算法工具箱
5.3 遗传算法应用案例
5.3.1 案例一:无约束目标函数最大值遗传算法求解策略
5.3.2 案例二:CUMCM中多约束非线性规划问题的求解
5.3.3 案例三:BEATbx遗传算法工具箱的应用——电子商务中转化率影响因素研究
参考文献
第6章 模拟退火算法及其MATLAB实现
6.1 算法的基本理论
6.1.1 算法概述
6.1.2 基本思想
6.1.3 其他一些参数的说明
6.1.4 算法基本步骤
6.1.5 几点说明
6.2 算法的MATLAB实现
6.2.1 算法设计步骤
6.2.2 典型程序结构
6.3 应用实例:背包问题的求解
6.3.1 问题的描述
6.3.2 问题的求解
6.4 模拟退火程序包ASA简介
6.4.1 ASA的优化实例
6.4.2 ASA的编译
6.4.3 MATLAB版ASA的安装与使用
6.5 小结
6.6 延伸阅读
参考文献
第7章 人工神经网络及其MATLAB实现
7.1 人工神经网络基本理论
7.1.1 人工神经网络模型拓扑结构
7.1.2 常用激励函数
7.1.3 常见神经网络理论
7.2 BP神经网络的结构设计
7.2.1 鲨鱼嗅闻血腥味与BP神经网络训练
7.2.2 透视神经网络的学习步骤
7.2.3 BP神经网络的动态拟合过程
7.3 RBF神经网络的结构设计
7.3.1 梯度训练法RBF神经网络的结构设计
7.3.2 RBF神经网络的性能
7.4 应用实例
7.4.1 基于MATLAB源程序公路运量预测
7.4.2 基于MATLAB工具箱公路运量预测
7.4.3 艾滋病治疗最佳停药时间的确定(CUMCM2006B)
7.4.4 RBF神经网络预测新客户流失概率
7.5 延伸阅读
7.5.1 从金融分析中的小数定理谈神经网络的训练样本遴选规则
7.5.2 小议BP神经网络的衍生机理
参考文献
第8章粒子群算法及其MATLAB实现
8.1 PSO算法相关知识
8.1.1 初识PSO算法
8.1.2 PSO算法的基本理论
8.1.3 PSO算法的约束优化
8.1.4 PSO算法的优缺点
8.2 PSO算法程序设计
8.2.1 程序设计流程
8.2.2 PSO算法的参数选取
8.2.3 PSO算法MATLAB源程序范例
8.3 应用案例:基于PSO算法和BP算法训练神经网络
8.3.1 如何评价网络的性能
8.3.2 BP算法能够搜索到极值的原理
8.3.3 PSOBP神经网络的设计指导原则
8.3.4 PSO算法优化神经网络结构
8.3.5 PSOBP神经网络的实现
参考文献
第9章 蚁群算法及其MATLAB实现
9.1 蚁群算法原理
9.1.1 蚁群算法基本思想
9.1.2 蚁群算法数学模型
9.1.3 蚁群算法流程
9.2 蚁群算法的MATLAB实现
9.2.1 实例背景
9.2.2 算法设计步骤
9.2.3 MATLAB程序实现
9.2.4 程序执行结果与分析
9.3 算法关键参数的设定
9.3.1 参数设定的准则
9.3.2 蚂蚁数量
9.3.3 信息素因子
9.3.4 启发函数因子
9.3.5 信息素挥发因子
9.3.6 信息素常数
9.3.7 最大迭代次数
9.3.8 组合参数设计策略
9.4 应用实例:最佳旅游方案(苏北赛2011B)
9.4.1 问题描述
9.4.2 问题的求解和结果
9.5 本章小结
参考文献
第10章 小波分析及其MATLAB实现
10.1 小波分析基本理论
10.1.1 傅里叶变换的局限性
10.1.2 伸缩平移和小波变换
10.1.3 小波变换入门和多尺度分析
10.1.4 小波窗函数自适应分析
10.2 小波分析MATLAB程序设计
10.2.1 小波分析工具箱函数指令
10.2.2 小波分析程序设计综合案例
10.3 小波分析应用案例
10.3.1 案例一:融合拓扑结构的小波神经网络
10.3.2 案例二:血管重建引出的图像数字水印
参考文献
第11章 计算机虚拟及其MATLAB实现
11.1 计算机虚拟基本知识
11.1.1 从3G移动互联网协议WCDMA谈MATLAB虚拟
11.1.2 计算机虚拟与数学建模
11.1.3 数值模拟与经济效益博弈
11.2 数值模拟MATLAB程序设计
11.2.1 微分方程组模拟
11.2.2 服从概率分布的随机模拟
11.2.3 蒙特卡罗模拟
11.3 动态仿真MATLAB程序设计
11.3.1 MATLAB音频处理
11.3.2 MATLAB常规动画实现
11.4 应用案例:四维水质模型
11.4.1 问题的提出
11.4.2 问题的分析
11.4.3 四维水质模型准备
11.4.4 条件假设与符号约定
11.4.5 四维水质模型的组建
11.4.6 模型求解
11.4.7 计算机模拟情境
参考文献
下篇 真题演习
第12章 彩票中的数学(CUMCM2002B)
12.1 问题的提出
12.2 模型的建立
12.2.1 模型假设与符号说明
12.2.2 模型的准备
12.2.3 模型的建立
12.3 模型的求解
12.3.1 求解的思路
12.3.2 MATLAB程序
12.3.3 程序结果
12.4 技巧点评
参考文献
第13章 露天矿卡车调度问题(CUMCM2003B)
13.1 问题的提出
13.2 基本假设与符号说明
13.2.1 基本假设
13.2.2 符号说明
13.3 问题分析及模型准备
13.4 原则①:数学模型(模型1)的建立与求解
13.4.1 模型的建立
13.4.2 模型求解
13.5 原则②:数学模型(模型2)的建立与求解
13.6 技巧点评
参考文献
第14章 奥运会商圈规划问题(CUMCM2004A)
14.1 问题的描述
14.2 基本假设、名词约定及符号说明
14.2.1 基本假设
14.2.2 符号说明
14.2.3 名词约定
14.3 问题分析与模型准备
14.3.1 基本思路
14.3.2 基本数学表达式的构建
14.4 设置MS网点数学模型的建立与求解
14.4.1 模型建立
14.4.2 模型求解
14.5 设置MS网点理论体系的建立
14.6 商区布局规划的数学模型
14.6.1 模型建立
14.6.2 模型求解
14.7 模型的评价及使用说明
14.7.1 模型的优点
14.7.2 模型的缺点
14.8 技巧点评
参考文献
第15章 交巡警服务平台的设置与调度(CUMCM2011B)
15.1 问题的提出
15.2 问题的分析
15.3 基本假设
15.4 问题1模型的建立与求解
15.4.1 交巡警服务平台管辖范围分配
15.4.2 交巡警的调度
15.4.3 最佳新增服务平台设置
15.5 问题2模型的建立和求解
15.5.1 全市服务平台的合理性分析问题的模型与求解
15.5.2 搜捕嫌疑犯实例的模型与求解
15.6 模型的评价与改进
15.6.1 模型优点
15.6.2 模型缺点
15.7 技巧点评
参考文献
第16章 葡萄酒的评价(CUMCM2012A)
16.1 问题的提出
16.2 基本假设
16.3 问题①模型的建立和求解
16.3.1 问题①的分析
16.3.2 模型的建立和求解
16.4 问题②模型的建立和求解
16.4.1 问题②的基本假设和分析
16.4.2 模型的建立和求解
16.5 问题③模型的建立和求解
16.5.1 问题③的分析
16.5.2 模型的建立和求解
16.6 问题④模型的建立和求解
16.6.1 问题④的分析
16.6.2 模型的建立和求解
16.7 论文点评
参考文献
附件数学建模参赛经验
一、如何准备数学建模竞赛
二、数学建模队员应该如何学习MATLAB
三、如何在数学建模竞赛中取得好成绩
四、数学建模竞赛中的项目管理和时间管理
五、一种非常实用的数学建模方法——目标建模法
⑵ 多旅行商问题matlab程序
[code]function [R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ACATSP(C,NC_max,m,Alpha,Beta,Rho,Q)
%%=========================================================================
%% ACATSP.m
%% Ant Colony Algorithm for Traveling Salesman Problem
%% ChengAihua,PLA Information Engineering University,ZhengZhou,China
%% Email:[email protected]
%% All rights reserved
%%-------------------------------------------------------------------------
%% 主要符号说明
%% C n个城市的坐标,n×2的矩阵
%% NC_max 最大迭代次数
%% m 蚂蚁个数
%% Alpha 表征信息素重要程度的参数
%% Beta 表征启发式因子重要程度的参数
%% Rho 信息素蒸发系数
%% Q 信息素增加强度系数
%% R_best 各代最佳路线
%% L_best 各代最佳路线的长度
%%=========================================================================
%%第一步:变量初始化
n=size(C,1);%n表示问题的规模(城市个数)
D=zeros(n,n);%D表示完全图的赋权邻接矩阵
for i=1:n
for j=1:n
if i~=j
D(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5;
else
D(i,j)=eps;
end
D(j,i)=D(i,j);
end
end
Eta=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%停止条件之一:达到最大迭代次数
%%第二步:将m只蚂蚁放到n个城市上
Randpos=[];
for i=1:(ceil(m/n))
Randpos=[Randpos,randperm(n)];
end
Tabu(:,1)=(Randpos(1,1:m))';
%%第三步:m只蚂蚁按概率函数选择下一座城市,完成各自的周游
for j=2:n
for i=1:m
visited=Tabu(i,1:(j-1));%已访问的城市
J=zeros(1,(n-j+1));%待访问的城市
P=J;%待访问城市的选择概率分布
Jc=1;
for k=1:n
if length(find(visited==k))==0
J(Jc)=k;
Jc=Jc+1;
end
end
%下面计算待选城市的概率分布
for k=1:length(J)
P(k)=(Tau(visited(end),J(k))^Alpha)*(Eta(visited(end),J(k))^Beta);
end
P=P/(sum(P));
%按概率原则选取下一个城市
Pcum=cumsum(P);
Select=find(Pcum>=rand);
to_visit=J(Select(1));
Tabu(i,j)=to_visit;
end
end
if NC>=2
Tabu(1,:)=R_best(NC-1,:);
end
%%第四步:记录本次迭代最佳路线
L=zeros(m,1);
for i=1:m
R=Tabu(i,:);
for j=1:(n-1)
L(i)=L(i)+D(R(j),R(j+1));
end
L(i)=L(i)+D(R(1),R(n));
end
L_best(NC)=min(L);
pos=find(L==L_best(NC));
R_best(NC,:)=Tabu(pos(1),:);
L_ave(NC)=mean(L);
NC=NC+1
%%第五步:更新信息素
Delta_Tau=zeros(n,n);
for i=1:m
for 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);
end
Delta_Tau(Tabu(i,n),Tabu(i,1))=Delta_Tau(Tabu(i,n),Tabu(i,1))+Q/L(i);
end
Tau=(1-Rho).*Tau+Delta_Tau;
%%第六步:禁忌表清零
Tabu=zeros(m,n);
end
%%第七步:输出结果
Pos=find(L_best==min(L_best));
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)
function DrawRoute(C,R)
%%=========================================================================
%% DrawRoute.m
%% 画路线图的子函数
%%-------------------------------------------------------------------------
%% C Coordinate 节点坐标,由一个N×2的矩阵存储
%% R Route 路线
%%=========================================================================
N=length(R);
scatter(C(:,1),C(:,2));
hold on
plot([C(R(1),1),C(R(N),1)],[C(R(1),2),C(R(N),2)])
hold on
for ii=2:N
plot([C(R(ii-1),1),C(R(ii),1)],[C(R(ii-1),2),C(R(ii),2)])
hold on
end
设置初始参数如下:
m=31;Alpha=1;Beta=5;Rho=0.1;NC_max=200;Q=100;
31城市坐标为:
1304 2312
3639 1315
4177 2244
3712 1399
3488 1535
3326 1556
3238 1229
4196 1004
4312 790
4386 570
3007 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[/code]
运行后得到15602的巡游路径,路线图和收敛曲线如下:
⑶ 在MATLAB中用蚁群算法求解TSP问题,在经典的代码中有Tabu(1,:)=R_best(NC-1,:)。不明白代码的目的。
正在做。我是这样理解的:
if NC >= 2
Tabu(1,:) = R_best(NC-1,:);
%把上一次迭代中最佳路线经历的城市放到本次Tabu的第一行
%相当是加了一个约束条件,如果本次迭代的情况不好,至少不会按照不好的最优解去更新信息素,让下次的情况更差
end
⑷ matlab中蚁群算法的个体适应度函数指的是什么意思
蚁群算法求最小距离航路,个体适应度函数指个体完成一条路线的距离值, 图上看到最优值是在不断进化减小的.
⑸ 用VB或者MATLAB在一个矩形内生成一个固定点和几个随机点,再求出从固定点经过所有随机点回来后的最短路径
这个并非一般的最短路径问题,而是旅行商问题(Traveling Saleman Problem,TSP)。旅行商问题属于NP完全问题,如果问题规模比较大,至今没有太有效的算法。
这里提供一个蚁群算法的程序,参考:
http://..com/question/175608123.html
根据你的问题做了少量改动,具体代码如下:
functionTSP
%TSP旅行商问题
%设置初始参数如下:
m=10;Alpha=1;Beta=5;Rho=0.1;NC_max=200;Q=100;
%生成随机点,第一个点视为固定点
C=[0.50.5];
C(2:10,:)=rand(9,2);
%调用蚁群算法求解
[R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ACATSP(C,NC_max,m,Alpha,Beta,Rho,Q);
function[R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ACATSP(C,NC_max,m,Alpha,Beta,Rho,Q)
%%=========================================================================
%%ACATSP.m
%%
%%ChengAihua,,ZhengZhou,China
%%Email:[email protected]
%%Allrightsreserved
%%-------------------------------------------------------------------------
%%主要符号说明
%%Cn个城市的坐标,n×2的矩阵
%%NC_max最大迭代次数
%%m蚂蚁个数
%%Alpha表征信息素重要程度的参数
%%Beta表征启发式因子重要程度的参数
%%Rho信息素蒸发系数
%%Q信息素增加强度系数
%%R_best各代最佳路线
%%L_best各代最佳路线的长度
%%=========================================================================
%%第一步:变量初始化
n=size(C,1);%n表示问题的规模(城市个数)
D=zeros(n,n);%D表示完全图的赋权邻接矩阵
fori=1:n
forj=1:n
ifi~=j
D(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5;
else
D(i,j)=eps;
end
D(j,i)=D(i,j);
end
end
Eta=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);%各代路线的平均长度
whileNC<=NC_max%停止条件之一:达到最大迭代次数
%%第二步:将m只蚂蚁放到n个城市上
Randpos=[];
fori=1:(ceil(m/n))
Randpos=[Randpos,randperm(n)];
end
Tabu(:,1)=(Randpos(1,1:m))';
%%第三步:m只蚂蚁按概率函数选择下一座城市,完成各自的周游
forj=2:n
fori=1:m
visited=Tabu(i,1:(j-1));%已访问的城市
J=zeros(1,(n-j+1));%待访问的城市
P=J;%待访问城市的选择概率分布
Jc=1;
fork=1:n
iflength(find(visited==k))==0
J(Jc)=k;
Jc=Jc+1;
end
end
%下面计算待选城市的概率分布
fork=1:length(J)
P(k)=(Tau(visited(end),J(k))^Alpha)*(Eta(visited(end),J(k))^Beta);
end
P=P/(sum(P));
%按概率原则选取下一个城市
Pcum=cumsum(P);
Select=find(Pcum>=rand);
to_visit=J(Select(1));
Tabu(i,j)=to_visit;
end
end
ifNC>=2
Tabu(1,:)=R_best(NC-1,:);
end
%%第四步:记录本次迭代最佳路线
L=zeros(m,1);
fori=1:m
R=Tabu(i,:);
forj=1:(n-1)
L(i)=L(i)+D(R(j),R(j+1));
end
L(i)=L(i)+D(R(1),R(n));
end
L_best(NC)=min(L);
pos=find(L==L_best(NC));
R_best(NC,:)=Tabu(pos(1),:);
L_ave(NC)=mean(L);
NC=NC+1
%%第五步:更新信息素
Delta_Tau=zeros(n,n);
fori=1:m
forj=1:(n-1)
Delta_Tau(Tabu(i,j),Tabu(i,j+1))=Delta_Tau(Tabu(i,j),Tabu(i,j+1))+Q/L(i);
end
Delta_Tau(Tabu(i,n),Tabu(i,1))=Delta_Tau(Tabu(i,n),Tabu(i,1))+Q/L(i);
end
Tau=(1-Rho).*Tau+Delta_Tau;
%%第六步:禁忌表清零
Tabu=zeros(m,n);
end
%%第七步:输出结果
Pos=find(L_best==min(L_best));
Shortest_Route=R_best(Pos(1),:)
Shortest_Length=L_best(Pos(1))
%绘图显示结果
clf
subplot(1,2,1)
DrawRoute(C,Shortest_Route)
subplot(1,2,2)
plot(L_best)
holdon
plot(L_ave)
functionDrawRoute(C,R)
%%=========================================================================
%%DrawRoute.m
%%画路线图的子函数
%%-------------------------------------------------------------------------
%%CCoordinate节点坐标,由一个N×2的矩阵存储
%%RRoute路线
%%=========================================================================
%原来的绘图语句太繁琐,改用这一句就可以了
plot(C([RR(1)],1),C([RR(1)],2),'o-')
%标明固定点
holdon
plot(C(1,1),C(1,2),'ro')
由于点是随机生成的,每次运行的结果都不同,下面是某次运行的结果(红点为固定点)。
⑹ 《蚁群算法在MATLAB中的实现》
语法结构和c差不多,你可以在矩阵操作上多下一下功夫。
⑺ 急求蚁群算法matlab工具箱,多谢了。
直接在命令窗口里边输入gatool就行了,用遗传算法还可以使用ga函数,具体使用格式可以在help系统里看ga,你还可以按照如下步骤打开遗传算法工具箱:1,打开MATLAB,2点击左下方的START按钮 3,点toolboxes,打开后选择Genetic Algorithm and Direct Search 然后就可以进入gatool了,然后就会弹出ga工具箱(注:我的版本是7.7的,不同版本可能不同),希望对你有用哈!
⑻ 蚁群算法求解TSP问题的源程序及简要说明
简单蚁群算法求解TSP的源程序(我帮你找的)
蚁群算法是新兴的仿生算法,最初是由意大利学者Dorigo M于1991年首次提出,由于具有较强的鲁棒性,优良的分布式计算机制和易于与其它方法结合等优点,成为人工智能领域的一个研究热点。本程序是实现简单的蚁群算法,TSP问题取的是att48,可从http://www.iwr.uni-heidelberg.de/groups/comopt/software/TSPLIB95获取,程序运行时间可能会比较长,在我的这台CPU 1.6G+内存256M的机器上运行时间大概是13分钟左右。我用的语言是MATLAB 7.1。此程序仅供学习所用,如有问题请反馈。谢谢。(注:程序没有计算最后一个城市回来起点城市的距离)
function [y,val]=QACS
tic
load att48 att48;
MAXIT=300; % 最大循环次数
NC=48; % 城市个数
tao=ones(48,48);% 初始时刻各边上的信息最为1
rho=0.2; % 挥发系数
alpha=1;
beta=2;
Q=100;
mant=20; % 蚂蚁数量
iter=0; % 记录迭代次数
for i=1:NC % 计算各城市间的距离
for j=1:NC
distance(i,j)=sqrt((att48(i,2)-att48(j,2))^2+(att48(i,3)-att48(j,3))^2);
end
end
bestroute=zeros(1,48); % 用来记录最优路径
routelength=inf; % 用来记录当前找到的最优路径长度
% for i=1:mant % 确定各蚂蚁初始的位置
% end
for ite=1:MAXIT
for ka=1:mant %考查第K只蚂蚁
deltatao=zeros(48,48); % 第K只蚂蚁移动前各边上的信息增量为零
[routek,lengthk]=travel(distance,tao,alpha,beta);
if lengthk<routelength % 找到一条更好的路径
routelength=lengthk;
bestroute=routek;
end
for i=1:NC-1 % 第K只蚂蚁在路径上释放的信息量
deltatao(routek(i),routek(i+1))=deltatao(routek(i),routek(i+1))+Q/lengthk;
end
deltatao(routek(48),1)=deltatao(routek(48),1)+Q/lengthk;
end
for i=1:NC-1
for j=i+1:NC
if deltatao(i,j)==0
deltatao(i,j)=deltatao(j,i);
end
end
end
tao=(1-rho).*tao+deltatao;
end
y=bestroute;
val=routelength;
toc
function [y,val]=travel(distance,tao,alpha,beta) % 某只蚂蚁找到的某条路径
[m,n]=size(distance);
p=fix(m*rand)+1;
val=0; % 初始路径长度设为 0
tabuk=[p]; % 假设该蚂蚁都是从第 p 个城市出发的
for i=1:m-1
np=tabuk(length(tabuk)); % 蚂蚁当前所在的城市号
p_sum=0;
for j=1:m
if isin(j,tabuk)
continue;
else
ada=1/distance(np,j);
p_sum=p_sum+tao(np,j)^alpha*ada^beta;
end
end
cp=zeros(1,m); % 转移概率
for j=1:m
if isin(j,tabuk)
continue;
else
ada=1/distance(np,j);
cp(j)=tao(np,j)^alpha*ada^beta/p_sum;
end
end
NextCity=pchoice(cp);
tabuk=[tabuk,NextCity];
val=val+distance(np,NextCity);
end
y=tabuk;
function y=isin(x,A) % 判断数 x 是否在向量 A 中,如在返回 1 ,否则返回 0
y=0;
for i=1:length(A)
if A(i)==x
y=1;
break;
end
end
function y=pchoice(A)
a=rand;
tempA=zeros(1,length(A)+1);
for i=1:length(A)
tempA(i+1)=tempA(i)+A(i);
end
for i=2:length(tempA)
if a<=tempA(i)
y=i-1;
break;
end
end
⑼ 求MATLAB程序80以上,有中文注释!!
蚁群算法解决vrp问题
%
the
procere
of
ant
colony
algorithm
for
VRP
%
%
%
%
%
%
%
%
%
%
%
%
%initialize
the
parameters
of
ant
colony
algorithms
%
load
data.txt;
%
d=data(:,2:3);
%
g=data(:,4);
g=1:32;d=2:33;
m=31;
%
蚂蚁数
alpha=1;
belta=4;%
决定tao和miu重要性的参数
lmda=0;
rou=0.9;%衰减系数
q0=0.95;
%
概率
tao0=1/(31*841.04);%初始信息素
Q=1;%
蚂蚁循环一周所释放的信息素
defined_phrm=15.0;
%
initial
pheromone
level
value
QV=100;
%
车辆容量
vehicle_best=round(sum(g)/QV)+1;%所完成任务所需的最少车数
V=40;
%
计算两点的距离
for
i=1:32;
for
j=1:32;
%
dist(i,j)=sqrt((d(i,1)-d(j,1))^2+(d(i,2)-d(j,2))^2);
dist(i,j)=i+j+2;
end;
end;
%给tao
miu赋初值
for
i=1:32;
for
j=1:32;
if
i~=j;
%s(i,j)=dist(i,1)+dist(1,j)-dist(i,j);
tao(i,j)=defined_phrm;
miu(i,j)=1/dist(i,j);
end;
end;
end;
for
k=1:32;
for
k=1:32;
deltao(i,j)=0;
end;
end;
best_cost=10000;
for
n_gen=1:50;
print_head(n_gen);
for
i=1:m;
%best_solution=[];
print_head2(i);
sumload=0;
cur_pos(i)=1;
rn=randperm(32);
n=1;
nn=1;
part_sol(nn)=1;
%cost(n_gen,i)=0.0;
n_sol=0;
%
由蚂蚁产生的路径数量
M_vehicle=500;
t=0;
%最佳路径数组的元素数为0
while
sumload<=QV;
for
k=1:length(rn);
if
sumload+g(rn(k))<=QV;
gama(cur_pos(i),rn(k))=(sumload+g(rn(k)))/QV;
A(n)=rn(k);
n=n+1;
end;
end;
fid=fopen('out_customer.txt','a+');
fprintf(fid,'%s
%i\t','the
current
position
is:',cur_pos(i));
fprintf(fid,'\n%s','the
possible
customer
set
is:')
fprintf(fid,'\t%i\n',A);
fprintf(fid,'------------------------------\n');
fclose(fid);
p=compute_prob(A,cur_pos(i),tao,miu,alpha,belta,gama,lmda,i);
maxp=1e-8;
na=length(A);
for
j=1:na;
if
p(j)>maxp
maxp=p(j);
index_max=j;
end;
end;
old_pos=cur_pos(i);
if
rand(1)<q0
cur_pos(i)=A(index_max);
else
krnd=randperm(na);
cur_pos(i)=A(krnd(1));
bbb=[old_pos
cur_pos(i)];
ccc=[1
1];
if
bbb==ccc;
cur_pos(i)=A(krnd(2));
end;
end;
tao(old_pos,cur_pos(i))=taolocalupdate(tao(old_pos,cur_pos(i)),rou,tao0);%对所经弧进行局部更新
sumload=sumload+g(cur_pos(i));
nn=nn+1;
part_sol(nn)=cur_pos(i);
temp_load=sumload;
if
cur_pos(i)~=1;
rn=setdiff(rn,cur_pos(i));
n=1;
A=[];
end;
if
cur_pos(i)==1;
%
如果当前点为车场,将当前路径中的已访问用户去掉后,开始产生新路径
if
setdiff(part_sol,1)~=[];
n_sol=n_sol+1;
%
表示产生的路径数,n_sol=1,2,3,..5,6...,超过5条对其费用加上车辆的派遣费用
fid=fopen('out_solution.txt','a+');
fprintf(fid,'%s%i%s','NO.',n_sol,'条路径是:');
fprintf(fid,'%i
',part_sol);
fprintf(fid,'\n');
fprintf(fid,'%s','当前的用户需求量是:');
fprintf(fid,'%i\n',temp_load);
fprintf(fid,'------------------------------\n');
fclose(fid);
%
对所得路径进行路径内3-opt优化
final_sol=exchange(part_sol);
for
nt=1:length(final_sol);
%
将所有产生的路径传给一个数组
temp(t+nt)=final_sol(nt);
end;
t=t+length(final_sol)-1;
sumload=0;
final_sol=setdiff(final_sol,1);
rn=setdiff(rn,final_sol);
part_sol=[];
final_sol=[];
nn=1;
part_sol(nn)=cur_pos(i);
A=[];
n=1;
end;
end;
if
setdiff(rn,1)==[];%
产生最后一条终点不为1的路径
n_sol=n_sol+1;
nl=length(part_sol);
part_sol(nl+1)=1;%将路径的最后1位补1
%
对所得路径进行路径内3-opt优化
final_sol=exchange(part_sol);
for
nt=1:length(final_sol);
%
将所有产生的路径传给一个数组
temp(t+nt)=final_sol(nt);
end;
cost(n_gen,i)=cost_sol(temp,dist)+M_vehicle*(n_sol-vehicle_best);
%计算由蚂蚁i产生的路径总长度
for
ki=1:length(temp)-1;
deltao(temp(ki),temp(ki+1))=deltao(temp(ki),temp(ki+1))+Q/cost(n_gen,i);
end;
if
cost(n_gen,i)<best_cost;
best_cost=cost(n_gen,i);
old_cost=best_cost;
best_gen=n_gen;
%
产生最小费用的代数
best_ant=i;
%产生最小费用的蚂蚁
best_solution=temp;
end;
if
i==m;%如果所有蚂蚁均完成一次循环,,则用最佳费用所对应的路径对弧进行整体更新
for
ii=1:32;
for
jj=1:32;
tao(ii,jj)=(1-rou)*tao(ii,jj);
end;
end;
for
kk=1:length(best_solution)-1;
tao(best_solution(kk),best_solution(kk+1))=tao(best_solution(kk),best_solution(kk+1))+deltao(best_solution(kk),best_solution(kk+1));
end;
end;
fid=fopen('out_solution.txt','a+');
fprintf(fid,'%s%i%s','NO.',n_sol,'路径是:');
fprintf(fid,'%i
',part_sol);
fprintf(fid,'\n');
fprintf(fid,'%s
%i\n','当前的用户需求量是:',temp_load);
fprintf(fid,'%s
%f\n','总费用是:',cost(n_gen,i));
fprintf(fid,'------------------------------\n');
fprintf(fid,'%s\n','最终路径是:');
fprintf(fid,'%i-',temp);
fprintf(fid,'\n');
fclose(fid);
temp=[];
break;
end;
end;
end;
end;
⑽ 求助Matlab蚁群算法求一般函数极值的算法
function [ROUTES,PL,Tau]=ACASP(G,Tau,K,M,S,E,Alpha,Beta,Rho,Q)
%% ---------------------------------------------------------------
% ACASP.m
% 蚁群算法动态寻路算法
% ChengAihua,PLA Information Engineering University,ZhengZhou,China
% Email:[email protected]
% All rights reserved
%% ---------------------------------------------------------------
% 输入参数列表
% G 地形图为01矩阵,如果为1表示障碍物
% Tau 初始信息素矩阵(认为前面的觅食活动中有残留的信息素)
% K 迭代次数(指蚂蚁出动多少波)
% M 蚂蚁个数(每一波蚂蚁有多少个)
% S 起始点(最短路径的起始点)
% E 终止点(最短路径的目的点)
% Alpha 表征信息素重要程度的参数
% Beta 表征启发式因子重要程度的参数
% Rho 信息素蒸发系数
% Q 信息素增加强度系数
%
% 输出参数列表
% ROUTES 每一代的每一只蚂蚁的爬行路线
% PL 每一代的每一只蚂蚁的爬行路线长度
% Tau 输出动态修正过的信息素
%% --------------------变量初始化----------------------------------
%load
D=G2D(G);
N=size(D,1);%N表示问题的规模(象素个数)
MM=size(G,1);
a=1;%小方格象素的边长
Ex=a*(mod(E,MM)-0.5);%终止点横坐标
if Ex==-0.5
Ex=MM-0.5;
end
Ey=a*(MM+0.5-ceil(E/MM));%终止点纵坐标
Eta=zeros(1,N);%启发式信息,取为至目标点的直线距离的倒数
%下面构造启发式信息矩阵
for i=1:N
if ix==-0.5
ix=MM-0.5;
end
iy=a*(MM+0.5-ceil(i/MM));
if i~=E
Eta(1,i)=1/((ix-Ex)^2+(iy-Ey)^2)^0.5;
else
Eta(1,i)=100;
end
end
ROUTES=cell(K,M);%用细胞结构存储每一代的每一只蚂蚁的爬行路线
PL=zeros(K,M);%用矩阵存储每一代的每一只蚂蚁的爬行路线长度
%% -----------启动K轮蚂蚁觅食活动,每轮派出M只蚂蚁--------------------
for k=1:K
disp(k);
for m=1:M
%% 第一步:状态初始化
W=S;%当前节点初始化为起始点
Path=S;%爬行路线初始化
PLkm=0;%爬行路线长度初始化
TABUkm=ones(1,N);%禁忌表初始化
TABUkm(S)=0;%已经在初始点了,因此要排除
DD=D;%邻接矩阵初始化
%% 第二步:下一步可以前往的节点
DW=DD(W,:);
DW1=find(DW
for j=1:length(DW1)
if TABUkm(DW1(j))==0
DW(j)=inf;
end
end
LJD=find(DW
Len_LJD=length(LJD);%可选节点的个数
%% 觅食停止条件:蚂蚁未遇到食物或者陷入死胡同
while W~=E&&Len_LJD>=1
%% 第三步:转轮赌法选择下一步怎么走
PP=zeros(1,Len_LJD);
for i=1:Len_LJD
PP(i)=(Tau(W,LJD(i))^Alpha)*(Eta(LJD(i))^Beta);
end
PP=PP/(sum(PP));%建立概率分布
Pcum=cumsum(PP);
Select=find(Pcum>=rand);
%% 第四步:状态更新和记录
Path=[Path,to_visit];%路径增加
PLkm=PLkm+DD(W,to_visit);%路径长度增加
W=to_visit;%蚂蚁移到下一个节点
for kk=1:N
if TABUkm(kk)==0
DD(W,kk)=inf;
DD(kk,W)=inf;
end
end
TABUkm(W)=0;%已访问过的节点从禁忌表中删除
for j=1:length(DW1)
if TABUkm(DW1(j))==0
DW(j)=inf;
end
end
LJD=find(DW
Len_LJD=length(LJD);%可选节点的个数
end
%% 第五步:记下每一代每一只蚂蚁的觅食路线和路线长度
ROUTES{k,m}=Path;
if Path(end)==E
PL(k,m)=PLkm;
else
PL(k,m)=inf;
end
end
%% 第六步:更新信息素
Delta_Tau=zeros(N,N);%更新量初始化
for m=1:M
if PL(k,m) ROUT=ROUTES{k,m};
TS=length(ROUT)-1;%跳数
PL_km=PL(k,m);
for s=1:TS
x=ROUT(s);
Delta_Tau(y,x)=Delta_Tau(y,x)+Q/PL_km;
end
end
end
Tau=(1-Rho).