Um die Ausgabe zu minimieren, wenn die Eingabe ein Vektor ist, können Sie optim
verwenden.
myFunction = function(input1, input2, input3) sum(abs(input1 - 3))
o = optim(7:10, myFunction, input2=5, input3=6)
o$par
# [1] 2.999989 2.999995 3.000000 3.000001
Das erste Argument für optim
(7:10
in meinem Beispiel) ist der Startwert für input1
(eine Vermutung, wo die Optimierung zu starten). Die zweite ist die Funktion, und Sie können dann die festen Parameter übergeben (wie input2
und input3
).
In diesem Beispiel stellt sich das Minimum als ein Vektor von nur 3s dar (das minimiert sum(abs(input1 - 3))
).
Wenn Sie gerade eine 1-dimensionale Minimierung durchgeführt wird, würden Sie die optimize
Funktion verwenden und die anderen Eingänge, um es passieren, nachdem die Funktion übergeben:
myFunction = function(input1, input2, input3) {
return(abs(input1 - 3) + input2 + input3)
}
o = optimize(myFunction, 2, 3, interval=c(-100, 100))
print(o$minimum)
# [1] 3.000003
Wenn Sie ZUGRUNDELEGUNG minimieren wollen auf input2
oder input3
(eine, die nicht das erste Argument der Funktion ist), können Sie die anderen als benannte Argumente geben:
myFunction = function(input1, input2, input3) {
return(abs(input1 - 3) + abs(input2 - 12) + input3)
}
print(optimize(myFunction, input1=2, input3=3, interval=c(-100, 100)))
print(o$minimum)
[1] 11.99998
Wenn Sie sich fragen, warum dies möglich ist, ist es, weil optimize
ist definiert als:
function (f, interval, ..., lower = min(interval), upper = max(interval),
maximum = FALSE, tol = .Machine$double.eps^0.25)
Die ...
die Verwendung einer beliebigen Anzahl von zusätzlichen Parametern erlaubt, die es dann zu myFunction
passieren.
keine Notwendigkeit für diese zusätzliche Funktion (Curry); Sie können einfach die zusätzlichen Argumente durch '...': 'o = optimieren (myFunction, 2, 3, interval = c (-100, 100))' – baptiste
@baptiste: aufrichtig danke- Ich war mir nicht bewusst, dass das war möglich. –
Ich danke Ihnen für Ihre ausführliche Antwort! – Enzo