1、蚁群算法
(1)概念
蚁群算法(ant colony optimization, ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型算法,本质上是进化算法中的一种启发式全局优化算法
(2)原理
假如蚁群中所有蚂蚁的数量为m,所有城市之间的信息素用矩阵pheromone表示,最短路径为bestLength,最佳路径为bestTour。每只蚂蚁都有自己的内存,内存中用一个禁忌表(Tabu)来存储该蚂蚁已经访问过的城市,表示其在以后的搜索中将不能访问这些城市;还有用另外一个允许访问的城市表(Allowed)来存储它还可以访问的城市;另外还用一个矩阵(Delta)来存储它在一个循环(或者迭代)中给所经过的路径释放的信息素;还有另外一些数据,例如一些控制参数(α,β,ρ,Q),该蚂蚁行走玩全程的总成本或距离(tourLength),等等。假定算法总共运行MAX_GEN次,运行时间为t。
(3)过程
第一步:初始化
第二步:为每只蚂蚁选择下一个节点。
第三步:更新信息素矩阵
第四步:检查终止条件
第五步:输出最优值
(4)应用
蚁群算法应用广泛,如旅行商问题、指派问题、Job-shop调度问题、车辆路径问题、图着色问题、网络路由问题等等。
2、求解TSP
同样是求解att48实例(最优解为10628)
代码结构:
其中Data类表示定义数据、变量初始化和读取数据的类
package com.chb.Tabu;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Random;
import java.util.Scanner;
public class Data {
public static int cityNum=48;//城市数量,手动设置
public static final int MAX_GEN=100;//运行代数
public static final float alpha=1.0f;//
public static final float beta=5.0f;//
public static final float rho=0.5f;//
public static int bestLength;//最佳长度
public static int bestTour[]=new int[cityNum+1];//最佳路径
public static int point[][]=new int[cityNum][2];//每个城市的坐标
public static int dist[][]=new int[cityNum][cityNum];//距离矩阵
public static float pheromone[][]=new float[cityNum][cityNum];//信息素矩阵
public static int antNum=10;//蚂蚁数量
public static Ant[]ants=n