⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 weiyananttest.java

📁 这个是在jbuilder下开发一个不错的蚂蚁算法的路径,有java环境就可以运行
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                    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 + -