package nl.tudelft.simulation.jstats.distributions; import java.awt.Dimension; import javax.swing.JFrame; import javax.swing.JTabbedPane; import nl.tudelft.simulation.dsol.swing.charts.histogram.Histogram; import nl.tudelft.simulation.dsol.swing.charts.histogram.HistogramSeries; import nl.tudelft.simulation.event.Event; import nl.tudelft.simulation.event.EventType; import nl.tudelft.simulation.jstats.streams.MersenneTwister; import nl.tudelft.simulation.jstats.streams.StreamInterface; /** * The DistributionsGUIInspector provides graphical insight in the randomness of different streams. *
* (c) 2002-2018-2004 Delft University of Technology , the Netherlands.
* See for project information www.simulation.tudelft.nl .
*
* Copyright (c) 2002-2019 Delft University of Technology, Jaffalaan 5, 2628 BX Delft, the Netherlands. All rights reserved. See * for project information https://simulation.tudelft.nl. The DSOL * project is distributed under a three-clause BSD-style license, which can be found at * * https://simulation.tudelft.nl/dsol/3.0/license.html. *
* @author Peter Jacobs * @since 1.5 */ public class DistributionsGUIInspector extends JTabbedPane { /** * constructs a new DistributionsGUIInspector */ public DistributionsGUIInspector() { this.setPreferredSize(new Dimension(500, 500)); StreamInterface stream = new MersenneTwister(); DistContinuous distribution = new DistUniform(stream, 0, 1.0); this.add(distribution.toString(), this.createHistogram(distribution, new double[] {0, 1}).getSwingPanel()); distribution = new DistConstant(stream, 10.0); this.add(distribution.toString(), this.createHistogram(distribution, new double[] {0, 10}).getSwingPanel()); distribution = new DistExponential(stream, 1.0); this.add(distribution.toString(), this.createHistogram(distribution, new double[] {0, 6}).getSwingPanel()); distribution = new DistGamma(stream, 2.0, 1.0); this.add(distribution.toString(), this.createHistogram(distribution, new double[] {0, 9}).getSwingPanel()); distribution = new DistWeibull(stream, 2.0, 1.0); this.add(distribution.toString(), this.createHistogram(distribution, new double[] {0, 4}).getSwingPanel()); distribution = new DistNormal(stream, 0.0, 1.0); this.add(distribution.toString(), this.createHistogram(distribution, new double[] {-3, 3}).getSwingPanel()); distribution = new DistLogNormal(stream, 0.0, 1); this.add(distribution.toString(), this.createHistogram(distribution, new double[] {0, 5}).getSwingPanel()); distribution = new DistBeta(stream, 1.5, 5); this.add(distribution.toString(), this.createHistogram(distribution, new double[] {0, 1}).getSwingPanel()); distribution = new DistBeta(stream, 5, 1.5); this.add(distribution.toString(), this.createHistogram(distribution, new double[] {0, 1}).getSwingPanel()); distribution = new DistPearson5(stream, 1, 1); this.add(distribution.toString(), this.createHistogram(distribution, new double[] {0, 5}).getSwingPanel()); distribution = new DistPearson6(stream, 1, 2, 4); this.add(distribution.toString(), this.createHistogram(distribution, new double[] {0, 5}).getSwingPanel()); distribution = new DistTriangular(stream, 1, 1.5, 7); this.add(distribution.toString(), this.createHistogram(distribution, new double[] {0, 7}).getSwingPanel()); } /** * creates a histogram of a discrete distribution * @param distribution the distribution to plot * @param domain the domain to show on the histogram * @return Histogram the histogram. */ private Histogram createHistogram(final Dist distribution, final double[] domain) { Histogram histogram = new Histogram(distribution.toString(), domain, 20); HistogramSeries series = new HistogramSeries(distribution.toString(), domain, null, 20); EventType accept = new EventType("DISTRIBUTION_VALUE"); for (int i = 0; i < 10000; i++) { if (distribution instanceof DistContinuous) { Double value = new Double(((DistContinuous) distribution).draw()); series.notify(new Event(accept, this, value)); } else { series.notify(new Event(accept, this, new Long(((DistDiscrete) distribution).draw()))); } } histogram.getDataset().addSeries(series); return histogram; } /** * executes the main program * @param args the commandline arguments */ public static void main(final String[] args) { JFrame app = new JFrame("Distributions gui tester"); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); app.getContentPane().add(new DistributionsGUIInspector()); app.pack(); app.setVisible(true); } }