MathGroup Archive 2007

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Maximize with Integer constraints

  • To: mathgroup at smc.vnet.net
  • Subject: [mg78247] Re: [mg78227] Maximize with Integer constraints
  • From: Adam Strzebonski <adams at wolfram.com>
  • Date: Wed, 27 Jun 2007 05:17:25 -0400 (EDT)
  • References: <200706260833.EAA05703@smc.vnet.net> <49779893-9F18-4F8C-B0D8-2EB6F23313A7@mimuw.edu.pl>
  • Reply-to: adams at wolfram.com

Andrzej Kozlowski wrote:
> 
> On 26 Jun 2007, at 17:33, sdw wrote:
> 
>>
>> given entry #1:
>>
>>
>> Maximize[
>> {x1 + x2 + x3 + x4,
>> Element[x1 | x2 | x3 | x4 , Integers] &&
>> 0 <= x1 <= 5.6 &&
>> 0 <= x2 <= 8.6 &&
>> 0 <= x3 <= 9.7 &&
>> 4.0 <= x4 <= 22.4 }, {x1, x2, x3, x4}]
>>
>> {4., {x1 -> 0, x2 -> 0, x3 -> 0, x4 -> 4}}
>>
>> note -  zeros for answers
>> entry #2:
>> Maximize[
>> {x1 + x2 + x3 + x4,
>> Element[x1 | x2 | x3 | x4 , Integers] &&
>> 0 <= x1 <= 5.6 &&
>> 0 <= x2 <= 8.6 &&
>> 0 <= x3 <= 9.7 &&
>> 4.1 <= x4 <= 22.4 }, {x1, x2, x3, x4}]
>>
>> {44., {x1 -> 5, x2 -> 8, x3 -> 9, x4 -> 22}}
>>
>> note good answers...
>> only difference is 4.1 vs. 4 in constraints
>> any ideas what is going on?
>>
>> thanks,
>>
>> sdw
>>
>>
> 
> This is probably a bug, but in any case, since Maximize uses exact 
> algebraic methods it is not a good idea to have approximate numbers in 
> input. Rationalizing your first input will produce the right answer:
> 
> Maximize[{x1 + x2 + x3 + x4, Element[x1 | x2 | x3 | x4, Integers] &&
>        Rationalize[0 <= x1 <= 5.6 && 0 <= x2 <= 8.6 && 0 <= x3 <= 9.7 &&
>            4. <= x4 <= 22.4]}, {x1, x2, x3, x4}]
>  {44, {x1 -> 5, x2 -> 8, x3 -> 9, x4 -> 22}}
> 
> Andrzej Kozlowski
> 

When inexact numbers are present in the input, Maximize simply passes
the problem to NMaximize. NMaximize uses numeric methods and is not
guaranteed to find the global maximum (though in this example it
probably should do better). To use exact optimization methods you need
to make sure that the input given to Maximize is exact.

As Andrzej Kozlowski has shown, inexact expressions can be converted to
exact ones using Rationalize. An issue worth remembering here is that
one-argument Rationalize converts only inexact numbers that are "close"
to rationals.

In[1]:= Rationalize[{0.5, 3.1415927}]

          1
Out[1]= {-, 3.14159}
          2

Rationalize[expr, 0] converts all inexact numbers in expr.

In[2]:= Rationalize[{0.5, 3.1415927}, 0]

          1  31415927
Out[2]= {-, --------}
          2  10000000


Best Regards,

Adam Strzebonski
Wolfram Research



  • Prev by Date: Re: Maximize with Integer constraints
  • Next by Date: Re: Plot in a Do loop does nothing
  • Previous by thread: Re: Maximize with Integer constraints
  • Next by thread: Re: Maximize with Integer constraints