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.


Best regards,
Gilles

[1] So that developers are aware of the limitations and can choose
    appropriate data structures.

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

Reply via email to