Thanks for the reply Steven, that helped a lot

On Friday, May 8, 2015 at 10:34:24 PM UTC-4, Tim Holy wrote:
>
> In the context of Optim, I sketched an approach in 
> https://github.com/JuliaOpt/Optim.jl/issues/102#issuecomment-74658825 
> that is now trivial with FastAnonymous if you're running 0.4: 
>
> https://github.com/timholy/FastAnonymous.jl/blob/master/doc/README_0.4.md#changing-parameter-values
>  
>
> But someone needs to modify Optim so it's not so picky about the input 
> "function." 
>
> --Tim 
>
> On Friday, May 08, 2015 06:57:28 PM Tony Kelman wrote: 
> > This comes up pretty often with Optim as well, making a closure works 
> fine 
> > when you're only solving a single problem with a single set of 
> parameters, 
> > but it's a little cumbersome when you have a small set of parameter 
> values 
> > that you're trying to loop over many times. 
> > 
> > David, can you give a sketch of the funky workaround you were using 
> here? 
> > You wound up creating a one-element array that you were using to 
> transmit 
> > the index into the parameter data vector into the inner-loop function, 
> or 
> > something like that, right? 
> > 
> > On Friday, May 8, 2015 at 11:49:48 AM UTC-7, Steven G. Johnson wrote: 
> > > Here is the example from the SciPy manual, translated into working 
> Julia 
> > > code: 
> > > 
> > > @pyimport scipy.optimize as so 
> > > 
> > > using PyCall 
> > > args = (2, 3, 7, 8, 9, 10) 
> > > function fun(x, args...) 
> > > 
> > >     u, v = x 
> > >     a, b, c, d, e, f = args 
> > >     return a*u^2 + b*u*v + c*v^2 + d*u + e*v + f 
> > > 
> > > end 
> > > function gradf(x, args...) 
> > > 
> > >     u, v = x 
> > >     a, b, c, d, e, f = args 
> > >     gu = 2*a*u + b*v + d     # u-component of the gradient 
> > >     gv = b*u + 2*c*v + e     # v-component of the gradient 
> > >     return [gu, gv] 
> > > 
> > > end 
> > > x0 = [0, 0] 
> > > so.fmin_cg(fun, x0, fprime=gradf, args=args) 
> > > 
> > > 
> > > 
> > > I copied their style, but it would have been cleaner to write e.g. 
> > > 
> > > function fun(x, a, b, c, d, e, f) 
> > > 
> > >     u, v = x 
> > >     return a*u^2 + b*u*v + c*v^2 + d*u + e*v + f 
> > > 
> > > end 
> > > 
> > > 
> > > rather than using varargs.  Of course, it would be cleaner to omit the 
> > > whole "args" nonsense to begin with, and just write: 
> > > 
> > > so.fmin_cg(x -> fun2(x, a, b, c, d, e, f), x0, fprime= x -> gradf(x, 
> a, b, 
> > > c, d, e, f)) 
> > > 
> > > 
> > > since, as I mentioned above, their "args" is just a clumsy workaround 
> for 
> > > lexical scoping, which both Python and Julia already have. 
>
>

Reply via email to