Hi,

In my view there are two related but separate issues: (1) What should we do for 
3.1 release, and (2) How do we want to design the optimization package for the 
future, such that it is easily extended to linear and non-linear constraints, 
sparse matrix operations, etc.

In regards to (1),
I feel that designing a proper API for the future is a very important problem 
that would take a while, to not only implement and test, but to also come to an 
agreement. This future API should not be limited by the backwards capability 
with 3.0, but should instead be careful designed from the ground up. That is 
why I propose that we do not let these issues set back the much needed release 
of 3.1. For example in 3.0 CMAES bound constraints are actually broken. This 
should be patched ASAP. There are new features. While my combined function 
issue is important, it is a new feature, and by no means critical. In my view 
it is better to leave the Function classes as they are (or at least similar to 
what they are), so the user is comfortable with the interface.

In regards to (2),
Here are some things that we need to think about
1) How to properly design the function interfaces for the optimization 
packages, such that they address my combined value and gradient computation, 
but also have proper OO structure such that a function that is used in a 
"value+gradient" optimization can also be used for a no-gradient direct 
optimization? What wrapper classes should we provide for the user? Should this 
functions be also comparable with analysis package (or some other package), or 
would optimization performance suffer? How should these values be stored so 
they can be efficiently used by the optimizer without significant amount of 
memory copies.
2) Changing the return class for "optimization" function. Like I mentioned 
before, I don't think the optimization class should keep state on the previous 
optimization. All RMS, chi^2 values are part of the optimization result and not 
part of the optimizer. An example of such use is where a user computed values 
from different initial points and then compares results.
3) It might *not* be a good idea to have constraints be given as part of 
options into an "optimization" function. First, different implementations have 
different limitations, so one method might take non-linear constraints, another 
doesn't. This should be explicitly visible through the constructors of the 
class. Second, linear constraints,and probably other constrains require 
pre-processing before use. For example, if you have linear equality constraints 
in an optimization, you need to extract the null space using QR or SVD. If you 
have a lot of constraints this process is expensive, and should be amortized 
for calls with same constrains but different initial points. There are probably 
other examples of this. We should think and discuss this, before jumping to a 
design.

It is very unfortunate that there is a lack of man power to improve the 
algorithms. I am very sad to say, but I have barely time to even reply to these 
emails.

I look forward to hearing what other people think,
Konstantin

On Dec 3, 2012, at 8:16 AM, Gilles Sadowski <gil...@harfang.homelinux.org> 
wrote:

> On Sat, Dec 01, 2012 at 04:58:30PM -0500, Konstantin Berlin wrote:
>>> 
>>> I would propose to simply revert my changes on the optimization package 
>>> and prepare for a reorganization for 4.0. I understand I focused only on
>>> the type of problems Gilles and myself routinely use, i .e. small size 
>>> problems 
>>> where the cost of the evaluation is several orders of magnitude larger than 
>>> the
>>> data copying. I forgot the dual case with  very large data sets. I 
>>> apologize for that. 
>>> 
>>> When 3.1 will be out, we will have to solve this so both  cases are handled 
>>> efficiently, 
>>> and this would probably be implemented in 4.0.
>>> 
>>> Does this seems reasonable? 
>>> 
>>> Best regards 
>>> Luc
>>> 
>> 
>> Don't blame yourself, its hard to think of all possible uses.
> 
> Indeed. And it is also hard to get a design right without being guided by
> actual use-cases.
> Thus... [see below]
> 
>> I think reverting back to original interface is the best choice for 3.1.
> 
> I don't understand (cf. my other post); in the "orignal" interface (i.e.
> "DifferentiableMultivariateVectorFunction"), you have exactly the same
> problem as with what Luc proposed earlier: 2 separate functions, one for
> the value and one for the Jacobian.
> Please indicate whether my proposal is better from this point-of-view: One
> function call will return an array of "value and gradient" objects, and
> references to those can be accessed directly inside the optimizer's code
> to get the Jacobian data, without copying.
> 
>> In the future it is worth finding and adding "standard" industry benchmarks 
>> to the tests.
> 
> ... this issue came up several times, but was not able to gather the
> necessary "human-power": see
>  https://issues.apache.org/jira/browse/MATH-678
> and
>  https://issues.apache.org/jira/browse/MATH-763
> 
>> 
>> Speaking of optimizers... Would it not be better to move all the getRMS, 
>> getChiSquared into
>> the return class, along with all other information, like how many iterations 
>> it took, function
>> evaluations, etc? That is how I find it more natural to use, so I end up 
>> creating a wrapper.
>> These properties are not properties of the optimizer but are properties of 
>> the specific
>> optimization evaluation of the function with the specific initial value.
> 
> As always, patches are welcome that practically demonstrate the improvement.
> 
> 
> Regards,
> Gilles
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
> 


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

Reply via email to