MathGroup Archive 2007

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

Search the Archive

Re: [TS 34965]--Re:large input to NMinimize causes NMinimize:"bcons" along with Less:nord ... and I don't think it should

  • To: mathgroup at smc.vnet.net
  • Subject: [mg72581] Re: [TS 34965]--Re:large input to NMinimize causes NMinimize:"bcons" along with Less:nord ... and I don't think it should
  • From: "Chris Chiasson" <chris at chiasson.name>
  • Date: Thu, 11 Jan 2007 02:40:28 -0500 (EST)
  • References: <200701101730.l0AHU1De026015@localhost.localdomain>

On Wed, 10 Jan 2007 17:30:01 UT, Tom Zeller wrote:
> Chris,
>
> This one was just assigned to me yesterday.  I apologize for the delay
> in responding.

I wonder what they were doing with my email in the mean time.

> The first thing I tried was to get a simpler version of the code.
>
> In[17]:=
> NMinimize[{b[1]*h[1],-1+Sqrt[(9000000000000*Piecewise[{{Sqrt[-200/3+h[1]^2]/2,\
> Im[Sqrt[-200+3*h[1]^2]]\[Equal]0&&Sqrt[-600+9*h[1]^2]<3*h[1]},{h[1]/2,Im[
>                         Sqrt[-200+3*h[1]^2]]
>                               ¡Ù 0&&Sqrt[-600+9*h[1]^2]>=3*h[1]}}]^2)]¡Ü0},{b[
>                           1],h[1]}]

