public class Ant { public Square SQUARE; //蚂蚁所在方格 public Food CARRYING = null; //所搬的食物数 public int ID; //蚂蚁的编号 public boolean HELPING = false; //是否帮忙搬运食物 public void move(int turn) { //蚂蚁移动到下一个方格 } } |
public class Square { public Square NE; //附近的8个方向的方格 public Square N; public Square NW; public Square W; public Square SW; public Square S; public Square SE; public Square E; public LinkedList ANTS; //本方格中包含的蚂蚁 public Food FOOD; //本方格中包含的食物数 public Nest NEST; //方格为蚁穴 public Pheromone_1 PHEROMONE_1; //本方格中的外激素含量 public int X; //本方格的坐标 public int Y; private World WORLD; //所属的环境 public boolean WALL; //是否有障碍物 public Square(int x, int y, World world) { FOOD = null; NEST = null; PHEROMONE_1 = null; X = x; Y = y; WORLD = world; WALL = false; ANTS = new LinkedList(); } |
public class World { private Square[][] WORLD; //定义环境二维数组 private int WIDTH; //环境的长宽 private int HEIGHT; private Pheromone_1List P1LIST; //保存所有外激素的列表 public World(Pheromone_1List p1list) { this.WIDTH = Settings.WIDTH; this.HEIGHT = Settings.HEIGHT; this.P1LIST = p1list; WORLD = new Square[WIDTH][HEIGHT]; } |
private Square chooseBestSquare() { Square[] square_list = {SQUARE.E, SQUARE.NE, SQUARE.N, SQUARE.NW, SQUARE.W, SQUARE.SW, SQUARE.S, SQUARE.SE}; double current_best_value = 0; double value = 0; Square square = SQUARE; // 选择最好的方格 for(int i=0;i<square_list.length;i++) { value = calculateSquareValue(square_list);//计算方格值 if(value > current_best_value) { current_best_value = value; square = square_list; } } if(square.ANTS.size() >= Settings.MAXIMUM_NUMBER_OF_ANTS) { return SQUARE; } return square; } |
private double calculateSquareValue(Square s) { double[] thresholds = Settings.THRESHOLDS; if(s==null || s.WALL) // 方格有障碍物 { return -100000; } // 计算方格中各项参数的值 return s.getFood()*thresholds[0] // 食物 + s.getPheromone_1() * thresholds[1] // 外激素 } |
private void putPheromone_1(double amount) { if(SQUARE.getPheromone_1() < Settings.PHEROMONE_LIMIT) SQUARE.addPheromone_1(amount); } |
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |