package ucheck.cli;

public final class UcheckHelp {

	static String getHelp() {
		return ""
				+ "# Experiment options\n"
				+ "# ==================\n"
				+ "\n"
				+ "modelFile=MODEL\n"
				+ "# Required\n"
				+ "# 'MODEL' is a file that contains the specification of a population CTMC \n"
				+ "# described either in the SimHyA or the Bio-PEPA language. Bio-PEPA models\n"
				+ "# must be of the form '*.biopepa'.\n"
				+ "\n"
				+ "\n"
				+ "propertiesFile=PROPERTIES\n"
				+ "# Required\n"
				+ "# 'PROPERTIES' is a file that contains the specification of one or more MiTL\n"
				+ "# properties.\n"
				+ "\n"
				+ "\n"
				+ "observationsFile=OBSERVATIONS\n"
				+ "# Required (inference only)\n"
				+ "# 'OBSERVATIONS' is a csv file that contains a NxM matrix, whose rows \n"
				+ "# correspond to N independent observations of the system in question.\n"
				+ "# A row is a single observation and contains M values ('0' or '1'),\n"
				+ "# one for each one of the MiTL formulae specified in the properties file.\n"
				+ "# For example, given N=2 and M=3, the contents could be:\n"
				+ "# 	1, 0, 0\n"
				+ "# 	0, 1, 1\n"
				+ "# In the case that robustness of temporal properties is used, \n"
				+ "# then the observations should be real-valued, rather than '0' or '1'.\n"
				+ "# For example, given N=2 and M=3, the contents could be:\n"
				+ "# 	-1.245,   3.453,  0.424\n"
				+ "# 	24.023, 234.322, -3.421\n"
				+ "# This option is only required for parameter synthesis.\n"
				+ "# In the case of smoothed MC, this option is just ignored.\n"
				+ "\n"
				+ "\n"
				+ "mode=MODE\n"
				+ "# Required\n"
				+ "# 'MODE' can be one of the following:\n"
				+ "# 	inference   Perform parameter estimation for the model in MODEL,\n"
				+ "# 	            given the observations in the OBSERVATIONS file\n"
				+ "# 	            for the properties defined in the PROPERTIES file.\n"
				+ "# 	robust      Perform robust parameter synthesis for the model in MODEL,\n"
				+ "# 	            for the properties defined in the PROPERTIES file.\n"
				+ "# 	smoothedmc  Perform smoothed model checking for the model in MODEL,\n"
				+ "# 	            for the properties defined in the PROPERTIES file.\n"
				+ "\n"
				+ "\n"
				+ "outputDir=./\n"
				+ "# Optional (default value: ./)\n"
				+ "# The smoothed MC results can be placed in a user specified directory.\n"
				+ "# If the directory doesn't exist, it will be created.\n"
				+ "\n"
				+ "\n"
				+ "parameter NAME=[A, B]\n"
				+ "# Required\n"
				+ "# 'NAME' is the name of the parameter; it must be present in the model\n"
				+ "# for which uncertainty is expressed as a range over possible values.\n"
				+ "# 	'A' is the lower bound of the range defined. \n"
				+ "# 	    Because the parameters are considered to be kinetic constants,\n"
				+ "# 	    the lower bound must be larger than zero.\n"
				+ "# 	'B' is the upper bound of the range defined.\n"
				+ "# At least one parameter has to be defined.\n"
				+ "\n"
				+ "\n"
				+ "prior NAME=DISTRIBUTION\n"
				+ "# Optional\n"
				+ "# Optionally, a parameter NAME can be associated with a prior distribution.\n"
				+ "# 'DISTRIBUTION' can be one of the following:\n"
				+ "# 	uniform(A, B)    Uniform distribution specified in the internal [A, B]\n"
				+ "# 	exponential(MU)  Exponential distribution with mean parameter MU\n"
				+ "# 	gamma(K, THETA)  Gamma distribution with shape parameter K\n"
				+ "# 	                 and scale parameter THETA\n"
				+ "# 	normal(MU, S2)   Normal distribution with mean MU and variance S2\n"
				+ "# If no prior is explicitly declared, then a uniform prior will be assumed.\n"
				+ "\n"
				+ "\n"
				+ "robustnessType=TYPE\n"
				+ "# Optional (default value: average)\n"
				+ "# The type of robustness to be maximised in robust parameter synthesis.\n"
				+ "# 'TYPE' can be one of the following:\n"
				+ "#    average            The average robustness of the given property.\n"
				+ "#    averageGivenTrue   The conditional average robustness\n"
				+ "#                       given the property is true.\n"
				+ "#    averageGivenFalse  The conditional average robustness\n"
				+ "#                       given the property is false.\n"
				+ "\n"
				+ "\n"
				+ "# Simulation options\n"
				+ "# ==================\n"
				+ "\n"
				+ "endTime=NUMBER\n"
				+ "# Required\n"
				+ "# The time up to which the system will be simulated.\n"
				+ "\n"
				+ "\n"
				+ "runs=NUMBER\n"
				+ "# Optional (default value: 100)\n"
				+ "# The number of the independent simulations per parameter value.\n"
				+ "\n"
				+ "\n"
				+ "timeseriesEnabled=true|false\n"
				+ "# Optional (default value: true)\n"
				+ "# Indicates whether time-series will be used in model checking,\n"
				+ "# instead of full trajectories.\n"
				+ "# For large models, the use of time-series is recommended.\n"
				+ "\n"
				+ "\n"
				+ "timepoints=NUMBER\n"
				+ "# Optional (default value: 1000)\n"
				+ "# The number of time-points for which the state is recorded in a time-series.\n"
				+ "\n"
				+ "\n"
				+ "simulator=SIMULATOR\n"
				+ "# Optional (default value: ssa)\n"
				+ "# The simulation algorithm; Bio-PEPA and PRISM models support ssa only.\n"
				+ "# 'SIMULATOR' can be one of the following:\n"
				+ "# 	ssa      Gillespie's stochastic simulation\n"
				+ "# 	odes     The CTMC is approximated by Ordinary Differential Equations\n"
				+ "# 	hybrid   Hybrid approach that automatically switches between ssa and odes.\n"
				+ "# ODEs can be used with robust parameter synthesis only.\n"
				+ "# If used, the following options are overridden:\n"
				+ "# 'timeseriesEnabled=true' and 'runs=1'\n"
				+ "\n"
				+ "\n"
				+ "# Kernel options\n"
				+ "# ==============\n"
				+ "\n"
				+ "kernel=KERNEL\n"
				+ "# Optional (default value: rbfiso)\n"
				+ "# 'KERNEL' can be one of the following:\n"
				+ "# 	rbfiso  Isometric Radial Basis Function kernel.\n"
				+ "# 	        Its hyperparameters control the amplitude and the lengthscale.\n"
				+ "# 	rbfard  RBF kernel that supports Automatic Relevance Determination.\n"
				+ "# 	        Besides amplitude, its hyperparameters control the lengthscale\n"
				+ "# 	        for each parameter independently.\n"
				+ "\n"
				+ "\n"
				+ "amplitude=NUMBER\n"
				+ "# Optional (default value: 1)\n"
				+ "# The value of the amplitude hyperparameter of the GP Kernel.\n"
				+ "# It will be overridden if HYPERPARAMOPTIMISATION is true.\n"
				+ "\n"
				+ "\n"
				+ "lengthscale=NUMBER\n"
				+ "# Optional (default value: 1)\n"
				+ "# The value of the lengthscale hyperparameter of the GP Kernel.\n"
				+ "# If the kernel is set to 'rbfard', then a list of values must to be defined,\n"
				+ "# one for each parameter of the model to be explored.\n"
				+ "# It will be overridden if 'hyperparamOptimisation' is true.\n"
				+ "\n"
				+ "\n"
				+ "hyperparamOptimisation=true|false\n"
				+ "# Optional (default value: false)\n"
				+ "# Whether hyperparameters will be optimised wrt the marginal likelihood\n"
				+ "# of the data under the GP.\n"
				+ "# If yes, any other option regarding hyperparameters will be overridden.\n"
				+ "\n"
				+ "\n"
				+ "hyperparamOptimisationRestarts=NUMBER\n"
				+ "# Optional (default value: 3)\n"
				+ "# The number of attempts to optimise hyperparameters via local optimisation.\n"
				+ "\n"
				+ "\n"
				+ "useDefaultHyperparams=true|false\n"
				+ "# Optional (default value: false)\n"
				+ "# Indicates whether a simple heuristic is used to adjust the hyperparameters.\n"
				+ "# If yes, the user-specified kernel hyperparameters will be overridden.\n"
				+ "\n"
				+ "\n"
				+ "# GP data options\n"
				+ "# ===============\n"
				+ "\n"
				+ "initialObservations=NUMBER\n"
				+ "# Optional (default value: 50)\n"
				+ "# The size of the training set for the GP process.\n"
				+ "# The use of the training set depends on the mode:\n"
				+ "# 	inference   Initialisation of the GP optimisation algorithm.\n"
				+ "# 	smoothedmc  The initial evaluations of the satisfaction function.\n"
				+ "\n"
				+ "\n"
				+ "numberOfTestPoints=NUMBER\n"
				+ "# Optional (default value: 50)\n"
				+ "# The size of the test set for the GP process.\n"
				+ "# The use of the test set depends on the mode:\n"
				+ "# 	inference   Calculation the GP posterior at each step,\n"
				+ "# 	            in order to find a new potential global maximum.\n"
				+ "# 	smoothedmc  The points at which we explore the satisfaction function.\n"
				+ "\n"
				+ "\n"
				+ "testPointsFile=POINTS\n"
				+ "# Optional (default value: none)\n"
				+ "# 'POINTS' is a csv file that contains a NxD matrix, whose rows \n"
				+ "# correspond to N independent parameter combinations of D parameters.\n"
				+ "# Each row is a D-dimensional point in the parameter space.\n"
				+ "# For example, given N=2 and D=3, the contents could be:\n"
				+ "# 	0.1, 0.3, 2\n"
				+ "# 	1.3, 4.2, 1\n"
				+ "# If set, the 'numberOfTestPoints' option will be overridden.\n"
				+ "\n"
				+ "\n"
				+ "# GP optimisation options\n"
				+ "# =======================\n"
				+ "\n"
				+ "logspace=true|false\n"
				+ "# Optional (default value: false)\n"
				+ "# Whether log-normalisation is performed; \n"
				+ "# it should be true for non-negative search spaces only.\n"
				+ "\n"
				+ "\n"
				+ "maxIterations=NUMBER\n"
				+ "# Optional (default value: 1000)\n"
				+ "# GP optimisation will terminate if this number of iterations is reached,\n"
				+ "# regardless if it has converged or not.\n"
				+ "\n"
				+ "\n"
				+ "maxAddedPointsNoImprovement=NUMBER\n"
				+ "# Optional (default value: 100)\n"
				+ "# If this number of added points with no significant improvement is\n"
				+ "# reached, then GP optimisation is considered to have converged.\n"
				+ "# An improvement is considered significant if: \n"
				+ "# 	newValue > oldValue * improvementFactor\n"
				+ "# See also the 'improvementFactor' option.\n"
				+ "\n"
				+ "\n"
				+ "improvementFactor=NUMBER\n"
				+ "# Optional (default value: 1.01)\n"
				+ "# An improvement is considered significant if:\n"
				+ "# 	newValue > oldValue * improvementFactor\n"
				+ "# See also the 'maxAddedPointsNoImprovement' option.\n"
				+ "\n"
				+ "\n"
				+ "maxFailedAttempts=NUMBER\n"
				+ "# Optional (default value: 200)\n"
				+ "# If this number of failed attempts to find a new local optimum (for the\n"
				+ "# given upper quantile) is reached, then GP optimisation is considered to\n"
				+ "# have converged.\n"
				+ "\n"
				+ "\n"
				+ "beta=NUMBER\n"
				+ "# Optional (default value: 2)\n"
				+ "# The upper quantile, with which the search is directed, is calculated as:\n"
				+ "# 	beta * STDEV\n"
				+ "# where STDEV is the standard deviation as estimated by the GP.\n"
				+ "\n"
				+ "\n"
				+ "# GP Regression options\n"
				+ "# =====================\n"
				+ "\n"
				+ "noiseTerm=NUMBER\n"
				+ "# Optional (default value: 1)\n"
				+ "# Explicitly-defined variance of the Gaussian noise added for GP regression.\n"
				+ "\n"
				+ "\n"
				+ "noiseTermRatio=NUMBER\n"
				+ "# Optional (default value: 0.1)\n"
				+ "# The variance parameter of the Gaussian noise added to the GP will be\n"
				+ "# 	 noiseTermRatio * RANGE\n"
				+ "# where RANGE is the range of observations.\n"
				+ "\n"
				+ "\n"
				+ "useNoiseTermRatio=true|false\n"
				+ "# Optional (default value: false)\n"
				+ "# Whether the Gaussian noise added to the GP will be a ratio of the range\n"
				+ "# of observations in the training set. If not, then an explicitly-defined\n"
				+ "# variance will be used.\n"
				+ "\n"
				+ "\n"
				+ "heteroskedastic=true|false\n"
				+ "# Optional (default value: false)\n"
				+ "# Whether an heteroskedastic GP is assumed; if yes, then the variance for\n"
				+ "# each data-point is calculated by the objective function.\n"
				+ "\n"
				+ "\n"
				+ "# GP Classification options\n"
				+ "# =========================\n"
				+ "\n"
				+ "covarianceCorrection=NUMBER\n"
				+ "# Optional (default value: 1e-4)\n"
				+ "# A very small correction added to the diagonal of the Gram matrix to ensure\n"
				+ "# that it is positive definite. The default value is 1e-4.\n"
				+ "# Try increasing this if the Gram matrix appears to be non-positive definite.\n"
				+ "";
	}
}
