大家好,可爱的小编今天来补充剩下的关于粒子群算法的想法。
呃呃,今天呢?小编主要谈的是关于如何编写这个的java实现代码。其实,关于代码实现呢?这个小编觉得,其实有时候你的编程思维很重要,可能要是一开始你的对于你的代码实现的整个的结构不是很清晰,其实想要比较好的展现这个效果还是蛮难的。但是,小编今天想分享自己写这类程序的相关套路,大家互相学习学习哈。
先来简单的理下思绪,想想我们的目的是什么?我们怎么样才算是验证了这个算法呢?我想,这个算法的,是想验证 通过局部最优,全局最优,以及不断的迭代,更新,最终我们能够无尽的逼近我们的最优解。好了吧,虽然所理论上,对于最优解的维度的话,其实是不加以限制的,但是这里的话,鉴于笔者的能力,暂时的话,就只是讨论2维层面的吧(3D效果之前没有接触过,哈哈)。朴素点来说,我们的目的,就是验证一群均匀分布在一片二维平面上的蜜蜂(速度是随机的),然后一旦有目标出现,可以通过这个粒子群算法,迅速的定位在目标位置周围。
然后我们有了思路,就可以来想想,我们该怎么办,要怎么show呢?不过在此之前,其实大家应该准备几张比较精美的图片吧,作为背景嘛,然后准备一张小动物的小图片,其实gif的图片更好,省得你要去找一组图来进行拼接。然后呢?我想先总结下这种程序的相关特征,以方便大家使用套路啊。特征不外乎:1.我们需要不间断的显示我们的图片 2.然后随着鼠标点击事件,或者键盘事件,图片会有相应的移动现象 3.以上的整个画面中图片的切换需要表现的十分的流畅。 好吧,看到这里,是不是感觉,有点和我们小时候玩的小霸王游戏机上面的游戏很相似呢?哈哈,是不是很激动,小编第一次了解到的时候,情绪那叫一个激动啊。反正,就是说只要会了这个,相关的游戏也可以完成啦。啦啦啦。
我对于这类程序的分析:1.首先我们得要有一个Jframe窗体吧,不然,你怎么show呢?好,看代码
package TryTest43; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import javax.swing.JFrame; public class MainJFrame extends JFrame{ public Graphics g; public Image img; public static int JFrame_Width; public static int JFrame_Height; public MainJFrame(){ init(); } public void init(){ this.setSize(Toolkit.getDefaultToolkit().getScreenSize()); this.setTitle("蜜蜂寻觅演示"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocationRelativeTo(null); this.setVisible(true); Graphics g1=this.getGraphics(); img=this.createImage(this.getWidth(),this.getHeight()); g=img.getGraphics(); this.addMouseListener(new MyMouseListener(g,g1,img)); } public static void main(String[] args){ MainJFrame jf=new MainJFrame(); } }
其实,挺简单对吧,就是新建一个JFrame的继承类,然后加下监听器,监听我们的鼠标的操作嘛。然后就是对于鼠标监听器中相关代码。
package TryTest43; import java.awt.Graphics; import java.awt.Image; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class MyMouseListener implements MouseListener { public Graphics g; public Graphics g1; public Image img; public TDimension dimen; public static int flag=1; public NewThread td; public MyMouseListener(Graphics g,Graphics g1,Image img){ this.g=g; this.g1=g1; this.img=img; dimen=new TDimension(g, g1); td=new NewThread(dimen); td.start(); } public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub if(e.getButton()==MouseEvent.BUTTON1){ MyPoint Target=new MyPoint(); Target.x=e.getX(); Target.y=e.getY(); // System.out.println(td); td.setTarget(Target); } if(e.getButton()==MouseEvent.BUTTON3){ // System.out.println("rrrrrrrrrrrrrrrrr"); td.isTone=true; td.setTone(e.getPoint()); dimen.flag=true; } } public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub } public void mouseReleased(MouseEvent e) {