📄 asm.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 + -