On Thu, Jan 17, 2013 at 3:52 PM, Gilles Sadowski <
gil...@harfang.homelinux.org> wrote:

> On Thu, Jan 17, 2013 at 02:28:56PM +0100, Thomas Neidhart wrote:
> > Hi,
> >
> > by investigating a recent issue (MATH-930), I discovered that the newly
> > introduced LinearConstraintSet stores the constraints internally in a
> > HashSet.
> > This leads to undeterministic behavior as the iteration order of
> > constraints is not fixed (especially between different JRE versions).
> >
> > TBH, I never reviewed this change and I am a bit surprised to see it.
> Imho
> > there is no need to have a Set here, and would prefer to change this to a
> > list implementation.
>
> -1
> Unless the order of iteration is a requirement of the mathematical
> description of the algorithm.
> If so:
>  * This requirement should appear prominently in the Javadoc.[1]
>  * Please discard the rest of this mail.
> If not, then the order is only an implementation detail (IOW, with infinite
> precision, the solution would not change with different iteration orders),
> I would be cautious to rely on a specific implementation of the container
> used to store input data.
>
> Maybe that the behaviour described in MATH-930 indicates an inherent
> weakness of the algorithm (or too stringent requirements); if so, the
> better
> solution is probably not to rely on whether side-effects are visible or
> not.
>
> Also, I note that in the (deprecated) package
> "o.a.c.m.optimization.linear",
> the constraints are passed to "optimize" as a
>   Collection<LinearConstraint>
> IIUC, the same behaviour could thus be produced by a user who'd call
> optimize several times, passing the same set of constraints but stored in a
> different order in the Collection.
>

Hi Gilles,

yes I understand your concerns, and the problem is two-fold:

 * make the algorithm behave deterministic in all environments
   (I do not want to spend each time 1 day debugging why it works in one
case or another)

 * fix the obvious numerical stability problem with certain ordering of
constraints

Although before the parameter was passed as a Collection, most people
actually used a List or something similar.
At least you had control over it, now it is just a HashSet, inside a CM
class which you can not control.

So I would really prefer to at least change it to a LinkedHashSet with
deterministic iteration order, and investigate further the other problem.

Thomas

Reply via email to