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.QValueFunction; import mdps.Gridworld; import mdps.ValueFunctionPanel; class ValueIterationUpdateControls extends JPanel implements ActionListener { /** * */ private static final long serialVersionUID = 1L; private ValueIteration learner; private JButton stepButton = new JButton("Update"); private JSlider slider = new JSlider(0, 50); private JLabel sliderValue = new JLabel(); private JPanel display; public ValueIterationUpdateControls(ValueIteration learner, JPanel display) { this.learner = learner; //setLayout(new GridLayout(3, 1)); add(stepButton); add(slider); add(sliderValue); stepButton.addActionListener(this); 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++) { learner.updateValueFunction(); } System.out.println(learner.getValueFunctionReference()); display.repaint(); } @Override public void paint(Graphics graphics) { sliderValue.setText(""+ slider.getValue()); super.paint(graphics); } } public class ValueIterationGUI { 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"); ValueIteration learner = new ValueIteration(gridworld); QValueFunction valFunc = learner.getValueFunctionReference(); JPanel display = new ValueFunctionPanel(gridworld, valFunc); frame.getContentPane().add(new ValueIterationUpdateControls(learner, display), BorderLayout.EAST); frame.getContentPane().add(display, BorderLayout.CENTER); frame.pack(); frame.setVisible(true); } }