连续空间蚁群算法

上传人:re****.1 文档编号:512853756 上传时间:2023-07-23 格式:DOCX 页数:14 大小:21.22KB
返回 下载 相关 举报
连续空间蚁群算法_第1页
第1页 / 共14页
连续空间蚁群算法_第2页
第2页 / 共14页
连续空间蚁群算法_第3页
第3页 / 共14页
连续空间蚁群算法_第4页
第4页 / 共14页
连续空间蚁群算法_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《连续空间蚁群算法》由会员分享,可在线阅读,更多相关《连续空间蚁群算法(14页珍藏版)》请在金锄头文库上搜索。

1、查看文章标题:蚁群优化算法的连续空间函数求解2007-12-03 16:38:12题目:蚁群优化算法的连续空间函数求解实验目的:加深了解蚁群优化算法的原理,深入认识智能优化算法的重要性,拓展算法的应用领域与空间实验内容与算法详细设计介绍:1 .先熟悉基本蚁群优化算法的设计思想:蚁群算法是对自然界蚂蚁的寻径方式进行模拟而得出的一种仿生算法。蚂蚁在运动过程中,能够在它所经过的路径上留下一种称之为 外激素(pheromone)的物质进行信息传递,而且蚂蚁在运动过程中能够感知这种物质,并以此指导自己的运动方向,因此由大量蚂蚁组成的蚁群集体行为便表现出一种信息正反馈现象:某一路径上走过的蚂蚁越多,则后来

2、者选择该路径的 概率就越大。2. 基本蚁群优化算法的实现初始化过程设t:=0; (t时间计数器Nc:=0; (Nc为循环次数计数器Tij(t):=C;(为每条路径(i, j)设一个轨迹强度的初始值ATij= 0;(轨迹强度增量的初值设为0nij由某种启发式算法确定;(在TSP中,nij=1/dijtabuk=;(在初始阶段,禁忌表为空将m只蚂蚁随机置于n个节点(城市)上;设置s:=1; (s为禁忌表索引,将各只蚂蚁的初始城市置于当前禁忌表中for i :=1 to n dofor k:=1 to bi (t) dotabu k(s )=i重复直到禁忌表满为山这一步要重复(n-1)次设置 s:=

3、 s +1;for i :=1 to n dofor k:=1 to bi (t) do以概率选择城市j;将蚂蚁k移到j;将刚刚选择的城市j加到tabuk中; 信息素调整:记录到目前为止的最短路径if Nc N_ maxthen清空所有的禁忌表设置s:= 1;for i :=1 to n dofor k:=1 to bi (t) dotabuk(s)=i 一次循环后蚂蚁又重新回到初始位置设 t:= t +1;对于每一个路径(i, J),设置 Tj(t, t+1):=0;返回步骤(2);else输出最短路径;3. 本程序遵循基本蚁群优化算法的思想,但在某些细节和形式方面有所变形:程序求F (X,

4、Y,Z ) =XA3+ 丫的+Z电的最小值,因此取fit最小时候的X, Y, Z作为解向量,其它维可做相应扩展,扩展3那一维,当 求一维时候,删去此维,算法采用C+语言编写,细节如下:cacs4fun.h 分析:alpha, rho, p0 , tau0, dimension, num_layers, num_ants, num_iters 均为常数参数,视具体目标函数而定,在 main.cpp 中, alpha=0.2;num_ants=50;num_iters=2000;num_lay ers=200;dimension=10;p0=0.1;rho=0.2;tau0=0.01;根据设计后测

5、试所得,基本为最适合的常数参数。dimension , num_layers, num_ants, num_iters的值越大程序执行速度越慢。具体测试数值如下:(每个常数参数的测试都选择四个数,即最后输出的fiti,测试时其它常数都相同,仅待测常数变化)Av erageFitAv erageFitAlpha=0.051.268num_ants=200.02Alpha=0.10.526num_ants=500.02Alpha=0.20.018num_ants=1000.0144Alpha=0.30.019num_ants越大执行速度越慢,精确Alpha=0.50.027Alpha=0.80.0

6、07Av erageFitAverageFitnum_iters =20000.02layers=1000.027num_iters =10000.08layers=10太大num_iters =8000.66num_iters =3000 0.018layers=500 0.0144num_iters越大执行速度越慢,精确dimension,p0,rh0 略。double *tau 定义 tau6031011数组,taunum_layers3lastposcurpos代表进行第num_layers层次(精度时),在X, Y, Z坐标上,两个位置间的信息素double *gbx , *gby,

7、*gbz表示最好的位置坐标int *ant antnum_ants layer3表示第 num_ants 个蚂蚁行进到 layer 时 X,Y,Z坐标,最后的3代表 X,Y,Z坐标double *x, *y, *z 数组记录各个 X, Y, Z 坐标上的译码 xnum_ants dimensionmain.cpp 分析:srand(time(NULL); time(NULL)利用系统时间设置种子,srand(time(NULL)产生随机数,用scrand()设置种子数,可以用系统时钟ti me() 来设置,rand()得到随机数。在使用rand()之前,必须用srand()来设置种子数,否则的

8、话,rand()得到的是伪随机 数(有一定规律性)初始化常数参数;acs.allocate_vars();为变量分配内存空间;acs.start();开始搜索过程;start()过程如下:void CAcs4Fun:init_vars():gbfit=100000;全局最好适应度设置成大值为tau6031011每一个元素赋值(赋值为tau0=0.01)for (cur_iter=0; cur_iter num_iters; cur_iter+)(for (cur_layer=0; cur_layernum_layers; cur_layer+)(for (cur_ant=0; cur_ant=

9、b) xij=b;If(xij=b) xij=b;If(yij=b) xij=b;If(zij=a) zij=a;6. 程序代码#include CACS4Fun.h#include #include #include /设计三维空间连续函数蚁群优化问题CAcs4Fun:CAcs4Fun()/ 定义 CAcs4Fun 类的构造函数need_release=false; /表明内存没有被分配给变量需要释放变量内存CAcs4Fun:CAcs4Fun()/ 定义 CAcs4Fun 类的析构函数if(need_release) release_vars();/ 调用void CAcs4Fun:rele

10、ase_vars()/ 释放变量内存(int ij,k;for (i=0; inum_layers; i+)for (j=0; j3; j+)for (k=0; k10; k+)delete tauijk;/delete函数释放数组内存delete tauij;delete taui;/tau6031011delete tau;for (i=0; inum_ants; i+)/int *antdelete anti;delete ant;for (i=0; inum_ants; i+)/double *xdelete xi;delete x;for (i=0; inum_ants; i+)/double *ydelete yi;delete y;for (i=0; inum_ants; i+)/double *zdelete zi;delete z;delete gbx;/double *gbxdelete gby;/double *gbxdelete gbz;/double *gbxdelete fit;for (i=0; inum_layers; i+)delete gbanti;delete gbant;/int *gbantfor (i=0; inum_layers; i+)/int *ibantdelete i

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号