package mdpsSolution; import java.awt.BorderLayout; import java.awt.Graphics; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Random; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider; import mdps.Gridworld; import mdps.QValueFunction; import mdps.ValueFunctionPanel; class QLearningUpdateControls extends JPanel implements ActionListener { /** * */ private static final long serialVersionUID = 1L; private QLearning learner; private JButton stepButton = new JButton("Update"); private JSlider slider = new JSlider(0, 1000); private JLabel sliderValue = new JLabel(); private int currentState; private JPanel display; private Random rand = new Random(); public QLearningUpdateControls(QLearning learner, JPanel display) { this.learner = learner; //setLayout(new GridLayout(3, 1)); add(stepButton); add(slider); add(sliderValue); stepButton.addActionListener(this); currentState = 3; slider.setMajorTickSpacing(500); slider.setPaintLabels(true); this.display = display; } public void actionPerformed(ActionEvent event) { // the only action is the button being pressed, so perform that action int numIters = slider.getValue(); for (int i = 0; i < numIters; i++) { currentState = learner.espilonGreedyStep(currentState); currentState = rand.nextInt(learner.getMDP().numStates()); } System.out.println(learner.getValueFunctionReference()); display.repaint(); } @Override public void paint(Graphics graphics) { sliderValue.setText(""+ slider.getValue()); super.paint(graphics); } } public class QLearningGUI { public static void main(String[] args) { JFrame frame = new JFrame("Null Value Function Demo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Gridworld gridworld = new Gridworld("gridworldTest.txt"); QLearning learner = new QLearning(gridworld); QValueFunction valFunc = learner.getValueFunctionReference(); JPanel display = new ValueFunctionPanel(gridworld, valFunc); frame.getContentPane().add(new QLearningUpdateControls(learner, display), BorderLayout.EAST); frame.getContentPane().add(display, BorderLayout.CENTER); frame.pack(); frame.setVisible(true); } }