इनपुट वेक्टर होने पर आउटपुट को कम करने के लिए, आप optim
का उपयोग कर सकते हैं।
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
optim
(7:10
मेरे उदाहरण में) के लिए पहला तर्क input1
के लिए प्रारंभ मूल्य (जहां अनुकूलन शुरू करने के लिए की एक अनुमान) है। दूसरा कार्य है, और फिर आप निश्चित पैरामीटर (जैसे input2
और input3
) में पास कर सकते हैं।
इस उदाहरण में, न्यूनतम केवल 3s का वेक्टर होता है (जैसा कि sum(abs(input1 - 3))
को कम करता है)।
तुम सिर्फ एक 1-आयामी न्यूनतम प्रदर्शन कर रहे थे, तो आप optimize
समारोह का प्रयोग करेंगे, और समारोह पास करने के बाद यह करने के लिए अन्य इनपुट पारित:
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
आप आधारित कम करने के लिए चाहते हैं input2
या input3
(एक है कि कार्य करने के लिए पहला तर्क नहीं है) पर, आप नामित तर्क के रूप में दूसरों को दे सकते हैं:
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
function (f, interval, ..., lower = min(interval), upper = max(interval),
maximum = FALSE, tol = .Machine$double.eps^0.25)
कि ...
अतिरिक्त पैरामीटर के किसी भी संख्या का उपयोग करते हैं कि यह तो myFunction
में पास कर सकते हैं: 510,403,210 आप सोच रहे हैं कि क्यों यह संभव है, क्योंकि optimize
परिभाषित किया गया है के रूप में है।
इस अतिरिक्त फ़ंक्शन (करीइंग) के लिए कोई आवश्यकता नहीं है; आप बस '...' के माध्यम से अतिरिक्त तर्क पारित कर सकते हैं: 'ओ = ऑप्टिमाइज़ (मेरा फ़ंक्शन, 2, 3, अंतराल = सी (-100, 100)) ' – baptiste
@ बैपटिस्ट: ईमानदारी से धन्यवाद- मुझे पता नहीं था कि मुमकिन। –
मैं आपके विस्तृत उत्तर के लिए धन्यवाद देखता हूं! – Enzo