Message Boards Message Boards

0
|
5727 Views
|
2 Replies
|
0 Total Likes
View groups...
Share
Share this post:

Problem in finding minmum using FindMinimum

Posted 6 years ago

Hello All,

I have some complicated function as I have attached (please see enclosed file), I am trying to find minimum of these function in terms of some common parameters, but i am not able to do that, by try and error I can find some better values than FindMinimum, I don't know where I am making mistake or how I can make the code more efficient.

Could you please advise me in this respect"?

Thank you so much for your help in advance

POSTED BY: AM AM
2 Replies
Posted 6 years ago

FindMinimum might be getting caught in a local minimum. If you're looking for a global minimum, you could try using NMinimize instead of FindMinimum. FindMinimum only searches for a local minimum. NMinimize doesn't guarantee a global minimum, and it's slower, but it finds a better solution (333.399) in a little over a minute on my system (2011 laptop):

In[51]:= NMinimize[
 {Total[...] + ...,
  0.001 <= u <= 1,
  5 <= l0 <= 10,
  0.001 <= m0 <= 1,
  0.001 <= tc <= 3.7},
 {u, l0, m0, tc, c1, c2, c3, c4} 
 ]

Out[51]= {333.399, {u -> 0.206876, l0 -> 5.14977, m0 -> 0.260959, 
  tc -> 3.31495, c1 -> -0.183037, c2 -> -1.67226, c3 -> 2.09666, 
  c4 -> 0.623773}}

You can also specify different Methods for NMinimize to use. The above is the default ("NelderMead" for your problem). I tried the other three with their default options and got these results:

Method->"SimulatedAnnealing" did better (156.368) in about 6 minutes:

In[54]:= NMinimize[
  {Total[...] + ...,
   0.001 <= u <= 1,
   5 <= l0 <= 10,
   0.001 <= m0 <= 1,
   0.001 <= tc <= 3.7},
  {u, l0, m0, tc, c1, c2, c3, c4} ,
  Method -> "SimulatedAnnealing"
  ]

Out[54]= {156.368, {u -> 0.288779, l0 -> 7.41511, 
   m0 -> 0.350708, tc -> 3.31493, c1 -> -0.766559, c2 -> 0.490018, 
   c3 -> 0.128281, c4 -> -1.55951}}

Method->"DifferentialEvolution" did slightly better still (145.673), but it took 16 minutes:

In[53]:= NMinimize[
  {Total[...] + ...,
   0.001 <= u <= 1,
   5 <= l0 <= 10,
   0.001 <= m0 <= 1,
   0.001 <= tc <= 3.7},
  {u, l0, m0, tc, c1, c2, c3, c4} ,
  Method -> "DifferentialEvolution"
  ]

Out[53]= {145.673, {u -> 0.432289, l0 -> 6.63203, 
   m0 -> 0.289599, tc -> 3.31489, c1 -> 0.670817, c2 -> -0.835306, 
   c3 -> 10.1536, c4 -> -6.43342}}

Finally, Method->"RandomSearch" did the best (6.30799), but it ran for over an hour with the default options:

In[55]:= NMinimize[
  {Total[...] + ...,
   0.001 <= u <= 1,
   5 <= l0 <= 10,
   0.001 <= m0 <= 1,
   0.001 <= tc <= 3.7},
  {u, l0, m0, tc, c1, c2, c3, c4} ,
  Method -> "RandomSearch"
  ]

Out[55]= {6.30799, {u -> 0.620098, l0 -> 6.82731, 
   m0 -> 0.27329, tc -> 3.3149, c1 -> 3.81016, c2 -> -9.4462, 
   c3 -> 316., c4 -> -3155.41}}

You might be able to speed it up by using some of the other sub-options described at the bottom of this page: Numerical Nonlinear Global Optimization.

POSTED BY: Brad Chalfan
Posted 6 years ago

@Brad Chalfan Thank you so much, actually, I was looking for more efficient method. But at the end, I think the global minimum for this example should be find by try and error.

POSTED BY: AM AM
Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
Attachments
Remove
or Discard

Group Abstract Group Abstract