For some reason, I am seeing non ASCII characters (¡Ù,¡Ü) in this
command. Something must have happened with the email. :-[

I have also been experimenting with reducing the complexity of the
argument. As I mentioned earlier, the Piecewise statements were
created with

Piecewise[{{y,Im[y]==0&&y<h[i]/2}},h[i]/2]

where y has a square root in it. I have taken another look at the code
and I realized that when the argument to the square root (inside y) is
positive, that y is always less than h[i]/2 - so that comparison may
be dropped. Furthermore, I wrote a Cases statement for y that captures
arg in Power[arg_,1/2] and then outputs arg>0 as the Piecewise
condition. This eliminated the problems with NMinimize::bcons, until I
increased the number of segments that I was trying to handle (the
maximum value of i, which was originally 5, then 6, 7, 8, & 9) to 10
-- then NMinimize::bcons came back. Anyway, there is some kind of
problem that happens when the complexity of the constraints is too
high.

I guess the developer(s) that wrote the routines might be able to
diagnose what is going wrong, but I am giving up for now and going
back to filtering my NMinimize argument.

> Then I tried to work with the argument to eliminate the invalid comparison (thinking that that may be getting in the way.)  I tried arbitrary values and found:

By the way, both Piecewise and And have the attribute HoldAll. As far
as I can tell, Piecewise evaluates conditions in order until one is
True - and then evaluates the corresponding value entry. And evaluates
conditions in order, stopping if it ever encounters a False. This
means that, barring problems where the complex magnitude was below the
threshold specified by Experimental`$EqualTolerance, Im[y]==0&&y<h@i/2
should not have produced Less::nord.

> Wrapping the Sqrt's in Im did the trick (but may mess unacceptably with what you are trying to do):
>
> In[21]:=
> -1+Sqrt[(9000000000000*Piecewise[{{Sqrt[-200/
>           3+h[1]^2]/2,Im[Sqrt[-200+3*h[1]^2]]\[Equal]0&&Im[
>                         Sqrt[-600+9*h[1]^2]]<3*h[
>                         1]},{h[1]/2,Im[Sqrt[-200+3*h[1]^2]]¡Ù 0&&Im[
>                       Sqrt[-600+9*h[
>                       1]^2]]>=3*h[1]}}]^2)]/. {b[1]\[Rule]1 ,h[1]\[Rule]1}
>
> Out[21]=
> 1499999
>
>
> Still the bcons error appears with/without the Method setting:
>
> In[25]:=
> NMinimize[{b[1]*h[1],-1+Sqrt[(9000000000000*Piecewise[{{Sqrt[-200/3+h[1]^2]/2,\
> Im[Sqrt[-200+3*h[1]^2]]\[Equal]0&&Im[Sqrt[-600+9*h[1]^2]]<3*h[1]},{h[1]/2,Im[
>                     Sqrt[-200+3*h[1]^2]]¡Ù 0&&Im[Sqrt[-600+9*h[1]^2]]>=3*h[
>                         1]}}]^2)]},{b[1],h[1]}]
>
> From In[25]:=
> \!\(\*
>   RowBox[{\(NMinimize::"bcons"\), \(\(:\)\(\ \)\), "\<\"The following
>       constraints are not
>       valid: \\!\\({\\(\\(-1\\)\\) + \\(\\(3000000\\\\ \\@\\(\\((\\(\
> \[Piecewise] \\*GridBox[{{\\(Times[\\(\\(\[LeftSkeleton] 2 \
> \[RightSkeleton]\\)\\)]\\), \\({\\(\[LeftSkeleton] 2 \
> \[RightSkeleton]\\)}\\)}, {\\(Times[\\(\\(\[LeftSkeleton] 2 \
> \[RightSkeleton]\\)\\)]\\), \\({\\(\[LeftSkeleton] 2 \
> \[RightSkeleton]\\)}\\)}}, ColumnAlignments -> {Left}, ColumnSpacings -> 1.2]\
> \\))\\)\\^2\\)\\)\\)}\\). Constraints should be equalities, inequalities, or \
> domain specifications involving the variables. \\!\\(\\*ButtonBox[\\\"More¡­\\\
> \", ButtonStyle->\\\"RefGuideLinkText\\\", ButtonFrame->None, \
> ButtonData:>\\\"NMinimize::bcons\\\"]\\)\"\>"}]\)
>
> Out[25]=
> \!\(\*
>   RowBox[{"NMinimize", "[",
>     RowBox[{
>       RowBox[{"{",
>         RowBox[{\(b[1]\ h[1]\), ",",
>           RowBox[{\(-1\), "+",
>             RowBox[{"3000000", " ",
>               SqrtBox[
>                 SuperscriptBox[
>                   RowBox[{"(",
>                     RowBox[{"\[Piecewise]", GridBox[{
>                           {\(1\/2\ \@\(\(-\(200\/3\)\) + h[
>               1]\^2\)\), \(Im[\@\(\(-200\) + 3\ h[1]\^2\)] \[Equal] 0 &&
>                 Im[\@\(\(-600\) + 9\ h[1]\^2\)] < 3\ h[1]\)},
>                           {\(h[
>                   1]\/2\), \(Im[\@\(\(-200\) + 3\ h[1]\^2\)] ¡Ù 0 &&
>                     Im[\@\(\(-600\) + 9\ h[1]\^2\)] ¡Ý 3\ h[1]\)}
>                           },
>                         ColumnSpacings->1.2,
>
>                                       ColumnAlignments->{Left}]}], ")"}], \
> "2"]]}]}]}], "}"}], ",", \({b[1], h[1]}\)}], "]"}]\)
>
> In[26]:=
> NMinimize[{b[1]*h[1],-1+Sqrt[(9000000000000*Piecewise[{{Sqrt[-200/3+h[1]^2]/2,\
> Im[Sqrt[-200+3*h[1]^2]]\[Equal]0&&Im[Sqrt[-600+9*h[1]^2]]<3*h[1]},{h[1]/2,Im[
>                     Sqrt[-200+3*h[1]^2]]¡Ù 0&&Im[Sqrt[-600+9*h[1]^2]]>=3*h[
>                         1]}}]^2)]},{b[
>                       1],h[1]},Method\[Rule]"DifferentialEvolution"]
>
> From In[26]:=
> \!\(\*
>   RowBox[{\(NMinimize::"bcons"\), \(\(:\)\(\ \)\), "\<\"The following
>       constraints are not
>       valid: \\!\\({\\(\\(-1\\)\\) + \\(\\(3000000\\\\ \\@\\(\\((\\(\
> \[Piecewise] \\*GridBox[{{\\(Times[\\(\\(\[LeftSkeleton] 2 \
> \[RightSkeleton]\\)\\)]\\), \\(And[\\(\\(\[LeftSkeleton] 2 \
> \[RightSkeleton]\\)\\)]\\)}, {\\(Times[\\(\\(\[LeftSkeleton] 2 \
> \[RightSkeleton]\\)\\)]\\), \\(And[\\(\\(\[LeftSkeleton] 2 \
> \[RightSkeleton]\\)\\)]\\)}}, ColumnAlignments -> {Left}, ColumnSpacings -> \
> 1.2]\\))\\)\\^2\\)\\)\\)}\\). Constraints should be equalities, inequalities, \
> or domain specifications involving the variables. \
> \\!\\(\\*ButtonBox[\\\"More¡­\\\", ButtonStyle->\\\"RefGuideLinkText\\\", \
> ButtonFrame->None, ButtonData:>\\\"NMinimize::bcons\\\"]\\)\"\>"}]\)
>
> Out[26]=
> \!\(\*
>   RowBox[{"NMinimize", "[",
>     RowBox[{
>       RowBox[{"{",
>         RowBox[{\(b[1]\ h[1]\), ",",
>           RowBox[{\(-1\), "+",
>             RowBox[{"3000000", " ",
>               SqrtBox[
>                 SuperscriptBox[
>                   RowBox[{"(",
>                     RowBox[{"\[Piecewise]", GridBox[{
>                           {\(1\/2\ \@\(\(-\(200\/3\)\) + h[
>               1]\^2\)\), \(Im[\@\(\(-200\) + 3\ h[1]\^2\)] \[Equal] 0 &&
>                 Im[\@\(\(-600\) + 9\ h[1]\^2\)] < 3\ h[1]\)},
>                           {\(h[
>                   1]\/2\), \(Im[\@\(\(-200\) + 3\ h[1]\^2\)] ¡Ù 0 &&
>                     Im[\@\(\(-600\) + 9\ h[1]\^2\)] ¡Ý 3\ h[1]\)}
>                           },
>                         ColumnSpacings->1.2,
>
>                                       ColumnAlignments->{Left}]}], ")"}], \
> "2"]]}]}]}], "}"}], ",", \({b[1], h[1]}\),
>                               ",", \(Method \[Rule] \
> "DifferentialEvolution"\)}], "]"}]\)
>
> My thought is that NMinimize just does not see Piecewise as valid which is in accordance with the message.  It may be that the problem needs to be recast to reflect that limitation.  Let me know what if anything, I have missed and I am just picking my way at this point.
>
>
> Tom Zeller
> Wolfram Research Technical Support

I don't think you missed anything. :-[

It would be nice if there were options to progressively disable the
"structure optimization" (or whatever it is trying to do) and someone
were to document them.

> --------------
> By the way, the an earlier issue that I passed along to Quality control
>
> "NMinimize calls Attributes which generates ssle error for non argument when real argument of function is tested by NumberQ. "
>
> has been reported as fixed in development versions of V6.
> --------------

If[$UserName==="Chris",Off[Attributes::ssle]]
<OriginalCode/>
If[$UserName==="Chris",On[Attributes::ssle]]

Just kidding :-]

-- 
http://chris.chiasson.name/


  • Prev by Date: Re: ListDimension function
  • Next by Date: Re: ContainsQ ?
  • Previous by thread: Re: sparsearray and its nonempty cells
  • Next by thread: Re: question on Plot and Show plus Axis Labels