?? 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;//標(biāo)志該程序是否獨立運行 boolean bFirst=true;//標(biāo)志主線稱是否第一次運行 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;//創(chuàng)建一個線程,讓動畫平滑的運行 boolean running;//是否讓動畫運行 //下面的參數(shù)都是股市的參數(shù) public ASMParam ASMParams;//ASMParam類的實例,股市的參數(shù)設(shè)置都在該類中 public AgentParam AgentParams;//AgentParam類的實例,Agent的參數(shù)設(shè)置在該類中 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的數(shù)目:"); 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("世界狀態(tài):"); 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("執(zhí)行遺傳算法頻率:"); label3.setBounds(new Rectangle(10, 43, 113, 20)); txtGAP.setText("250"); txtGAP.setBounds(new Rectangle(122, 43, 46, 20)); label4.setText("規(guī)則數(shù)目:"); 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("查看規(guī)則"); 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); } //系統(tǒng)自己生成的代碼 /**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); } //相應(yīng)按鈕單擊事件 public boolean action(Event evt, Object o) { if (evt.target == btnStart) { //當(dāng)按下開始按鈕的時候 running=true;//首先讓線程運行起來 //設(shè)置各個按鈕的可按狀態(tài) btnStart.setEnabled(false); btnContinue.setEnabled(true); txtAgentNum.setEnabled(false); txtGAP.setEnabled(false); txtMutation.setEnabled(false); txtCross.setEnabled(false); txtRuleNum.setEnabled(false); //從各個文本設(shè)置框中讀取參數(shù)的數(shù)值 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){ //檔案下結(jié)束按鈕的時候,設(shè)置各個按鈕的可按下狀態(tài) 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("就緒..."); //標(biāo)志下次運行為第一次運行 bFirst=true; return true; }else if(evt.target==btnWorld){ //以下為各個按鈕彈出相應(yīng)的窗口界面 //model為當(dāng)前世界的實例,作為參數(shù)傳入,1表示顯示的是Agent的狀態(tài),0表示顯示世界的狀態(tài)。 CurveShow ctl=new CurveShow(model,0); ctl.setSize(550,400); ctl.show(); return true; }else if(evt.target==btnAgentView){ //model為當(dāng)前世界的實例,作為參數(shù)傳入,1表示顯示的是Agent的狀態(tài),0表示顯示世界的狀態(tài)。 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){ //暫停/繼續(xù)按鈕,在兩種狀態(tài)之間切換。 if(btnContinue.getLabel()=="暫停"){ btnContinue.setLabel("繼續(xù)"); 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() //下面三個函數(shù)是控制線程的 { //線程啟動 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); //創(chuàng)建股市中的對象 model.buildObjects(); setStatus("股市預(yù)運行(沒有Agent參與)"); //股市的熱身運行 for (int j = 0; j < 502; j++) model.doWarmupStep(); //當(dāng)熱身結(jié)束,則設(shè)置幾個按鈕的可按下狀態(tài)。 btnPolar.setEnabled(true); btnWorld.setEnabled(true); btnAgentView.setEnabled(true); btnRulesView.setEnabled(true); //標(biāo)志第一次運行bFirst=false bFirst=false; } //運行股市的一個仿真周期 model.OneStep(); } try { Thread.sleep(100);} catch (InterruptedException e) { } } } public void terminate(){ //結(jié)束運行(該函數(shù)會引起applet的錯誤) model.terminate(); }}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -