MathGroup Archive 2009

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

Search the Archive

Re: Optimizing a function with a list as a parameter

  • To: mathgroup at smc.vnet.net
  • Subject: [mg103091] Re: [mg103081] Optimizing a function with a list as a parameter
  • From: Leonid Shifrin <lshifr at gmail.com>
  • Date: Tue, 8 Sep 2009 05:55:08 -0400 (EDT)
  • References: <200909070636.CAA03978@smc.vnet.net>

Hi Mike,

If I understand correctly what you want, I suggest to write your own
<maximize> function,
for example as follows:

In[1] =
ClearAll[maximize, var];
Protect[var];
maximize[f_, argNum_Integer?Positive, constraintsF_] :=
  With[{vars = Array[var, {argNum}]},
   Maximize[{f[vars], constraintsF @@ vars}, vars]];

The head <var> is used to index variables in the result. The first argument
is the  function
you want to minimize (its name if it is DownValue - based, or entire thing
if it is
a pure function), the second is the length of the list passed to <f>, and
the last is a function
to generate a list of constraints.

Here is an example of a function with several maxima:

In[2] =
ClearAll[f];
f[x_List] := (x - 1)^4 - 5 (x - 2)^4 + (x - 3)^4;

We maximize it for different number of arguments and sets of constraints:

In[3] = maximize[f, 2, {} &]

Out[3] = {14,{var[1]->2-Sqrt[2],var[2]->2-Sqrt[2]}}

In[4] = maximize[f, 4, {#1 + #2 < 3} &]

Out[4] = {14, {var[1] -> 2 - Sqrt[2], var[2] -> 2 - Sqrt[2],
  var[3] -> 2 - Sqrt[2], var[4] -> 2 - Sqrt[2]}}

In[5] = maximize[f, 4, {#1 + #2 > 3} &]

Out[5] =
{14,{var[1]->2-Sqrt[2],var[2]->2+Sqrt[2],var[3]->2-Sqrt[2],var[4]->2-Sqrt[2]}}

In[6] = maximize[f, 4, {#1 + #2 > 3, #3 - #4 > 2} &]

Out[6] = {14, {var[1] -> 2 - Sqrt[2], var[2] -> 2 + Sqrt[2],
  var[3] -> 2 + Sqrt[2], var[4] -> 2 - Sqrt[2]}}


Hope this helps.

Regards,
Leonid



On Mon, Sep 7, 2009 at 10:36 AM, Mike Miller <michael.g.miller at gmail.com>wrote:

> I have a time-series like function which gives an output based on a
> list of real numbers(i.e. you can run the function on a list of
> 1,2,3,... real numbers). The issue I'm encountering is how to maximize
> the function for a given list length(subject to a set of constraints).
> I could fix the function to a fixed number of real numbers(i.e. f
> [x_Real, y_Real] instead of f[x_List]) and treat x and y as the first
> two elements of the list, and call Maximize on the function, but this
> is not really elegant. I want to be able to easily change the number
> of elements in the list.
>
> What is the best way to optimize a function like I described, which
> takes a list as an argument, for a fixed list length?
>
> Thanks,
> Mike
>
>


  • Prev by Date: Re: confused about asserting variable is element of Reals
  • Next by Date: Re: Performance on 64 bit OS
  • Previous by thread: Optimizing a function with a list as a parameter
  • Next by thread: Re: Optimizing a function with a list as a parameter