scipy
Optim.minimize के लिए एक याकूबियन फ़ंक्शन कैसे लिखें
खोज…
वाक्य - विन्यास
- आयात एनपीपी के रूप में सुन्न
- scipy.optimize से आयात करें _minimize
- scipy आयात विशेष से
- प्लेट के रूप में आयात matplotlib.pyplot
टिप्पणियों
Scipy.optimize से आयात करते समय 'न्यूनतम' से पहले अंडरस्कोर नोट करें; '_minimize' इसके अलावा, मैंने इस अनुभाग को करने से पहले इस लिंक से कार्यों का परीक्षण किया, और पाया कि मुझे कम परेशानी थी / अगर मैंने 'विशेष' को अलग से आयात किया तो यह तेजी से काम करता है। लिंक किए गए पृष्ठ पर रोसेनब्रोक फ़ंक्शन गलत था - आपको पहले कलरबार को कॉन्फ़िगर करना होगा; मैंने वैकल्पिक कोड पोस्ट किया है लेकिन लगता है कि यह बेहतर हो सकता है।
इसके आगे के उदाहरण।
हेसियन मैट्रिक्स की व्याख्या के लिए यहां देखें
अनुकूलन उदाहरण (सुनहरा)
चरम मूल्यों में सीमा को सीमित करके 'गोल्डन' पद्धति एक अनिमॉडल फ़ंक्शन को छोटा करती है
import numpy as np
from scipy.optimize import _minimize
from scipy import special
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 500)
y = special.j0(x)
optimize.minimize_scalar(special.j0, method='golden')
plt.plot(x, y)
plt.show()
परिणाम स्वरूप छवि
अनुकूलन उदाहरण (ब्रेंट)
ब्रेंट की विधि अन्य रूट-खोजने वाले एल्गोरिदम का अधिक जटिल एल्गोरिथ्म संयोजन है; हालाँकि, परिणामी ग्राफ स्वर्ण विधि से उत्पन्न ग्राफ से बहुत अलग नहीं है।
import numpy as np
import scipy.optimize as opt
from scipy import special
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 500)
y = special.j0(x)
# j0 is the Bessel function of 1st kind, 0th order
minimize_result = opt.minimize_scalar(special.j0, method='brent')
the_answer = minimize_result['x']
minimized_value = minimize_result['fun']
# Note: minimize_result is a dictionary with several fields describing the optimizer,
# whether it was successful, etc. The value of x that gives us our minimum is accessed
# with the key 'x'. The value of j0 at that x value is accessed with the key 'fun'.
plt.plot(x, y)
plt.axvline(the_answer, linestyle='--', color='k')
plt.show()
print("The function's minimum occurs at x = {0} and y = {1}".format(the_answer, minimized_value))
नतीजा ग्राफ
आउटपुट:
The function's minimum occurs at x = 3.8317059554863437 and y = -0.4027593957025531
रोसेनब्रोक फ़ंक्शन
सोचें कि यह उदाहरण बेहतर हो सकता है, लेकिन आप इसे प्राप्त कर सकते हैं
import numpy as np
from scipy.optimize import _minimize
from scipy import special
import matplotlib.pyplot as plt
from matplotlib import cm
from numpy.random import randn
x, y = np.mgrid[-2:2:100j, -2:2:100j]
plt.pcolor(x, y, optimize.rosen([x, y]))
plt.plot(1, 1, 'xw')
# Make plot with vertical (default) colorbar
data = np.clip(randn(100, 100), -1, 1)
cax = plt.imshow(data, cmap=cm.coolwarm)
# Add colorbar, make sure to specify tick locations to match desired ticklabels
cbar = plt.colorbar(cax, ticks=[-2, 0, 2]) # vertically oriented colorbar
plt.axis([-2, 2, -2, 2])
plt.title('Rosenbrock function') #add title if desired
plt.xlabel('x')
plt.ylabel('y')
plt.show() #generate


