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

📄 curveshow.java

📁 Autolife模型是一个能够进行“开放式进化”的人工生命系统。每个Agent模型采用可以变化规则表长度的有限自动机模型建模。一方面Agent可以进行自我繁殖
💻 JAVA
字号:
package lifetest;import java.awt.event.*;import java.util.Vector;import java.awt.*;/** * Title:        LifeSim * Description: * Copyright:    Copyright (c) 2004 * Company:      www.swarmagents.com * @author jake * @version 1.0 */public class CurveShow extends Frame implements Runnable{  Panel view = new Panel();  Thread runner1;//定义独立线程  Graphics gra;//在一个面板view上画图  int cycles=1000;//图中显示的横坐标数目  int cyclemax;//主程序中定义的历史数据最大长度  int originx=40;//画图区域原点的坐标  int originy=20;  public int nAgentIndex=0;  double MaxValues[]=new double[10];  lifesim local;//主程序的本地拷贝  Choice choicelen = new Choice();  Label label1 = new Label();  Label label2 = new Label();  Choice choiceItem1 = new Choice();  //Label label3 = new Label();  //Choice choiceItem2 = new Choice();  Label lblAgent = new Label();  Choice choiceAgent = new Choice();//  Label label5 = new Label();//  Label label6 = new Label();  public CurveShow(lifesim pd) {    super("数据走向...");    local=pd;    try {      jbInit();    }    catch(Exception e) {      e.printStackTrace();    }  }  private void jbInit() throws Exception {    this.setLayout(null);    view.setBackground(Color.white);    view.setBounds(new Rectangle(6, 26, 537, 316));    this.setBackground(Color.gray);    this.addWindowListener(new java.awt.event.WindowAdapter() {      public void windowOpened(WindowEvent e) {        this_windowOpened(e);      }      public void windowClosing(WindowEvent e) {        this_windowClosing(e);      }    });    choicelen.setBounds(new Rectangle(69, 355, 94, 21));    choicelen.addItemListener(new java.awt.event.ItemListener() {      public void itemStateChanged(ItemEvent e) {        choicelen_itemStateChanged(e);      }    });    for(int i=0;i<40;i++){       choicelen.addItem(Integer.toString((i+1)*1000));    }      choiceItem1.addItem("平均寿命");      //choiceItem2.addItem("能量");      choiceItem1.addItem("最大寿命");      //choiceItem2.addItem("股息");      choiceItem1.addItem("平均能量");      choiceItem1.addItem("最大能量");      choiceItem1.addItem("染色体平均长度");      choiceItem1.addItem("染色体最大长度");      choiceItem1.addItem("生命总数");      choiceItem1.addItem("总能量");	 // choiceItem1.addItem("Lambda");      //choiceItem2.addItem("风险中性价格");      //choiceItem2.addItem("无");      choiceItem1.select(6);      //choiceItem2.select(2);    label1.setText("显示长度:");    label1.setBounds(new Rectangle(4, 360, 60, 12));    label2.setText("观察项目1:");    label2.setBounds(new Rectangle(171, 342, 70, 21));    choiceItem1.setBounds(new Rectangle(239, 345, 122, 18));    lblAgent.setText("选择智能体编号:");    lblAgent.setBounds(new Rectangle(435, 344, 107, 18));    choiceAgent.setBounds(new Rectangle(436, 363, 94, 17));    this.add(view, null);    this.add(label2, null);    this.add(choiceItem1, null);    this.add(choicelen, null);    this.add(label1, null);    this.pack();    this.addWindowListener(new java.awt.event.WindowAdapter() {      public void windowClosing(WindowEvent e) {        this_windowClosing(e);      }    });  }  void this_windowClosing(WindowEvent e) {    this.hide();    this.dispose();  }  void btnClose_actionPerformed(ActionEvent e) {    this.hide();    this.dispose();  }   void this_windowOpened(WindowEvent e) {    gra=view.getGraphics();    cyclemax=WorldVariant.cyclemax;    repaint();    if(runner1==null){      runner1=new Thread(this);      runner1.start();    }  }  public void paint(Graphics g) {    /**@todo: Override this java.awt.Component method*/    //画图函数    Vector history=new Vector();    double value1max=100;    double value1min=0;    double valuemax=100;    double valuemin=0;    boolean noneItem,isDrawn;    String sName="";    history=local.localwd.History;    int width=517-originx-25;    int height=316-originy;    //int step=localpd.steps;    long step=local.localwd.modelTime;    int nStart=0;    int nEnd=cycles;    int size=history.size();    if(step-cycles>0){        //计算需要绘制的历史数据数组中的启示索引        nStart=(int)step-cycles;    }    //清空画图区域    gra.clearRect(0,0,517,316);    //设定原点坐标    int x=0,y=0,y0=height-originy;    //对设定的要画的横坐标点数循环    noneItem=false;   for(int i=0;i<cycles;i++){      //当前点坐标      isDrawn=true;      int x1=(int)((i*width)/cycles);      double value1=0;      double value2=0;      int maxIndex=cyclemax;      if(cycles>maxIndex)maxIndex=cycles;      if((i+nStart)%cycles<size){          WorldVariant wv=(WorldVariant)history.elementAt((i+nStart)%cyclemax);          switch(choiceItem1.getSelectedIndex()){          case 0:            value1=wv.avgAge[0];            if(i==0)sName="平均寿命";            value1max=5000;            value1min=0;            break;          case 1:            value1=wv.maxAge[0];            if(i==0)sName="最大寿命";            value1max=5000;            value1min=0;            break;          case 2:            if(i==0)sName="平均能量";            value1=wv.avgEnergy[0];            value1max=5000;            value1min=0;            break;          case 3:            if(i==0)sName="最大能量";            value1=wv.maxEnergy[0];            value1max=5000;            value1min=0;            break;          case 4:            if(i==0)sName="平均长度";            value1=wv.avgLen[0];            value1max=100;            value1min=0;            break;          case 5:            if(i==0)sName="最大长度";            value1=(int)(wv.maxLen[0]);            value1max=100;            value1min=0;            break;          case 6:            if(i==0)sName="生命总数";            value1=wv.Num[0];            value1max=1000;            value1min=0;            break;          case 7:            if(i==0)sName="总能量";            value1=(int)(wv.TotalEnergy[0]);            value1max=10000;            value1min=0;            break;          case 8:          	if(i==0)sName="Lambda";          	value1=wv.avgLambda[0];          	value1max=1;          	value1min=0;          }      }else{        isDrawn=false;        value1=valuemin;      }      valuemax=value1max;      valuemin=value1min;      if(value1>MaxValues[choiceItem1.getSelectedIndex()])MaxValues[choiceItem1.getSelectedIndex()]=value1;      if(MaxValues[choiceItem1.getSelectedIndex()]>valuemax)valuemax=MaxValues[choiceItem1.getSelectedIndex()];      if(valuemax==valuemin)valuemin=valuemax-100;      int y1=(int)(height*(value1-valuemin)/(valuemax-valuemin));      //绘制合作者比例      if(y1<=0){        y1=1;      }else if(y1>=height){        y1=height;      }      if(isDrawn){        gra.setColor(Color.blue);        gra.drawLine(x+originx,height-y,x1+originx,height-y1);      }      //前一点的坐标      x=x1;      y=y1;   }    //画坐标轴及其说明文字    gra.setColor(Color.black);    gra.drawLine(originx,height,width+originx,height);    gra.drawLine(originx,height,originx,0);    gra.drawString("时间",width+originx,height);    gra.drawString(sName,originx-35,originy/2);    this.setTitle(sName+"(曲线图)");    for(int i=0;i<10;i++){        int x3=(int)(i*width/10)+originx;        int y3=height;        gra.drawLine(x3,y3,x3,y3-2);        String txt;        if(step>cycles){          txt=Integer.toString((int)(step-cycles+i*cycles/10));        }else{          txt=Integer.toString((int)(i*cycles/10));        }        gra.drawString(txt,x3,y3+12);    }    for(int i=0;i<=9;i++){        int x3=originx;        int y3=(int)((10-i)*height/10);        gra.drawLine(x3,y3,x3+2,y3);        String txt=Double.toString(Math.ceil((double)(i*(valuemax-valuemin))/(double)10+valuemin));        gra.drawString(txt,x3-30,y3+5);    }    //gra.drawString("合作者",5,height-originy-15);    //gra.drawString("背叛者",5,height-5);    //gra.setColor(Color.blue);    //gra.drawLine(2,height-originy-30,originx-5,height-originy-30);    //gra.setColor(Color.red);    //gra.drawLine(2,height-20,originx-5,height-20);    super.paint(g);  }   void choicelen_itemStateChanged(ItemEvent e) {    cycles=(choicelen.getSelectedIndex()+1)*1000;    repaint();  }  void btnRefresh_actionPerformed(ActionEvent e) {    repaint();  }  public void stop() {    if (runner1!=null)    {      // running = false;        runner1.stop();       runner1=null;    }  }  public void run()   {    while(true){        repaint();        try{Thread.sleep(1000);}catch(InterruptedException e){};    }  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -