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

📄 asm.java

📁 人工股市(Artificial Stock Market
💻 JAVA
字号:
package asm;import java.awt.*;import java.awt.event.*;import java.applet.*;/** * Title:        Artificial Stock Market * Description:  人工模拟股市(来源:SFI的Swarm版本)的Java版本 * Copyright:    Copyright (c) 2003 * Company:      http://agents.yeah.net * @author jake * @version 1.0 */public class asm extends Applet implements Runnable  {  boolean isStandalone = false;//标志该程序是否独立运行  boolean bFirst=true;//标志主线称是否第一次运行  Button btnStart = new Button();  Button btnStop = new Button();  Label label1 = new Label();  TextField txtAgentNum = new TextField();  Button btnWorld = new Button();  Label label2 = new Label();  TextField txtStatus = new TextField();  Button btnAgentView = new Button();  Button btnPolar = new Button();  Label label3 = new Label();  TextField txtGAP = new TextField();  Label label4 = new Label();  TextField txtRuleNum = new TextField();  Label label5 = new Label();  Label label6 = new Label();  Label label7 = new Label();  TextField txtMutation = new TextField();  Label label8 = new Label();  TextField txtCross = new TextField();  Button btnContinue = new Button();  Thread runner;//创建一个线程,让动画平滑的运行  boolean running;//是否让动画运行  //下面的参数都是股市的参数  public ASMParam ASMParams;//ASMParam类的实例,股市的参数设置都在该类中  public AgentParam AgentParams;//AgentParam类的实例,Agent的参数设置在该类中  public AsmModel model;  Button btnRulesView = new Button();  Button btnStep = new Button();//股市模型的一个实例。  //下面的代码都是jbuilder自己生成的  /**Get a parameter value*/  public String getParameter(String key, String def) {    return isStandalone ? System.getProperty(key, def) :      (getParameter(key) != null ? getParameter(key) : def);  }  /**Construct the applet*/  public asm() {    ASMParams=new ASMParam();    AgentParams=new AgentParam();  }  /**Initialize the applet*/  public void init() {    try {      jbInit();    }    catch(Exception e) {      e.printStackTrace();    }  }  /**Component initialization*/  private void jbInit() throws Exception {    //初始化各个控件。    btnStart.setLabel("开始");    btnStart.setBounds(new Rectangle(5, 270, 65, 22));    this.setLayout(null);    btnStop.setLabel("停止");    btnStop.setBounds(new Rectangle(68, 270, 70, 22));    label1.setText("Agent的数目:");    label1.setBounds(new Rectangle(11, 12, 83, 26));    txtAgentNum.setText("30");    txtAgentNum.setBounds(new Rectangle(122, 11, 47, 21));    btnWorld.setEnabled(false);    btnWorld.setLabel("曲线图");    btnWorld.setBounds(new Rectangle(93, 123, 112, 24));    label2.setText("世界状态:");    label2.setBounds(new Rectangle(4, 240, 62, 22));    txtStatus.setEditable(false);    txtStatus.setText("就绪");    txtStatus.setBounds(new Rectangle(69, 242, 226, 19));    btnAgentView.setEnabled(false);    btnAgentView.setLabel("曲线图");    btnAgentView.setBounds(new Rectangle(95, 167, 91, 22));    btnPolar.setEnabled(false);    btnPolar.setLabel("柱状图");    btnPolar.setBounds(new Rectangle(186, 167, 90, 22));    label3.setText("执行遗传算法频率:");    label3.setBounds(new Rectangle(10, 43, 113, 20));    txtGAP.setText("250");    txtGAP.setBounds(new Rectangle(122, 43, 46, 20));    label4.setText("规则数目:");    label4.setBounds(new Rectangle(176, 13, 60, 17));    txtRuleNum.setText("100");    txtRuleNum.setBounds(new Rectangle(238, 11, 45, 20));    label5.setText("查看世界:");    label5.setBounds(new Rectangle(10, 123, 66, 21));    label6.setText("查看Agent:");    label6.setBounds(new Rectangle(10, 162, 73, 22));    label7.setText("变异概率:");    label7.setBounds(new Rectangle(175, 43, 60, 15));    txtMutation.setText("0.01");    txtMutation.setBounds(new Rectangle(237, 41, 47, 17));    label8.setText("交叉概率:");    label8.setBounds(new Rectangle(10, 66, 68, 17));    txtCross.setText("0.3");    txtCross.setBounds(new Rectangle(80, 66, 52, 17));    btnContinue.setEnabled(false);    btnContinue.setLabel("暂停");    btnContinue.setBounds(new Rectangle(137, 270, 70, 22));    btnRulesView.setEnabled(false);    btnRulesView.setLabel("查看规则");    btnRulesView.setBounds(new Rectangle(94, 196, 91, 25));    btnStep.setEnabled(false);    btnStep.setLabel("单步运行");    btnStep.setBounds(new Rectangle(206, 270, 87, 22));    this.add(btnStart, null);    this.add(txtStatus, null);    this.add(label1, null);    this.add(label3, null);    this.add(txtGAP, null);    this.add(txtAgentNum, null);    this.add(label5, null);    this.add(label4, null);    this.add(txtRuleNum, null);    this.add(label2, null);    this.add(label7, null);    this.add(txtMutation, null);    this.add(label8, null);    this.add(txtCross, null);    this.add(label6, null);    this.add(btnPolar, null);    this.add(btnStop, null);    this.add(btnContinue, null);    this.add(btnStep, null);    this.add(btnAgentView, null);    this.add(btnRulesView, null);    this.add(btnWorld, null);  }  //系统自己生成的代码  /**Get Applet information*/  public String getAppletInfo() {    return "Applet Information";  }  /**Get parameter info*/  public String[][] getParameterInfo() {    return null;  }  /**Main method*/  public static void main(String[] args) {    asm applet = new asm();    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(400,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 setStatus(String txt){    txtStatus.setText(txt);  }  //相应按钮单击事件      public boolean action(Event evt, Object o) {    		if (evt.target == btnStart) {                  //当按下开始按钮的时候 			running=true;//首先让线程运行起来                        //设置各个按钮的可按状态                        btnStart.setEnabled(false);                        btnContinue.setEnabled(true);                        txtAgentNum.setEnabled(false);                        txtGAP.setEnabled(false);                        txtMutation.setEnabled(false);                        txtCross.setEnabled(false);                        txtRuleNum.setEnabled(false);                        //从各个文本设置框中读取参数的数值                        ASMParams.numBFagents=Integer.parseInt(txtAgentNum.getText());                        if(ASMParams.numBFagents<=0){                          ASMParams.numBFagents=1;                          txtAgentNum.setText(String.valueOf(ASMParams.numBFagents));                        }                        AgentParams.gafrequency=Integer.parseInt(txtGAP.getText());                        if(AgentParams.gafrequency<10){                          AgentParams.gafrequency=10;                          txtGAP.setText("10");                        }                        AgentParams.numfcasts=Integer.parseInt(txtRuleNum.getText());                        if(AgentParams.numfcasts<1){                          AgentParams.numfcasts=1;                          txtRuleNum.setText("1");                        }                        AgentParams.pmutation=Double.valueOf(txtMutation.getText()).doubleValue();                        if(AgentParams.pmutation<=0||AgentParams.pmutation>=1){                            AgentParams.pmutation=0.5;                            txtMutation.setText("0.5");                        }                        AgentParams.pcrossover=Double.valueOf(txtCross.getText()).doubleValue();                        if(AgentParams.pcrossover<=0||AgentParams.pcrossover>=1){                            AgentParams.pcrossover=0.5;                            txtMutation.setText("0.5");                        }                        AgentParams.reinit();                        return true;		}else if(evt.target == btnStop){                    //档案下结束按钮的时候,设置各个按钮的可按下状态                    btnStart.setEnabled(true);                    btnPolar.setEnabled(false);                    btnWorld.setEnabled(false);                    btnRulesView.setEnabled(false);                    btnAgentView.setEnabled(false);                    btnContinue.setEnabled(false);                    txtAgentNum.setEnabled(true);                    txtGAP.setEnabled(true);                    txtMutation.setEnabled(true);                    txtCross.setEnabled(true);                    txtRuleNum.setEnabled(true);                    //停止线程的运行                    running=false;                    setStatus("就绪...");                    //标志下次运行为第一次运行                    bFirst=true;                    return true;                }else if(evt.target==btnWorld){                  //以下为各个按钮弹出相应的窗口界面                  //model为当前世界的实例,作为参数传入,1表示显示的是Agent的状态,0表示显示世界的状态。                  CurveShow ctl=new CurveShow(model,0);                  ctl.setSize(550,400);                  ctl.show();                  return true;                }else if(evt.target==btnAgentView){                  //model为当前世界的实例,作为参数传入,1表示显示的是Agent的状态,0表示显示世界的状态。                  CurveShow ctl1=new CurveShow(model,1);                  ctl1.setSize(550,400);                  ctl1.show();                  return true;                }else if(evt.target==btnPolar){                  PolarShow ctl=new PolarShow(model,0);                  ctl.setSize(550,400);                  ctl.show();                  return true;                }else if(evt.target==btnContinue){                  //暂停/继续按钮,在两种状态之间切换。                  if(btnContinue.getLabel()=="暂停"){                     btnContinue.setLabel("继续");                     btnStep.setEnabled(true);                     running=false;                  }else{                     btnContinue.setLabel("暂停");                     btnStep.setEnabled(false);                     running=true;                  }                  return true;                }else if(evt.target==btnRulesView){                  RuleView ctl=new RuleView(model);                  ctl.setSize(800,480);                  ctl.show();                }else if(evt.target==btnStep){                  model.OneStep();                  return true;                }                return false;        }        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){                          //如果running=true,则运行模拟股市 		 	  if(bFirst){                            //如果是第一次运行,则新建实例                            model=new AsmModel(this);                            //创建股市中的对象                            model.buildObjects();                            setStatus("股市预运行(没有Agent参与)");                            //股市的热身运行                            for (int j = 0; j < 502; j++)                                model.doWarmupStep();                            //当热身结束,则设置几个按钮的可按下状态。                            btnPolar.setEnabled(true);                            btnWorld.setEnabled(true);                            btnAgentView.setEnabled(true);                            btnRulesView.setEnabled(true);                            //标志第一次运行bFirst=false                            bFirst=false;                          }                          //运行股市的一个仿真周期                          model.OneStep();                        }		 	try { Thread.sleep(100);}		 	catch (InterruptedException e) {			}		}	}        public void terminate(){          //结束运行(该函数会引起applet的错误)            model.terminate();        }}

⌨️ 快捷键说明

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