Julia 如何通过NLopt将参数和数据传递到目标函数进行优化

Julia 如何通过NLopt将参数和数据传递到目标函数进行优化,julia,nlopt,Julia,Nlopt,在Ubuntu 14.04上的Julia v0.3.10中,我需要将参数和数据传递给目标函数,以便在Julia中使用NLopt进行优化例程。下面的示例代码演示了我当前如何执行此操作: function estimate(myModel, myData, myInitialValue, nloptAlgorithm, numberOfParameters) opt = Opt(nloptAlgorithm, numberOfParameters) localObjectiveFun

在Ubuntu 14.04上的Julia v0.3.10中,我需要将参数和数据传递给目标函数,以便在Julia中使用NLopt进行优化例程。下面的示例代码演示了我当前如何执行此操作:

function estimate(myModel, myData, myInitialValue, nloptAlgorithm, numberOfParameters)
    opt = Opt(nloptAlgorithm, numberOfParameters)
    localObjectiveFunction = ((param, grad) -> generic_objective_function(param, grad, myModel, myData))
    min_objective!(opt, localObjectiveFunction)
    (objFuncOpt, paramOpt, flag) = optimize(opt, myInitialValue)
end
function generic_objective_function(param, grad, myModel, myData)
    #some code
end
这是可行的,尽管有一个问题,
localObjectiveFunction
是匿名的,因此编译器无法在运行时确定函数的输出类型,这反过来会影响性能


我只是想知道是否有更好的方法来处理这个问题?我应该使用
FastAnonymous
?还是有其他形式的魔法可以绕过这个问题?

从Julia v0.5开始,这个问题将是多余的。在github上修复了匿名函数的性能问题,因此从v0.5开始,只需使用匿名函数

我建议您的脚本检查瓶颈,而不是盲目地进行优化。@FelipeLema案例1:对复杂目标函数进行少量优化。案例2:在一个非常简单的目标函数上进行大量优化。我同意案例1的处罚几乎无法衡量。然而,对于案例2,它可能是重要的(参见)。诚然,我的大部分个人问题都属于案例1。尽管如此,我真的很好奇案例2是否有解决办法。因此,问题依然存在。