如何使用NLopt将参数和数据传递给目标函数进行优化

时间:2015-07-14 03:41:23

标签: julia nlopt

在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吗?还是有其他形式的魔法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

从Julia v0.5开始,这个问题将是多余的。 github上的This pull request修复了匿名函数的性能问题,所以从v0.5起,只需使用匿名函数!