public List<ParameterType> getParameterTypes() {
List<ParameterType> types = super.getParameterTypes();
types.add(new ParameterTypeInt(PARAMETER_NUM_FACTORS, "Number of latent factors. Range: integer; 1-+?; default: 10", 1, Integer.MAX_VALUE, 10, true));
types.add(new ParameterTypeDouble(PARAMETER_BIAS_REG, "Bias regularization parameter. Range: double; 0-+?; default: 0", 0, Double.MAX_VALUE, 0, true));
types.add(new ParameterTypeDouble(PARAMETER_REG_U, "User regularization parameter. Range: double; 0-+?; default: 0.025", 0, Double.MAX_VALUE, 0.025, true));
types.add(new ParameterTypeDouble(PARAMETER_REG_I, "Item regularization parameter. Range: double; 0-+?; default: 0.025", 0, Double.MAX_VALUE, 0.025, true));
types.add(new ParameterTypeDouble(PARAMETER_REG_J, "Negative item regularization parameter. Range: double; 0-+?; default: 0.025", 0, Double.MAX_VALUE, 0.025, true));
types.add(new ParameterTypeInt(PARAMETER_NUM_ITER, "Number of iterations. Range: integer; 1-+?; default: 30", 1, Integer.MAX_VALUE, 30, false));
types.add(new ParameterTypeDouble(PARAMETER_LEARN_RATE, "Learning rate of algorithm. Range: double; 0-+?; default: 0.05", 0, Double.MAX_VALUE, 0.05, false));
types.add(new ParameterTypeDouble(PARAMETER_INIT_MEAN, "Initial mean. Range: double; 0-+?; default: 0", 0, Double.MAX_VALUE, 0, true));
types.add(new ParameterTypeDouble(PARAMETER_INIT_STDEV, "Initial stdev. Range: double; 0-+?; default: 0.1", 0, Double.MAX_VALUE, 0.1, true));
types.add(new ParameterTypeInt(PARAMETER_FAST_SAMPLING, "Fast sampling memory limit, in MiB. Range: integer; 1-+?; default: 1024", 1, Integer.MAX_VALUE, 1024, true));
types.add(new ParameterTypeBoolean(PARAMETER_BOLD_DRIVER, "Use bold driver heuristics for learning rate adaption. Range: boolean; default: false", false, true));
return types;