You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
299 lines
7.0 KiB
299 lines
7.0 KiB
//==============================================================================
|
|
//
|
|
// Copyright (c) 2002-
|
|
// Authors:
|
|
// * Andrew Hinton <ug60axh@cs.bham.ac.uk> (University of Birmingham)
|
|
// * Vincent Nimal <vincent.nimal@comlab.ox.ac.uk> (University of Oxford)
|
|
// * Dave Parker <david.parker@comlab.ox.ac.uk> (University of Oxford, formerly University of Birmingham)
|
|
//
|
|
//------------------------------------------------------------------------------
|
|
//
|
|
// This file is part of PRISM.
|
|
//
|
|
// PRISM is free software; you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation; either version 2 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// PRISM is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with PRISM; if not, write to the Free Software Foundation,
|
|
// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
//
|
|
//==============================================================================
|
|
|
|
package userinterface;
|
|
|
|
import parser.*;
|
|
import prism.PrismSettings;
|
|
import simulator.method.*;
|
|
|
|
public class SimulationInformation
|
|
{
|
|
// PRISM settings object
|
|
private PrismSettings settings;
|
|
|
|
// Simulation method
|
|
public enum Method { CI, ACI, APMC, SPRT };
|
|
private Method method;
|
|
// Unknown variable
|
|
public enum Unknown { WIDTH, CONFIDENCE, NUM_SAMPLES };
|
|
private Unknown unknown;
|
|
|
|
// Settings
|
|
private Values initialState;
|
|
|
|
|
|
private double width;
|
|
private double confidence;
|
|
private int numSamples;
|
|
private int maxPathLength;
|
|
|
|
private boolean distributed;
|
|
private boolean maxRewardGiven;
|
|
|
|
/**
|
|
* Create a new SimulationInformation object.
|
|
* Default values for simulator settings are extracted from PrismSettings.
|
|
* PrismSettings object is retained for other settings needed later.
|
|
*/
|
|
public SimulationInformation(PrismSettings settings)
|
|
{
|
|
this.settings = settings;
|
|
|
|
this.initialState = null;
|
|
|
|
this.method = Method.CI;
|
|
this.unknown = Unknown.WIDTH;
|
|
this.width = settings.getDouble(PrismSettings.SIMULATOR_DEFAULT_WIDTH);
|
|
this.confidence = settings.getDouble(PrismSettings.SIMULATOR_DEFAULT_CONFIDENCE);
|
|
this.numSamples = settings.getInteger(PrismSettings.SIMULATOR_DEFAULT_NUM_SAMPLES);
|
|
this.maxPathLength = settings.getInteger(PrismSettings.SIMULATOR_DEFAULT_MAX_PATH);
|
|
|
|
|
|
this.distributed = false;
|
|
|
|
this.maxRewardGiven = false;
|
|
}
|
|
|
|
public void setMethod(Method method)
|
|
{
|
|
this.method = method;
|
|
}
|
|
|
|
public Method getMethod()
|
|
{
|
|
return method;
|
|
}
|
|
|
|
public void setMethodByName(String name)
|
|
{
|
|
setMethod(Method.valueOf(name));
|
|
}
|
|
|
|
public String getMethodName()
|
|
{
|
|
return method.toString();
|
|
}
|
|
|
|
public void setUnknown(Unknown unknown)
|
|
{
|
|
this.unknown = unknown;
|
|
}
|
|
|
|
public void setUnknownByName(String name)
|
|
{
|
|
if (name.equals("Width") || name.equals("Approximation")) {
|
|
setUnknown(Unknown.WIDTH);
|
|
} else if (name.equals("Confidence")) {
|
|
setUnknown(Unknown.CONFIDENCE);
|
|
} else if (name.equals("Number of samples")) {
|
|
setUnknown(Unknown.NUM_SAMPLES);
|
|
}
|
|
}
|
|
|
|
public String getUnknownName()
|
|
{
|
|
switch (unknown) {
|
|
case WIDTH:
|
|
return (method == Method.APMC) ? "Approximation" : "Width";
|
|
case CONFIDENCE:
|
|
return "Confidence";
|
|
case NUM_SAMPLES:
|
|
return "Number of samples";
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public Unknown getUnknown()
|
|
{
|
|
return unknown;
|
|
}
|
|
|
|
/**
|
|
* Getter for property initialState.
|
|
* @return Value of property initialState.
|
|
*/
|
|
public parser.Values getInitialState()
|
|
{
|
|
return initialState;
|
|
}
|
|
|
|
/**
|
|
* Setter for property initialState.
|
|
* @param initialState New value of property initialState.
|
|
*/
|
|
public void setInitialState(parser.Values initialState)
|
|
{
|
|
this.initialState = initialState;
|
|
}
|
|
|
|
public double getWidth()
|
|
{
|
|
return width;
|
|
}
|
|
|
|
public void setWidth(double width)
|
|
{
|
|
this.width = width;
|
|
}
|
|
|
|
/**
|
|
* Getter for property confidence.
|
|
* @return Value of property confidence.
|
|
*/
|
|
public double getConfidence()
|
|
{
|
|
return confidence;
|
|
}
|
|
|
|
/**
|
|
* Setter for property confidence.
|
|
* @param confidence New value of property confidence.
|
|
*/
|
|
public void setConfidence(double confidence)
|
|
{
|
|
this.confidence = confidence;
|
|
}
|
|
|
|
public int getNumSamples()
|
|
{
|
|
return numSamples;
|
|
}
|
|
|
|
public void setNumSamples(int numSamples)
|
|
{
|
|
this.numSamples = numSamples;
|
|
}
|
|
|
|
/**
|
|
* Getter for property maxPathLength.
|
|
* @return Value of property maxPathLength.
|
|
*/
|
|
public int getMaxPathLength()
|
|
{
|
|
return maxPathLength;
|
|
}
|
|
|
|
/**
|
|
* Setter for property maxPathLength.
|
|
* @param maxPathLength New value of property maxPathLength.
|
|
*/
|
|
public void setMaxPathLength(int maxPathLength)
|
|
{
|
|
this.maxPathLength = maxPathLength;
|
|
}
|
|
|
|
public void setPropReward(boolean b)
|
|
{
|
|
this.maxRewardGiven = b;
|
|
}
|
|
|
|
/**
|
|
* Getter for property distributed.
|
|
* @return Value of property distributed.
|
|
*/
|
|
public boolean isDistributed()
|
|
{
|
|
return distributed;
|
|
}
|
|
|
|
/**
|
|
* Setter for property distributed.
|
|
* @param distributed New value of property distributed.
|
|
*/
|
|
public void setDistributed(boolean distributed)
|
|
{
|
|
this.distributed = distributed;
|
|
}
|
|
|
|
/**
|
|
* create and return the selected method of simulation
|
|
* @return the method of simulation
|
|
*/
|
|
public SimulationMethod createSimulationMethod()
|
|
{
|
|
// Extract some simulator options, in case needed, from PRISM settings
|
|
double maxReward = settings.getDouble(PrismSettings.SIMULATOR_MAX_REWARD);
|
|
boolean numberToDecideGiven = settings.getBoolean(PrismSettings.SIMULATOR_DECIDE);
|
|
int numberToDecide = settings.getInteger(PrismSettings.SIMULATOR_ITERATIONS_TO_DECIDE);
|
|
|
|
switch (method) {
|
|
case CI:
|
|
switch (unknown) {
|
|
case WIDTH:
|
|
return new CIwidth(confidence, numSamples);
|
|
case CONFIDENCE:
|
|
return new CIconfidence(width, numSamples);
|
|
case NUM_SAMPLES:
|
|
if (numberToDecideGiven) {
|
|
return new CIiterations(confidence, width, numberToDecide);
|
|
} else {
|
|
if (maxRewardGiven)
|
|
return new CIiterations(confidence, width, maxReward);
|
|
else
|
|
return new CIiterations(confidence, width);
|
|
}
|
|
default:
|
|
return null;
|
|
}
|
|
case ACI:
|
|
switch (unknown) {
|
|
case WIDTH:
|
|
return new ACIwidth(confidence, numSamples);
|
|
case CONFIDENCE:
|
|
return new ACIconfidence(width, numSamples);
|
|
case NUM_SAMPLES:
|
|
if (numberToDecideGiven) {
|
|
return new ACIiterations(confidence, width, numberToDecide);
|
|
} else {
|
|
if (maxRewardGiven)
|
|
return new ACIiterations(confidence, width, maxReward);
|
|
else
|
|
return new ACIiterations(confidence, width);
|
|
}
|
|
default:
|
|
return null;
|
|
}
|
|
case APMC:
|
|
switch (unknown) {
|
|
case WIDTH:
|
|
return new APMCapproximation(confidence, numSamples);
|
|
case CONFIDENCE:
|
|
return new APMCconfidence(width, numSamples);
|
|
case NUM_SAMPLES:
|
|
return new APMCiterations(confidence, width);
|
|
default:
|
|
return null;
|
|
}
|
|
case SPRT:
|
|
return new SPRTMethod(confidence, confidence, width);
|
|
default:
|
|
return null;
|
|
}
|
|
}
|
|
}
|