Nachdem ich keine Beispiele online von NLopt gefunden habe, das in F # verwendet wird, habe ich versucht, das Beispiel von NLoptNet von C# zu F # zu konvertieren. Da ich keine Ahnung von C# und sehr wenig von F # habe, habe ich es ziemlich schlecht geschlachtet.Verwendung von NLoptNet in F #
Hier ist, was ich bisher:
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)
Hier die Beschreibung des Fehlers ist:
Successive arguments should be separated by spaces or tupled, and arguments involving function or method applications should be parenthesized
Um genauer zu sein, ich versuche, die folgenden drei Zeilen zu übersetzen C# bis F #:
double? finalScore;
var initialValue = new[] { 2.0 };
var result = solver.Optimize(initialValue, out finalScore);
Irgendwelche Ideen?
Ich vermute, dass 'ref (System.Nullable())' oder 'ref <| System.Nullable() 'wird Ihr Problem lösen –
Terrific. Kannst du bitte als Antwort posten, damit ich das Häkchen setzen kann? Vielen Dank! –
Ich frage mich, ob Sie den out-Parameter nehmen könnten, ohne eine Ref-Zelle zu erstellen. so etwas wie 'let finalcore, result = solver.Optimize (initial_val)'. – s952163