Re: Some linear constraints seem to be ignored in function
- To: mathgroup at smc.vnet.net
- Subject: [mg132369] Re: Some linear constraints seem to be ignored in function
- From: Bob Hanlon <hanlonr357 at gmail.com>
- Date: Sun, 23 Feb 2014 02:56:09 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: l-mathgroup@wolfram.com
- Delivered-to: mathgroup-outx@smc.vnet.net
- Delivered-to: mathgroup-newsendx@smc.vnet.net
- References: <20140222080533.BDB3B6A13@smc.vnet.net>
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 (64-bit) (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 at gmail.com>wrote: > I'm trying to minimize a non-linear 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.87777-4.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. > >
- References:
- Some linear constraints seem to be ignored in function NMinimize with
- From: Daniel Stariolo <daniel.stariolo@gmail.com>
- Some linear constraints seem to be ignored in function NMinimize with