在F#中使用NLoptNet

pro*_*rth 0 f# c#-to-f# nlopt

在网上找不到在F#中使用NLopt的例子,我一直试图将NLoptNet上给出的例子从C#转换为F#.对C#不熟悉,对F#不太熟悉,我一直在屠杀它.

这是我到目前为止:

open NLoptNet
open System


let solver = new NLoptSolver(NLoptAlgorithm.LN_COBYLA, uint32(1), 0.001, 100)
solver.SetLowerBounds([|-10.0|])
solver.SetUpperBounds([|100.0|])

let objfunc (variables : float array) = 
    Math.Pow(variables.[0] - 3.0, 2.0) + 4.0

solver.SetMinObjective(objfunc)

let initial_val = [|2.|]
let finalscore = ref System.Nullable()   // ERROR
let result = solver.Optimize(initial_val,  finalscore)
Run Code Online (Sandbox Code Playgroud)

以下是错误的描述:

连续的参数应该用空格或元组分隔,涉及函数或方法应用程序的参数应该用括号括起来

更具体地说,我正在尝试将以下三行C#转换为F#:

double? finalScore;
var initialValue = new[] { 2.0 };
var result = solver.Optimize(initialValue, out finalScore);
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Joh*_*mer 5

此错误是由于F#处理优先级的方式 - 添加更多括号或一些运算符以阐明应用程序的顺序来解决问题.

2个可能的修复方法

ref (System.Nullable())
Run Code Online (Sandbox Code Playgroud)

要么

ref <| System.Nullable()
Run Code Online (Sandbox Code Playgroud)