- only setting the seed of RNG once at the beginning and not reseeding it afterwards. Deep copying the initial AntWorld to use as blueprint for resetting the world instead of reseeding and creating pesudo random again. Reseeding the RNG has influence action selecting to always choose the same trajectory. - instance of is used to determine if policy has epsilon or not and the view will adopt to this, only showing epsilon slider if policy has epsilon
50 lines
1.8 KiB
Java
50 lines
1.8 KiB
Java
package core.gui;
|
|
|
|
import core.algo.Learning;
|
|
import core.controller.ViewListener;
|
|
import core.policy.EpsilonPolicy;
|
|
|
|
import javax.swing.*;
|
|
|
|
public class LearningInfoPanel extends JPanel {
|
|
private Learning learning;
|
|
private JLabel policyLabel;
|
|
private JLabel discountLabel;
|
|
private JLabel epsilonLabel;
|
|
private JSlider epsilonSlider;
|
|
private JLabel delayLabel;
|
|
private JSlider delaySlider;
|
|
|
|
public LearningInfoPanel(Learning learning, ViewListener viewListener){
|
|
this.learning = learning;
|
|
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
|
|
policyLabel = new JLabel();
|
|
discountLabel = new JLabel();
|
|
epsilonLabel = new JLabel();
|
|
delayLabel = new JLabel();
|
|
delaySlider = new JSlider(0,1000, learning.getDelay());
|
|
delaySlider.addChangeListener(e -> viewListener.onDelayChange(delaySlider.getValue()));
|
|
add(policyLabel);
|
|
add(discountLabel);
|
|
if(learning.getPolicy() instanceof EpsilonPolicy){
|
|
epsilonSlider = new JSlider(0, 100, (int)((EpsilonPolicy)learning.getPolicy()).getEpsilon() * 100);
|
|
epsilonSlider.addChangeListener(e -> viewListener.onEpsilonChange(epsilonSlider.getValue() / 100f));
|
|
add(epsilonLabel);
|
|
add(epsilonSlider);
|
|
}
|
|
add(delayLabel);
|
|
add(delaySlider);
|
|
refreshLabels();
|
|
setVisible(true);
|
|
}
|
|
|
|
public void refreshLabels(){
|
|
policyLabel.setText("Policy: " + learning.getPolicy().getClass());
|
|
discountLabel.setText("Discount factor: " + learning.getDiscountFactor());
|
|
if(learning.getPolicy() instanceof EpsilonPolicy){
|
|
epsilonLabel.setText("Exploration (Epsilon): " + ((EpsilonPolicy)learning.getPolicy()).getEpsilon());
|
|
}
|
|
delayLabel.setText("Delay (ms): " + learning.getDelay());
|
|
}
|
|
}
|