在 Julia 中最小化具有多个参数的函数

Posted

技术标签:

【中文标题】在 Julia 中最小化具有多个参数的函数【英文标题】:minimize a function with multiple argument in Julia 【发布时间】:2021-07-16 21:10:58 【问题描述】:

我有一个函数,它取决于假设 N 输入 x=(x1,x2,x3,x4,...,xN) 并且我有一组 M 个可能的向量 p = ( (p11,p12,p13 ,...,p1N),...,(pM1,pM2,...,pMN))

我想找到在 Julia 编程语言中实现 p[j] 中 j 的最小值。

我尝试使用最小函数(这里我设置 N=5)

minimum([x1,x2,x3,x4,x5] -> fmin(x1,x2,x3,x4,x5), p)

但它不起作用,也没有给出实现最小值的 j 值。有什么建议吗?

【问题讨论】:

请注意,如果您对函数和输入有更多了解,则搜索效率会更高——例如如果您可以将其编写为数学规划问题,例如 MIP、LP、QP,您可以使用诸如 JuMP 之类的工具 【参考方案1】:

您可以使用 splat 运算符 ... 将向量扩展为函数参数,例如 N=3

function f(x,y,z)
    return x+y+z
end

p = [[1,1,1], [2,2,2], [3,3,3]]

minimum(vector -> f(vector...), p)

【讨论】:

【参考方案2】:

为了找到你可以做的最小值:

julia> fmin(x1, x2, x3) = x1+x2+x3
fmin (generic function with 1 method)

julia> p = [(1,1,1), (1,2,3), (-1,-2,10), (2,3,0)];

julia> minp = minimum(v -> fmin(v...), p)
3

可以找到一个最小化器,例如作者:

julia> findall(v -> fmin(v...) == minp, p)
1

(请注意,您会得到一个向量,因为可以有多个索引来最小化表达式)

【讨论】:

以上是关于在 Julia 中最小化具有多个参数的函数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Optim最小化Julia中的多元成本函数?

在 Julia 中返回数组中的最小索引

在 Julia 中使用递归调用减少 JIT 时间

在两个文件中重载一个函数(在 Julia 中)

在 R 中查找具有最小峰宽的峰 - 类似于 MATLAB 函数

具有大量局部最小值的多参数优化