# Wish to avoid multiple for loops, but don't know how to do it

7 messages
Open this post in threaded view
|

## Wish to avoid multiple for loops, but don't know how to do it

 Hello everyone, I am trying to write a grid search algorithm for optimization. It would evaluate an objective function over all the possible points on the grid, and return the minimum value and its location. I was able to do this easily for a 4-dimensional function. This needed four nested for loops. This solution however, its not elegantly scalable to a 20-dimensional function. For example, let's say the search domain over any search direction is -10 to 10, with some grid resolution. To do it for a 4-dimensional function, I used: for i = 1:N         for j = 1:N                 for k = 1:N                         for l = 1:N                                 xPoint = [x(i) x(j) x(k) x(l)]';                                 fEval_x = colville(xPoint);                                 if fEval_x < fmin                                         fmin = fEval_x;                                         xmin = xPoint;                                 endif                         endfor                 endfor         endfor endfor Where colville() is an optimization toy function. Does anyone have a suggestion on how to avoid 20 nested for loops when trying to scale this algorithm up to higher dimensions? Thanks a bunch, -Brad Ridder
Open this post in threaded view
|

## Re: Wish to avoid multiple for loops, but don't know how to do it

 On Thu, May 19, 2011 at 1:43 PM, clustro wrote: Hello everyone, I am trying to write a grid search algorithm for optimization. It would evaluate an objective function over all the possible points on the grid, and return the minimum value and its location. I was able to do this easily for a 4-dimensional function. This needed four nested for loops. This solution however, its not elegantly scalable to a 20-dimensional function. For example, let's say the search domain over any search direction is -10 to 10, with some grid resolution. To do it for a 4-dimensional function, I used: for i = 1:N        for j = 1:N                for k = 1:N                        for l = 1:N                                xPoint = [x(i) x(j) x(k) x(l)]';                                fEval_x = colville(xPoint);                                if fEval_x < fmin                                        fmin = fEval_x;                                        xmin = xPoint;                                endif                        endfor                endfor        endfor endfor Where colville() is an optimization toy function. Does anyone have a suggestion on how to avoid 20 nested for loops when trying to scale this algorithm up to higher dimensions? Thanks a bunch, -Brad Ridder -- VWhy do every point?Is the the function smooth of hilly in each dimension?  Are there lots of local minimums?das _______________________________________________ Help-octave mailing list [hidden email] https://mailman.cae.wisc.edu/listinfo/help-octave
Open this post in threaded view
|

## Re: Wish to avoid multiple for loops, but don't know how to do it

 I am not particularly interested in using grid search for practical purposes; the purpose is to compare grid search with better methods (e.g. simulated annealing, genetic algorithm, etc.). The point is to compare the performance of simulated annealing with grid search in terms of accuracy and run time.The toy functions I am using are indeed very hilly.Thank you very much for your time,-Brad Ridder On Thu, May 19, 2011 at 3:00 PM, Doug Stewart wrote: On Thu, May 19, 2011 at 1:43 PM, clustro wrote: Hello everyone, I am trying to write a grid search algorithm for optimization. It would evaluate an objective function over all the possible points on the grid, and return the minimum value and its location. I was able to do this easily for a 4-dimensional function. This needed four nested for loops. This solution however, its not elegantly scalable to a 20-dimensional function. For example, let's say the search domain over any search direction is -10 to 10, with some grid resolution. To do it for a 4-dimensional function, I used: for i = 1:N        for j = 1:N                for k = 1:N                        for l = 1:N                                xPoint = [x(i) x(j) x(k) x(l)]';                                fEval_x = colville(xPoint);                                if fEval_x < fmin                                        fmin = fEval_x;                                        xmin = xPoint;                                endif                        endfor                endfor        endfor endfor Where colville() is an optimization toy function. Does anyone have a suggestion on how to avoid 20 nested for loops when trying to scale this algorithm up to higher dimensions? Thanks a bunch, -Brad Ridder -- VWhy do every point?Is the the function smooth of hilly in each dimension?  Are there lots of local minimums?das -- Bradley James RidderChakrabart GroupGraduate StudentSchool of Chemical EngineeringPurdue University _______________________________________________ Help-octave mailing list [hidden email] https://mailman.cae.wisc.edu/listinfo/help-octave
Open this post in threaded view
|

## Re: Wish to avoid multiple for loops, but don't know how to do it

 In reply to this post by clustro On 19 May 2011 12:43, clustro <[hidden email]> wrote: > for i = 1:N >        for j = 1:N >                for k = 1:N >                        for l = 1:N >                                xPoint = [x(i) x(j) x(k) x(l)]'; >                                fEval_x = colville(xPoint); >                                if fEval_x < fmin >                                        fmin = fEval_x; >                                        xmin = xPoint; >                                endif >                        endfor >                endfor >        endfor > endfor > > Where colville() is an optimization toy function. > > Does anyone have a suggestion on how to avoid 20 nested for loops when > trying to scale this algorithm up to higher dimensions? I don't understand the full extent of your problem, you basically want the minimum over the n-fold tensor product of a vector? You might be able to do this with arrayfun, although I don't immediately see how to avoid the actual tensoring. - Jordi G. H. _______________________________________________ Help-octave mailing list [hidden email] https://mailman.cae.wisc.edu/listinfo/help-octave
Open this post in threaded view
|

## RE: Wish to avoid multiple for loops, but don't know how to do it

 In reply to this post by Doug Stewart-4   On Thu, May 19, 2011 at 1:43 PM, clustro <[hidden email]> wrote:Hello everyone,I am trying to write a grid search algorithm for optimization. It wouldevaluate an objective function over all the possible points on the grid, andreturn the minimum value and its location.I was able to do this easily for a 4-dimensional function. This needed fournested for loops. This solution however, its not elegantly scalable to a20-dimensional function.For example, let's say the search domain over any search direction is -10 to10, with some grid resolution. To do it for a 4-dimensional function, Iused:for i = 1:N       for j = 1:N               for k = 1:N                       for l = 1:N                               xPoint = [x(i) x(j) x(k) x(l)]';                               fEval_x = colville(xPoint);                               if fEval_x < fmin                                       fmin = fEval_x;                                       xmin = xPoint;                               endif                       endfor               endfor       endforendforWhere colville() is an optimization toy function.Does anyone have a suggestion on how to avoid 20 nested for loops whentrying to scale this algorithm up to higher dimensions?Thanks a bunch,-Brad Ridder--V Why do every point?Is the the function smooth of hilly in each dimension?  Are there lots of local minimums? das   I sometimes run into this sort of thing. There is no pre-generation of the grid that provides any sort of indication of the values in the grin. Often it gets populated by dis-continuous results.Mike G. _______________________________________________ Help-octave mailing list [hidden email] https://mailman.cae.wisc.edu/listinfo/help-octave