
Re: Some linear constraints seem to be ignored in function
Posted:
Feb 23, 2014 2:45 AM


I don't know why the search methods go outside the constraints, but you can get better results using a Method other than the default of Automatic.
$Version
"8.0 for Mac OS X x86 (64bit) (October 5, 2011)"
Clear[ff, T, J1, J2]
ff[lxw_, lwz_, c_, d_] = J1 (lxw + lwz)  2 J2 c + T (Log[2]  1/2 (1  lxw) Log[(1  lxw)/4]  1/2 (1 + lxw) Log[(1 + lxw)/4]  1/2 (1  lwz) Log[(1  lwz)/4]  1/2 (1 + lwz) Log[(1 + lwz)/4] + 1/2 (1  d) Log[(1  d)/16] + 1/8 (1 + 2 c + d  2 lwz  2 lxw)* Log[1/16 (1 + 2 c + d  2 lwz  2 lxw)]);
cons = And @@ Cases[ff[lxw, lwz, c, d],
Log[x_] > x > 0, Infinity] // Simplify
d < 1 && lwz < 1 && 1 + lwz > 0 && 1 + 2 c + d > 2 (lwz + lxw) && lxw < 1 && 1 + lxw > 0
T = 10; J1 = 1; J2 = 2/10;
Off[NMinimize::nrnum]
NMinimize[{ff[lxw, lwz, c, d], cons}, {lxw, lwz, c, d}]
{4.91624, {c > 0.94525, d > 0.315535, lwz > 0.901231, lxw > 0.191668}}
NMinimize[{ff[lxw, lwz, c, d], cons}, {lxw, lwz, c, d}, Method > "DifferentialEvolution"]
{12.5767, {c > 0.236399, d > 0.976973, lwz > 0.68191, lxw > 0.939971}}
Bob Hanlon
On Sat, Feb 22, 2014 at 3:05 AM, Daniel Stariolo <daniel.stariolo@gmail.com>wrote:
> I'm trying to minimize a nonlinear function of four variables with some > linear constraints. Mathematica 8 is unable to find a good solution giving > complex values of the function at some point in the iteration. This implies > that one or some contraints are not being enabled in the process. Is this a > bug or limitation of the optimization function ? > > Function to minimize is > > ff[lxw_, lwz_, c_, d_] :=  J1 (lxw + lwz)  2 J2 c + > T (Log[2]  1/2 (1  lxw) Log[(1  lxw)/4]  > 1/2 (1 + lxw) Log[(1 + lxw)/4]  > 1/2 (1  lwz) Log[(1  lwz)/4]  > 1/2 (1 + lwz) Log[(1 + lwz)/4] + 1/2 (1  d) Log[(1  d)/16] + > 1/8 (1 + 2 c + d  2 lwz  2 lxw) Log[ > 1/16 (1 + 2 c + d  2 lwz  2 lxw)]) > > where > > T = 10; > J1 = 1; > J2 = 0.2; > > are constant parameters. Then I try > > NMinimize[{ff[lxw, lwz, c, d], > 2 c + d  2 lwz  2 lxw >= 0.999 && 0.999 <= lxw <= > 0.999 && 0.999 <= lwz <= 0.999 && 0.999 <= c <= 0.999 && > d <= 0.9999}, {lxw, lwz, c, d}] > > with the result > > NMinimize::nrnum: "The function value 5.877774.87764 I is not a real > number at {c,d,lwz,lxw} = {0.718817,1.28595,0.69171,0.932461}." > > I would appreciate if someone can give a hint at what is happening here. > >

