Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2011

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

Search the Archive

Re: Simple n-tuple problem - with no simple solution

  • To: mathgroup at smc.vnet.net
  • Subject: [mg115933] Re: Simple n-tuple problem - with no simple solution
  • From: Don <donabc at comcast.net>
  • Date: Wed, 26 Jan 2011 05:06:07 -0500 (EST)
  • References: <ihjjt0$sfv$1@smc.vnet.net>

On Jan 24, 2:22 am, DrMajorBob <btre... at austin.rr.com> wrote:
> Brilliant!
>
> Bobby
>
> On Sun, 23 Jan 2011 16:32:03 -0600, Dana DeLouis <dana.... at gmail.com>  
> wrote:
>
>
>
>
>
> > On Jan 22, 3:23 am, DrMajorBob <btre... at austin.rr.com> wrote:
> >> Here are some timings.
>
> >> n = 5; addends = Rationalize@Range[0, 1.0, 0.05];
> >> Length@t1[addends, n] // Timing
>
> >> {1.44372, 192}
> >> {23.6318, 192}
>
> >> n = 7;
> >> Length@t1[addends, n] // Timing
> >> {1.85135, 364}
>
> >> n = 9;
> >> Length@t1[addends, n] // Timing
> >> {2.04216, 488}
>
> >> The Compositions method rendered Mathematica unresponsive at n = 10, but
> >> here's n = 25 for my approach:
> >> n = 25;
> >> Length@t1[addends, n] // Timing
>
> >> {2.57619, 627}
>
> >> I'd say Solve (which must use Integer Linear Programming for this) is 
> >> the
> >> way to go.
>
> > Hi.  Just some thoughts.   With the smallest unit 1, the most n can be  
> > is 20.
>
> > If we assume that solution sizes smaller than n have implied 0's, then.  ..
>
> > IntegerPartitions[20,5]//Length //Timing
> > {0.000085,192}
>
> > IntegerPartitions[20,20]//Length //Timing
> > {0.000244,627}
>
> > If we want to look at each exact n, then the function uses {n}
>
> > Table[Length[IntegerPartitions[20,{j}]],{j,20}]
> > {1,10,33,64,84,90,82,70,54,42,30,22,15,11,7,5,3,2,1,1}
>
> > Accumulate[%]
> > =
> > {1,11,44,108,192,282,364,434,488,530,560,582,597,608,615,620,623,625,626,62=AD7}
>
> > By adding them up, we see that for n=5, we get the 192.  For n=7, 364,  
> > etc.
>
> > If the question was "Count all possible combinations" as in the last 
> > total above, then one additional way...
>
> > Timing[SeriesCoefficient[
> >    1/Times @@ (1 - n^#1 & ) /@
> >       Range[20], {n, 0, 20}]]
>
> > {0.0003, 627}
>
> > = = = = = = = = = =
> > HTH  : >)
> > Dana DeLouis
>
> --
> DrMajor... at yahoo.com- Hide quoted text -
>
> - Show quoted text -

Thank you all for the in-depth analysis
of this problem.
The proposed solutions do solve the problem of
memory overflow as opposed to the simple
solution of generating all possible tuples and only then Selecting out
those whose elements sum to 1.

I should add perhaps a little context to the original problem.
It is part of an optimization problem.
All the n-tuples (with the requirement
that all elements of any given tuple  add to 1.0 - as explained in
the original problem definition)  constitute
essentially the state space
that has to be searched ( in some clever way)  to find
the maximum value of an objective function subject
to well defined independent constraints.

The hope was that
the requirement of summing to one would inhibit the
state space from growing too fast for "reasonable"
sizes of n ("reasonable" being about a max of 15 for
the current application).   Many of the solutions
proposed show that that is not feasible: the state space
grows very rapidly from about a 5-tuple to larger values of n up to
15.
(A person more knowledgeable than I in combinatorics might have seen
this coming.)
Using the NumberOfCompositons function
from the Combinatorica package (special thanks to those
who introduced me to this package) shows how quickly
the state space grows.

 Needs["Combinatorica`"] // Quiet
 max = 15;
For[n = 5, n <= max, n++,
 Print["n = ",n, " " ,  AbsoluteTiming[c2b = 0.05 Compositions[20,
n] ;] ]
 ]

Therefore, the time it takes to generate all possible states
is prohibitive for large n (n > 10) and searches through
such a voluminous state space is not feasible.
A heuristic is being worked on that will, hopefully, reduce
the size of the state space while not sacrificing an optimum
solution for the objective function.  Thank you again for all your
input into this.


  • Prev by Date: Re: Time series minima and maxima
  • Next by Date: Re: Mathematica 20x slower than Java at arithmetic/special
  • Previous by thread: Re: Simple n-tuple problem - with no simple solution
  • Next by thread: Re: Simple n-tuple problem - with no simple solution