📄 weiyananttest.java
字号:
break;
case 2:
//如果grid[][]存的窝点信息,多余的窝点信息省去了
if (OriginPts < 100) {
OriginPt[OriginPts] = new Point(i, j);
OriginPts++;
}
break;
case 3:
//如果grid[][]存的食物点信息,多余的食物点信息省去了
if (EndPts < 100) {
EndPt[EndPts] = new Point(i, j);
EndPts++;
}
break;
}
}
}
//如果没有指定窝,则随机的选择一点
if (OriginPts == 0) {
for (int i = 0; i < width; i++) {
int j;
for (j = 0; j < height; j++) {
if (obs_grid[i][j] < 0) {
OriginPt[OriginPts] = new Point(i, j);
OriginPts++;
break;
}
}
if (j < height - 1) {
break;
}
}
}
}
public void reinit() {
//重新初始化整个环境
//先停止程序的运行
running = false;
btnStart.setLabel("开始");
//清空所有信息素Pheromone数组中的值
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
for (int k = 0; k < 2; k++) {
Pheromone_grid[k][i][j] = 0;
}
}
}
//初始化蚂蚁数组,antCount只蚂蚁在不同的窝点之间进行随机的分配
for (int i = 0; i < antCount; i++) {
int index = (int) (OriginPts * Math.random());
ants[i].OriginPt = new Point(OriginPt[index]);
ants[i].init();
}
//清空信息素向量
phe.removeAllElements();
//在每个食物点和窝点周围分布一定量的按照梯度递减的信息素,分配的是一个点为中心的半径为FoodR的圆,并且信息素按照半径递减
for (int i = 0; i < EndPts; i++) {
for (int x = -FoodR; x <= FoodR; x++) {
int y = (int) (Math.sqrt(FoodR * FoodR - x * x));
for (int yy = -y; yy <= y; yy++) {
Pheromone_grid[1][(EndPt[i].x + x + width) %
width][(EndPt[i].y + yy + height) %
height] = (int) (1000 *
(1 -
Math.sqrt(x * x + yy * yy) / FoodR));
}
}
}
for (int i = 0; i < OriginPts; i++) {
for (int x = -FoodR; x <= FoodR; x++) {
int y = (int) (Math.sqrt(FoodR * FoodR - x * x));
for (int yy = -y; yy <= y; yy++) {
Pheromone_grid[0][(OriginPt[i].x + x + width) %
width][(OriginPt[i].y + yy + height) %
height] = (int) (1000 *
(1 -
Math.sqrt(x * x + yy * yy) / FoodR));
}
}
}
//重画
canvas.repaint();
//让程序开始运行
//running=true;
}
public void paint(Graphics g) {
canvas.repaint();
}
/**=======================================================================
* 主程序开始
* @param args String[]
*=======================================================================*/
public static void main(String[] args) {
WeiYanAntTest applet = new WeiYanAntTest();
applet.isStandalone = true;
Frame frame;
frame = new Frame() {
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}
public synchronized void setTitle(String title) {
super.setTitle(title);
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
}
};
frame.setTitle("Applet Frame");
frame.add(applet, BorderLayout.CENTER);
applet.init();
applet.start();
frame.setSize(300, 320);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation((d.width - frame.getSize().width) / 2,
(d.height - frame.getSize().height) / 2);
frame.setVisible(true);
}
public void start()
//下面三个函数是控制线程的
{
if (runner == null) {
runner = new Thread(this);
runner.start();
//running = true;
}
}
public void stop() {
if (runner != null) {
runner.stop();
runner = null;
running = false;
}
}
public void run() {
int i;
//线程一直运行下去
while (true) {
if (running) {
//如果开始动画,就进行canvas的处理
canvas.process();
}
try {
Thread.sleep(delay);
} catch (InterruptedException e) {
}
}
}
public boolean action(Event evt, Object o) {
if (evt.target == btnMap) {
//开始编辑地图面板
running = false;
btnStart.setLabel("开始");
MapPad ctl = new MapPad(this);
ctl.setSize(308, 380);
ctl.show();
return true;
} else if (evt.target == btnStart) {
if (!running) {
//如果刚刚按下了重置按钮就重新初始化一下
if (reset) {
reinit();
}
btnStart.setLabel("停止");
reset = false;
running = true;
} else {
btnStart.setLabel("开始");
running = false;
}
return true;
} else if (evt.target == btnReset) {
running = false;
int j = 0;
//表示已经按下了重置按钮,以便下次开始的时候进行重新初始化
reset = true;
repaint();
btnStart.setLabel("开始");
return true;
} else if (evt.target == btnConfig) {
running = false;
btnStart.setLabel("开始");
Configer ctl = new Configer(this);
ctl.setSize(300, 300);
ctl.show();
return true;
} else if (evt.target == choPDraw) {
//选择画信息素的模式
drawPhe = choPDraw.getSelectedIndex();
if (drawPhe != 1) {
canvas.repaint();
}
return true;
}
return false;
}
/**Destroy the applet*/
public void destroy() {
//当结束程序的时候,把线程也结束
if (runner != null) {
running = false;
runner.stop();
runner = null;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -