如何将参数和数据传递给 objective 函数以使用 NLopt 进行优化
How to pass parameters and data to objective function for optimization with NLopt
在 Ubuntu 14.04 上的 Julia v0.3.10 中,我需要将参数和数据传递给 objective 函数,以便在 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 开始,这个问题将是多余的。 This pull request github 修复了匿名函数的性能问题,因此从 v0.5 开始,只需使用匿名函数即可!
在 Ubuntu 14.04 上的 Julia v0.3.10 中,我需要将参数和数据传递给 objective 函数,以便在 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 开始,这个问题将是多余的。 This pull request github 修复了匿名函数的性能问题,因此从 v0.5 开始,只需使用匿名函数即可!