Re: LatticeReduce problem
- To: mathgroup at smc.vnet.net
- Subject: [mg59040] Re: [mg59005] LatticeReduce problem
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Wed, 27 Jul 2005 01:25:34 -0400 (EDT)
- References: <200507260803.EAA00441@smc.vnet.net> <DCE7E3C8-B833-4DF0-972B-2D6B98982449@mimuw.edu.pl> <p06210200bf0c2f45282c@[10.0.1.2]>
- Sender: owner-wri-mathgroup at wolfram.com
On 26 Jul 2005, at 20:39, dto_mba at skynet.be wrote:
>>
>> A more serious problem is your function dln will complain when
>> called with symbolic coefficients but that is what will happen
>> when you use NMinimize, since NMinimize evaluates its arguments.
>
> It is not clear to me how to overcome this problem.
Defining dln like this
dln[{x__?NumericQ}, { y__?NumericQ}]:=
avoids it. Unless both arguments are lists of numerics dln is not
evluated but just waits for NMinimize to supply values for its
arguments.
>> Another problem is that in spite of the constraint NMinimize will
>> attempt to compute dln for real values of x1,x2,x3 and x4 and
>> LatticeReduce is not defined non-rational vectors. So I have re-
>> written dln in the form:
>>
>> dln[{x__?NumericQ}, { y__?NumericQ}] :=
>> Norm[ LatticeReduce[{IntegerPart /@ {x}, IntegerPart /@ {y}}]]
>
> Does NMinimize round the real values before it calculates the
> objective function value?
No, I think it actually tries to compute the value of the objective
functions for real number arguments and and uses penalties when the
constraint is violated. According to the documentation with the
default method setting:
If there are integer variables, or if the head of the objective
function is not a numeric function, DifferentialEvolution is used.
DifferentialEvolution has as one of its options "PenaltyFunction"
which is:
function applied to constraints to penalize invalid points
That implies however that "invalid points" will be used during
evaluation so the function has to make sense on such points to. That
is why I used IntegerPart.
>
>>
>> We also will fact the problem of dealing with the zero vector since
>>
>>
>> LatticeReduce[{{0,0},{0,0}}]
>>
>> {}
>
>>
>> Finally, the method NelderMead does not seem to work well in this
>> case, but if we run the code with the default Method setting we
>> now get:
>
> Interesting observation. I have to test it with my problem
As I mentioned above: DifferentialEvolution seems to be the method
most effective when dealing with integer problems, at lest accoriding
to the documentation.
Andrzej Kozlowski
- References:
- LatticeReduce problem
- From: dto_mba@skynet.be
- LatticeReduce problem