MathGroup Archive 2004

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

Search the Archive

Re: Newbie question about the behavior of NMaximize

  • To: mathgroup at smc.vnet.net
  • Subject: [mg50971] Re: [mg50955] Newbie question about the behavior of NMaximize
  • From: Daniel Lichtblau <danl at wolfram.com>
  • Date: Thu, 30 Sep 2004 04:52:16 -0400 (EDT)
  • References: <200409290715.DAA10645@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Roger Levy wrote:
> Hi,
> 
> I'm confused about the behavior of NMaximize.  It appears that some
> inequality constraints I am stipulating are not being obeyed; a
> stipulation that 0<p4<1 is still allowing a very small negative value
> of p4.  Is there something wrong with the way I'm stating inequality
> constraints below?  Any help much appreciated.
> 
> Best,
> 
> Roger Levy
> 
> In[11]:= y =  5*Log[p1*q]+10*Log[p4*q]+25*Log[(p1+p2+p3)*(1-q)+p3*q]+20*Log[(p4+p5+p6)*(1-q)+p6*q]
> 
> Out[11]= 5 Log[p1 q] + 10 Log[p4 q] + 25 Log[(p1 + p2 + p3) (1 - q) +
> p3 q] +
> 
> 
>>   20 Log[(p4 + p5 + p6) (1 - q) + p6 q]
> 
> 
> In[13]:= NMaximize[{y,0<p1<1,0<p2<1,0<p3<1,0<p4<1,0<p5<1,0<p6<1,p1+p2+p3+p4+p5+p6==1,0<q<1},{p1,p2,p3,p4,p5,p6,q}]
> 
> NMaximize::nnum:
>    The function value Indeterminate is not a number at
>                                                           -16
>     {p1, p2, p3, p4, p5, p6, q} = {0., 0., 0., -1.11022 10   , 0., 1.,
> 1.}.
> 
> Out[13]= NMaximize[{5 Log[p1 q] + 10 Log[p4 q] +
> 
> 
>>     25 Log[(p1 + p2 + p3) (1 - q) + p3 q] +
> 
> 
>>     20 Log[(p4 + p5 + p6) (1 - q) + p6 q], 0 < p1 < 1, 0 < p2 < 1,
> 
> 
>>    0 < p3 < 1, 0 < p4 < 1, 0 < p5 < 1, 0 < p6 < 1,
> 
> 
>>    p1 + p2 + p3 + p4 + p5 + p6 == 1, 0 < q < 1},
> 
> 
>>   {p1, p2, p3, p4, p5, p6, q}]

NMaximize really requires weak rather than strong inequalities. Looking 
at the logarithm terms, it is clear that certain variables should be 
constrained away from 0. Also, since they are nonnegative and sum to 1, 
they can all be constrained away from 1.

Finally, note that it is possible for points to slip outside the 
constraint regions (enforcement methods such as penalties are imperfect 
at best). Hence it is prudent to wrap Re[] around the objective function 
in case any log arguments become negative.

One can do all this as follows.

y = 5*Log[p1*q]+10*Log[p4*q]+25*Log[(p1+p2+p3)*(1-q)+p3*q]+
   20*Log[(p4+p5+p6)*(1-q)+p6*q];
eps = 10^(-8);
vars = {p1,p2,p3,p4,p5,p6,q};
constraints = Flatten[{Map[eps<=#<=1-eps&,{p1,p4,q}],
   Map[0<=#<=1-eps&,{p2,p3,p5,p6}],
   Apply[Plus,vars]==1}];

I get:

In[24]:= InputForm[NMaximize[{Re[y],constraints}, vars]]

Out[24]//InputForm=
{-86.80125018812635, {p1 -> 0.43749810007557227, p2 -> 0., p3 -> 0.,
   p4 -> 0.4375039905348629, p5 -> 0., p6 -> 0.,
   q -> 0.12499790938956486}}


Daniel Lichtblau
Wolfram Research



  • Prev by Date: Re: Newbie question about the behavior of NMaximize
  • Next by Date: finding roots tests=MIME_BOUND_NEXTPART,RCVD_IN_ORBS,RCVD_IN_OSIRUSOFT_COM, X_OSIRU_OPEN_RELAY version=2.55
  • Previous by thread: Re: Newbie question about the behavior of NMaximize
  • Next by thread: Implicit root structures in the Mandelbrot set