?? qlsimulator.java
字號:
import java.awt.BorderLayout;import java.awt.Color;import java.awt.Graphics;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.File;import java.io.FileInputStream;import java.io.ObjectInputStream;import java.text.DecimalFormat;import java.util.Vector;import java.util.zip.GZIPInputStream;import javax.swing.BorderFactory;import javax.swing.DebugGraphics;import javax.swing.JButton;import javax.swing.JCheckBox;import javax.swing.JFileChooser;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JSeparator;import javax.swing.JTextField;import javax.swing.SwingConstants;import javax.swing.WindowConstants;import javax.swing.border.TitledBorder;public class QLSimulator extends javax.swing.JFrame implements ActionListener{ private JPanel jPanel; private JButton jLoadButton; private JSeparator jSeparator1; private JButton jInitializeButton; private JButton jStepButton; private JButton jCycleButton; private JFileChooser fc; private JLabel jLabelSqSize; private JCheckBox jDecayLRCheckBox; private JTextField jDelayTextField; private JLabel jDelayLabel; private JLabel jConvErrorLabel; private JTextField jConverErrorTextField; private JCheckBox jPolicyCheckBox; private JCheckBox jValuesCheckBox; private JButton jUpdateButton; private JButton jRefreshButton; private JLabel jStatusLabel; private JTextField jFileNameTextField; private JTextField jCyclesTextField; private JTextField sqSizeTextField; private JTextField jLearnRateTextField; private JTextField pjogTextField; private JLabel JLabelPJOG; private JLabel jLabelLearningRate; // private Algorithms alg = null;//this is commented for q learning customization private Maze myMaze = null; private QLearning ql; private boolean ShowValue = true; private boolean ShowPolicy = true; private boolean Animate = true; DecimalFormat df = new DecimalFormat("0.0"); private JScrollPane jScrollPane; private String mazeStatus = "Load Maze First..."; private String algorithmStatus = ""; private JTextField jEpsilonTextField; private JLabel jLabelEpsilon; private JCheckBox jAnimateCheckBox; private JButton jEpisodeButton; { //Set Look & Feel try { javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); } catch(Exception e) { e.printStackTrace(); } } /** * Auto-generated main method to display this JFrame */ public static void main(String[] args) { QLSimulator inst = new QLSimulator(); inst.setVisible(true); } public QLSimulator() { super("RL-MDP:Simulation"); initGUI(); } private void initGUI() { try { this.setSize(1000, 800); this.setExtendedState(MAXIMIZED_BOTH); setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); { jPanel = new JPanel(); this.getContentPane().add(jPanel, BorderLayout.CENTER); jPanel.setLayout(null); jPanel.setBackground(new java.awt.Color(235, 241, 238)); jPanel.setPreferredSize(new java.awt.Dimension(900, 700)); } { jLoadButton = new JButton(); jPanel.add(jLoadButton); jLoadButton.setText("LoadMaze..."); jLoadButton.setBounds(25, 58, 110, 28); jLoadButton.setActionCommand("LoadMaze"); jLoadButton.addActionListener(this); } { JLabelPJOG = new JLabel(); jPanel.add(JLabelPJOG); JLabelPJOG.setText("PJOG"); JLabelPJOG.setBounds(20, 105, 70, 21); JLabelPJOG.setHorizontalAlignment(SwingConstants.RIGHT); } { pjogTextField = new JTextField(); jPanel.add(pjogTextField); pjogTextField.setText("0.3"); pjogTextField.setBounds(95, 104, 40, 20); pjogTextField.setHorizontalAlignment(SwingConstants.RIGHT); } { jLabelEpsilon = new JLabel(); jPanel.add(jLabelEpsilon); jLabelEpsilon.setText("Epsilon"); jLabelEpsilon.setBounds(20, 126, 70, 21); jLabelEpsilon.setHorizontalAlignment(SwingConstants.RIGHT); } { jEpsilonTextField = new JTextField(); jPanel.add(jEpsilonTextField); jEpsilonTextField.setText("0.1"); jEpsilonTextField.setBounds(95, 125, 40, 20); jEpsilonTextField.setHorizontalAlignment(SwingConstants.RIGHT); } { jConvErrorLabel = new JLabel(); jPanel.add(jConvErrorLabel); jConvErrorLabel.setText("Precision"); jConvErrorLabel.setBounds(20, 147, 70, 21); jConvErrorLabel.setHorizontalAlignment(SwingConstants.RIGHT); } { jConverErrorTextField = new JTextField(); jPanel.add(jConverErrorTextField); jConverErrorTextField.setText("0.001"); jConverErrorTextField.setBounds(95, 146, 40, 20); jConverErrorTextField.setHorizontalAlignment(SwingConstants.RIGHT); } { jLabelLearningRate = new JLabel(); jPanel.add(jLabelLearningRate); jLabelLearningRate.setText("Learning Rate"); jLabelLearningRate.setBounds(20, 168, 70, 21); jLabelLearningRate.setHorizontalAlignment(SwingConstants.RIGHT); } { jLearnRateTextField = new JTextField(); jPanel.add(jLearnRateTextField); jLearnRateTextField.setText("0.7"); jLearnRateTextField.setBounds(95, 167, 40, 20); jLearnRateTextField.setHorizontalAlignment(SwingConstants.RIGHT); } { jDecayLRCheckBox = new JCheckBox(); jPanel.add(jDecayLRCheckBox); jDecayLRCheckBox.setText("Decaying LR"); jDecayLRCheckBox.setBounds(36, 195, 95, 17); jDecayLRCheckBox.setOpaque(false); jDecayLRCheckBox.setSelected(true); jDecayLRCheckBox.addActionListener(this); } { jInitializeButton = new JButton(); jPanel.add(jInitializeButton); jInitializeButton.setText("Initialize"); jInitializeButton.setBounds(25, 223, 110, 28); jInitializeButton.addActionListener(this); jInitializeButton.setActionCommand("Initialize"); } { jUpdateButton = new JButton(); jPanel.add(jUpdateButton); jUpdateButton.setText("Update"); jUpdateButton.setBounds(25, 258, 110, 28); jUpdateButton.setActionCommand("Update"); jUpdateButton.addActionListener(this); } { jStepButton = new JButton(); jPanel.add(jStepButton); jStepButton.setText("Step"); jStepButton.setBounds(25, 314, 110, 28); jStepButton.addActionListener(this); jStepButton.setActionCommand("Step"); } { jEpisodeButton = new JButton(); jPanel.add(jEpisodeButton); jEpisodeButton.setText("Episode"); jEpisodeButton.setBounds(25, 350, 110, 28); jEpisodeButton.addActionListener(this); jEpisodeButton.setActionCommand("Episode"); } { jCyclesTextField = new JTextField(); jPanel.add(jCyclesTextField); jCyclesTextField.setText("1000"); jCyclesTextField.setBounds(25, 387, 35, 26); } { jCycleButton = new JButton(); jPanel.add(jCycleButton); jCycleButton.setText("Cycles"); jCycleButton.setBounds(65, 386, 70, 28); jCycleButton.addActionListener(this); jCycleButton.setActionCommand("Cycles"); } { jLabelSqSize = new JLabel(); jPanel.add(jLabelSqSize); jLabelSqSize.setText("Square Size"); jLabelSqSize.setBounds(20, 445, 70, 21); jLabelSqSize.setHorizontalAlignment(SwingConstants.RIGHT); } { sqSizeTextField = new JTextField(); jPanel.add(sqSizeTextField); sqSizeTextField.setText("80"); sqSizeTextField.setBounds(96, 446, 40, 20); sqSizeTextField.setHorizontalAlignment(SwingConstants.RIGHT); sqSizeTextField.addActionListener(this); } { jDelayLabel = new JLabel(); jPanel.add(jDelayLabel); jDelayLabel.setText("Delay(in ms)"); jDelayLabel.setBounds(22, 470, 70, 21); jDelayLabel.setHorizontalAlignment(SwingConstants.RIGHT); } { jDelayTextField = new JTextField(); jPanel.add(jDelayTextField); jDelayTextField.setText("30"); jDelayTextField.setBounds(96, 472, 40, 20); jDelayTextField.setHorizontalAlignment(SwingConstants.RIGHT); } { jRefreshButton = new JButton(); jPanel.add(jRefreshButton); jRefreshButton.setText("Refresh"); jRefreshButton.setBounds(26, 500, 110, 28); jRefreshButton.setActionCommand("Refresh"); jRefreshButton.addActionListener(this); } { jValuesCheckBox = new JCheckBox(); jPanel.add(jValuesCheckBox); jValuesCheckBox.setText("Show Values"); jValuesCheckBox.setBounds(35, 553, 93, 17); jValuesCheckBox.setOpaque(false); jValuesCheckBox.setSelected(true); jValuesCheckBox.addActionListener(this); } { jPolicyCheckBox = new JCheckBox(); jPanel.add(jPolicyCheckBox); jPolicyCheckBox.setText("Show Policy"); jPolicyCheckBox.setBounds(35, 573, 85, 17); jPolicyCheckBox.setOpaque(false); jPolicyCheckBox.setSelected(true); jPolicyCheckBox.addActionListener(this); } { jAnimateCheckBox = new JCheckBox(); jPanel.add(jAnimateCheckBox); jAnimateCheckBox.setText("Animate"); jAnimateCheckBox.setBounds(35, 593, 85, 17); jAnimateCheckBox.setOpaque(false); jAnimateCheckBox.setSelected(true); jAnimateCheckBox.addActionListener(this); } { jSeparator1 = new JSeparator(); jPanel.add(jSeparator1); jSeparator1.setBounds(161, 2, 4, 400); jSeparator1.setBorder(BorderFactory.createTitledBorder( null, "", TitledBorder.LEADING, TitledBorder.TOP, new java.awt.Font("MS Sans Serif", 0, 11), new java.awt.Color(0, 0, 0))); } { jStatusLabel = new JLabel(); jPanel.add(jStatusLabel); jStatusLabel.setText("Load Maze First... | Q-learning"); jStatusLabel.setBounds(182, 14, 770, 34); jStatusLabel.setBackground(new java.awt.Color(192,192,192)); jStatusLabel.setBorder(BorderFactory.createTitledBorder(null, "", TitledBorder.LEADING, TitledBorder.TOP, new java.awt.Font("MS Sans Serif",0,11), new java.awt.Color(0,0,0))); jStatusLabel.setFont(new java.awt.Font("Georgia",1,12)); jStatusLabel.setDebugGraphicsOptions(DebugGraphics.NONE_OPTION); jStatusLabel.setOpaque(true); jStatusLabel.setHorizontalAlignment(SwingConstants.CENTER); jStatusLabel.setPreferredSize(new java.awt.Dimension(984, 35)); } } catch (Exception e) { e.printStackTrace(); } } public void actionPerformed(ActionEvent evt) {
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -