【问题标题】:Optimization with F#使用 F# 进行优化
【发布时间】:2014-04-02 13:20:51
【问题描述】:

我对 F# 很陌生,但遇到了问题。 我想解决一个非线性的、有约束的优化问题。 目标是使用六个参数abcdgammarho_infty 最小化函数minFunc,(函数很长,所以我不发布它这里)和附加条件:

a + d > 0,
d > 0,
c > 0,
gamma > 0,
0 <= gamma <= -ln(rho_infty),
0 < roh_infty <= 1.

我已经使用 Microsoft Solver Foundation 的 Nelder Mead Solver 进行了尝试,但我不知道如何添加非线性条件 a + d &gt; 00 &lt;= gamma &lt;= -ln(rho_infty)

到目前为止我的代码:

open Microsoft.SolverFoundation.Common
open Microsoft.SolverFoundation.Solvers

let funcFindParameters (startValues:float list) minimizationFunc =

let xInitial = startValues |> List.toArray
let lowerBound = [|-infinity; -infinity; 0.0; 0.0; 0.0; 0.0|]
let upperBound = [|infinity; infinity; infinity; infinity; infinity; 1.0|]

let solution = NelderMeadSolver.Solve(Func<float [], _>(fun parameters -> (minimizationFunc   
parameters.[0] parameters.[1] parameters.[2] parameters.[3] parameters.[4] parameters.[5])), 
xInitial, lowerBound, upperBound)

where parameters.[0] = a, and so one...

是否有可能使用 Nelder Mead Solver 或其他求解器来解决它?

【问题讨论】:

  • 它在我的愿望清单上已经有一段时间了……为 F# 编写一个 CSP 求解器库。一天……
  • 也许值得看看R type provider? R 带有用于优化问题的广泛生态系统

标签: f# mathematical-optimization minimization


【解决方案1】:

一个评论是,我会远离 Microsoft.SolverFoundation,我已经将我的生命中的几个小时浪费在了那里编码的糟糕算法上。 R 类型提供程序要好得多。

话虽如此,一个常见的技巧就是简单地重新参数化模型以处理约束。例如,设置:

e=a+d

作为参数,在优化中计算d为:

d=e-a

现在你只需要满足约束 e>0,它是固定的。您可以对 gamma 参数执行类似的操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-17
    • 2017-05-27
    • 2015-08-01
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多