Hi.

The BOBYQA optimizer takes simple bound contraints into account:
  lowerBound(i) <= p(i) <= upperBound(i)    0 <= i < n
where "n" is the problem dimension.

The parent class ("BaseMultivariateRealOptimizer") currently mandates the
following "optimize" method:
---CUT---
    RealPointValuePair optimize(int maxEval,
                                FUNC f,
                                GoalType goalType,
                                double[] startPoint);
---CUT---

I think that the bounds are arguments that should be passed through that
method. The current method definition is a special case: no bound
constraints (or, equivalently, all lower bounds = -infinity, all upper
bounds = +infinity).

Thus, it seems that adding the following to the API
---CUT---
    RealPointValuePair optimize(int maxEval,
                                FUNC f,
                                GoalType goalType, 
                                double[] startPoint,
                                double[] lowerBounds,
                                double[] upperBounds);
---CUT---
is all there is to do in order to accomodate algorithms like BOBYQA.

I'll then add the boiler plate code the concrete base class
("BaseAbstractScalarOptimizer") so that subclasses can access the bounds,
similar to what is done for the "startPoint" argument.
The concrete implementation of the first "optimize" will just call the new
method with "lowerBounds" and "upperBounds" set to null.


Is that OK?


Best regards,
Gilles

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to