public RotatedProblem(Problem problem,RealMatrix rotation){
  super();
  this.problem=problem;
  this.rotation=rotation;
  Solution solution=problem.newSolution();
  center=new double[getNumberOfVariables()];
  lowerBounds=new double[getNumberOfVariables()];
  upperBounds=new double[getNumberOfVariables()];
  for (int i=0; i < getNumberOfVariables(); i++) {
    RealVariable variable=(RealVariable)solution.getVariable(i);
    center[i]=(variable.getLowerBound() + variable.getUpperBound()) / 2.0;
    lowerBounds[i]=Math.sqrt(2.0) * (variable.getLowerBound() - center[i]);
    upperBounds[i]=Math.sqrt(2.0) * (variable.getUpperBound() - center[i]);
  }
}

public RotatedProblem ( Problem problem , RealMatrix rotation ) { super ( ) ; this . problem = problem ; this . rotation = rotation ; Solution solution = problem . newSolution ( ) ; center = new double [ getNumberOfVariables ( ) ] ; lowerBounds = new double [ getNumberOfVariables ( ) ] ; upperBounds = new double [ getNumberOfVariables ( ) ] ; for ( int i = 0 ; i < getNumberOfVariables ( ) ; i ++ ) { RealVariable variable = ( RealVariable ) solution . getVariable ( i ) ; center [ i ] = ( variable . getLowerBound ( ) + variable . getUpperBound ( ) ) / 2.0 ; lowerBounds [ i ] = Math . sqrt ( 2.0 ) * ( variable . getLowerBound ( ) - center [ i ] ) ; upperBounds [ i ] = Math . sqrt ( 2.0 ) * ( variable . getUpperBound ( ) - center [ i ] ) ; } }
decorates the specified problem , creating a rotated instance using the specified rotation matrix .
