public final double doOperation() throws OperatorFailedException {
  int index;
  if (updateMap == null) {
    index=MathUtils.nextInt(parameter.getDimension());
  }
 else {
    index=updateMap.get(MathUtils.nextInt(updateMapSize));
  }
  double draw=(2.0 * MathUtils.nextDouble() - 1.0) * windowSize;
  double newValue=parameter.getParameterValue(index) + draw;
  final Bounds<Double> bounds=parameter.getBounds();
  final double lower=(lowerOperatorBound == null ? bounds.getLowerLimit(index) : Math.max(bounds.getLowerLimit(index),lowerOperatorBound));
  final double upper=(upperOperatorBound == null ? bounds.getUpperLimit(index) : Math.min(bounds.getUpperLimit(index),upperOperatorBound));
  if (condition == BoundaryCondition.reflecting) {
    newValue=reflectValue(newValue,lower,upper);
  }
 else   if (condition == BoundaryCondition.absorbing && (newValue < lower || newValue > upper)) {
    return 0.0;
  }
 else   if (newValue < lower || newValue > upper) {
    throw new OperatorFailedException("proposed value outside boundaries");
  }
  parameter.setParameterValue(index,newValue);
  return 0.0;
}

public final double doOperation ( ) throws OperatorFailedException { int index ; if ( updateMap == null ) { index = MathUtils . nextInt ( parameter . getDimension ( ) ) ; } else { index = updateMap . get ( MathUtils . nextInt ( updateMapSize ) ) ; } double draw = ( 2.0 * MathUtils . nextDouble ( ) - 1.0 ) * windowSize ; double newValue = parameter . getParameterValue ( index ) + draw ; final Bounds < Double > bounds = parameter . getBounds ( ) ; final double lower = ( lowerOperatorBound == null ? bounds . getLowerLimit ( index ) : Math . max ( bounds . getLowerLimit ( index ) , lowerOperatorBound ) ) ; final double upper = ( upperOperatorBound == null ? bounds . getUpperLimit ( index ) : Math . min ( bounds . getUpperLimit ( index ) , upperOperatorBound ) ) ; if ( condition == BoundaryCondition . reflecting ) { newValue = reflectValue ( newValue , lower , upper ) ; } else if ( condition == BoundaryCondition . absorbing && ( newValue < lower || newValue > upper ) ) { return 0.0 ; } else if ( newValue < lower || newValue > upper ) { throw new OperatorFailedException ( "proposed value outside boundaries" ) ; } parameter . setParameterValue ( index , newValue ) ; return 0.0 ; }
change the parameter and return the hastings ratio .
