JavaACOFramework的各个类介绍(part1 : Ant类)

时间:2022-02-13 09:04:31
 public abstract class Ant extends Observable implements Runnable {

     public static int ANT_ID = 1; // ANT_ID是蚂蚁的身份标识起始位,设置为1

     /** Importance of trail */
public static final int ALPHA = Settings.ALPHA;// ALPHA是计算转移概率p时设的参数之一(见蚁群算法简介) /** Importance of heuristic evaluate */
public static final int BETA = Settings.BETA;//BETA是计算转移概率p时用户设定的参数之一 /** Identifier */
public int id = ANT_ID++; //id是每个蚂蚁的身份标识,不能重复 public ACO aco; // ACO是蚁群算法类,代表蚂蚁采用什么样的策略来搜索,具体将在ACO类里详细介绍 public List<Integer> tour; // tour是个整型数组,它存放着蚂蚁走过的每个节点编号 /** The Current Node */
public int currentNode; // currentNode是蚂蚁当前所在的节点编号 public int[][] path;//path是个整型标志位矩阵,用来记录两个节点间的边是否被蚂蚁访问过 public List<Integer> nodesToVisit;//一个整型列表,记录蚂蚁从当前节点出发可通过一步到达的节点编号 public double tourLength;//蚂蚁创建路径的总长度 /*构造方法 */
public Ant(ACO aco) {
this.aco = aco;
reset();
}
/*将蚂蚁的所有属性恢复出厂设置*/
public void reset(){
this.currentNode = -1;
this.tourLength = 0;
this.nodesToVisit = new ArrayList<Integer>();
this.tour = new ArrayList<Integer>();
this.path = new int[aco.p.getNodes()][aco.p.getNodes()];
} /*重写了父类的run方法,父类主要用来实现多线程编程*/
@Override
public void run() {
init(); //初始化
explore();//构造路径
setChanged();
notifyObservers(this);//通知监听器线程结束
} /*初始化:在问题包含的节点中随机选取一个作为蚂蚁搜索的起点,把改点加到路径中,根据问题的不同设定邻域的范围 */
public void init(){
reset();
this.currentNode = PseudoRandom.randInt(0, aco.p.getNodes() - 1);
this.tour.add(new Integer(currentNode));
this.aco.p.initializeTheMandatoryNeighborhood(this);
}
/*输出蚂蚁的编号和路径的总长度*/
@Override
public String toString() {
return "Ant " + id + " " + tour+" "+tourLength;
} /**
* 构造路径,只提供接口,具体由继承Ant类的子类实现
*/ public abstract void explore(); /**
* 复制蚂蚁,等待继承Ant类的子类实现
*/
public abstract Ant clone();
}