SciPy (சாய் பை என்று உச்சரிக்கப்படுகிறது) என்பது நம்பி பைதான் நீட்டிப்பை அடிப்படையாகக் கொண்ட ஒரு கணித பயன்பாட்டு தொகுப்பு ஆகும். SciPy உடன், உங்கள் ஊடாடும் பைதான் அமர்வு MATLAB, IDL, Octave, R-Lab மற்றும் SciLab போன்ற முழுமையான தரவு அறிவியல் மற்றும் சிக்கலான அமைப்பு முன்மாதிரி சூழலாக மாறும். scipy.optimize தொகுப்பில் சில நன்கு அறியப்பட்ட தேர்வுமுறை அல்காரிதம்களை எவ்வாறு பயன்படுத்துவது என்பது பற்றி இன்று நான் சுருக்கமாக பேச விரும்புகிறேன். செயல்பாடுகளைப் பயன்படுத்துவதற்கான விரிவான மற்றும் புதுப்பித்த உதவியை எப்போதும் help() கட்டளையைப் பயன்படுத்தி அல்லது Shift+Tab ஐப் பயன்படுத்தி பெறலாம்.
அறிமுகம்
முதன்மை ஆதாரங்களைத் தேடுவதிலிருந்தும் வாசிப்பதிலிருந்தும் உங்களையும் வாசகர்களையும் காப்பாற்றும் வகையில், முறைகளின் விளக்கங்களுக்கான இணைப்புகள் முக்கியமாக விக்கிபீடியாவில் இருக்கும். ஒரு விதியாக, பொதுவான விதிமுறைகள் மற்றும் அவற்றின் பயன்பாட்டிற்கான நிபந்தனைகளில் உள்ள முறைகளைப் புரிந்து கொள்ள இந்தத் தகவல் போதுமானது. கணித முறைகளின் சாராம்சத்தைப் புரிந்து கொள்ள, ஒவ்வொரு கட்டுரையின் முடிவிலும் அல்லது உங்களுக்குப் பிடித்த தேடுபொறியிலும் காணக்கூடிய கூடுதல் அதிகாரப்பூர்வ வெளியீடுகளுக்கான இணைப்புகளைப் பின்பற்றவும்.
எனவே, scipy.optimize தொகுதி பின்வரும் நடைமுறைகளை செயல்படுத்துகிறது:
பல்வேறு அல்காரிதம்களைப் பயன்படுத்தி (நெல்டர்-மீட் சிம்ப்ளக்ஸ், பிஎஃப்ஜிஎஸ், நியூட்டன் கான்ஜுகேட் சாய்வுகள், கோபிலா и SLSQP)
எச்சங்களைக் குறைத்தல் MNC (குறைந்த_சதுரங்கள்) மற்றும் நேரியல் அல்லாத குறைந்தபட்ச சதுரங்களைப் பயன்படுத்தி வளைவு பொருத்துதல் அல்காரிதம்கள் (வளைவு_பொருத்தம்)
ஒரு மாறியின் (minim_scalar) அளவிடல் செயல்பாடுகளைக் குறைத்தல் மற்றும் வேர்களைத் தேடுதல் (root_scalar)
பல்வேறு வழிமுறைகளைப் பயன்படுத்தி சமன்பாடுகளின் (ரூட்) அமைப்பின் பல பரிமாண தீர்வுகள் (ஹைப்ரிட் பவல், லெவன்பெர்க்-மார்கார்ட் அல்லது பெரிய அளவிலான முறைகள் போன்றவை நியூட்டன்-கிரைலோவ்).
இந்த கட்டுரையில் இந்த முழு பட்டியலிலிருந்தும் முதல் உருப்படியை மட்டுமே கருத்தில் கொள்வோம்.
பல மாறிகளின் அளவுகோல் செயல்பாட்டின் நிபந்தனையற்ற குறைப்பு
scipy.optimize தொகுப்பிலிருந்து வரும் மினிம் செயல்பாடு, பல மாறிகளின் அளவுகோல் செயல்பாடுகளின் நிபந்தனை மற்றும் நிபந்தனையற்ற குறைத்தல் சிக்கல்களைத் தீர்ப்பதற்கான பொதுவான இடைமுகத்தை வழங்குகிறது. இது எவ்வாறு செயல்படுகிறது என்பதை நிரூபிக்க, பல மாறிகளின் பொருத்தமான செயல்பாடு நமக்குத் தேவைப்படும், அதை நாம் வெவ்வேறு வழிகளில் குறைப்போம்.
இந்த நோக்கங்களுக்காக, N மாறிகளின் Rosenbrock செயல்பாடு சரியானது, இது வடிவம் கொண்டது:
Rosenbrock செயல்பாடு மற்றும் அதன் Jacobi மற்றும் Hessian matrices (முறையே முதல் மற்றும் இரண்டாவது வழித்தோன்றல்கள்) ஏற்கனவே scipy.optimize தொகுப்பில் வரையறுக்கப்பட்டிருந்தாலும், அதை நாமே வரையறுப்போம்.
தெளிவுக்காக, இரண்டு மாறிகளின் Rosenbrock செயல்பாட்டின் மதிப்புகளை 3D இல் வரைவோம்.
வரைதல் குறியீடு
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
# Настраиваем 3D график
fig = plt.figure(figsize=[15, 10])
ax = fig.gca(projection='3d')
# Задаем угол обзора
ax.view_init(45, 30)
# Создаем данные для графика
X = np.arange(-2, 2, 0.1)
Y = np.arange(-1, 3, 0.1)
X, Y = np.meshgrid(X, Y)
Z = rosen(np.array([X,Y]))
# Рисуем поверхность
surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm)
plt.show()
குறைந்தபட்சம் 0 மணிக்கு என்பதை முன்கூட்டியே அறிந்திருத்தல் , பல்வேறு scipy.optimize நடைமுறைகளைப் பயன்படுத்தி Rosenbrock செயல்பாட்டின் குறைந்தபட்ச மதிப்பை எவ்வாறு தீர்மானிப்பது என்பதற்கான எடுத்துக்காட்டுகளைப் பார்ப்போம்.
நெல்டர்-மீட் சிம்ப்ளக்ஸ் முறை
0-பரிமாண இடத்தில் ஒரு ஆரம்ப புள்ளி x5 இருக்கட்டும். அல்காரிதத்தைப் பயன்படுத்தி ரோசன்ப்ராக் செயல்பாட்டின் குறைந்தபட்ச புள்ளியைக் கண்டுபிடிப்போம் நெல்டர்-மீட் சிம்ப்ளக்ஸ் (அல்காரிதம் முறை அளவுருவின் மதிப்பாக குறிப்பிடப்படுகிறது):
Optimization terminated successfully.
Current function value: 0.000000
Iterations: 339
Function evaluations: 571
[1. 1. 1. 1. 1.]
சிம்ப்ளக்ஸ் முறையானது வெளிப்படையாக வரையறுக்கப்பட்ட மற்றும் மிகவும் மென்மையான செயல்பாட்டைக் குறைப்பதற்கான எளிய வழியாகும். ஒரு செயல்பாட்டின் வழித்தோன்றல்களைக் கணக்கிட வேண்டிய அவசியமில்லை; அதன் மதிப்புகளை மட்டும் குறிப்பிட்டால் போதும். நெல்டர்-மீட் முறை எளிய குறைப்பு பிரச்சனைகளுக்கு ஒரு நல்ல தேர்வாகும். இருப்பினும், இது சாய்வு மதிப்பீடுகளைப் பயன்படுத்தாததால், குறைந்தபட்சத்தைக் கண்டறிய அதிக நேரம் ஆகலாம்.
பாவெல் முறை
செயல்பாட்டு மதிப்புகள் மட்டுமே கணக்கிடப்படும் மற்றொரு தேர்வுமுறை அல்காரிதம் பவலின் முறை. அதைப் பயன்படுத்த, நீங்கள் குறைந்தபட்ச செயல்பாட்டில் முறை = 'பவல்' ஐ அமைக்க வேண்டும்.
ஒரு தீர்வுக்கு விரைவான ஒருங்கிணைப்பைப் பெற, செயல்முறை BFGS புறநிலை செயல்பாட்டின் சாய்வு பயன்படுத்துகிறது. சாய்வு ஒரு செயல்பாடாக குறிப்பிடப்படலாம் அல்லது முதல் வரிசை வேறுபாடுகளைப் பயன்படுத்தி கணக்கிடலாம். எவ்வாறாயினும், சிம்ப்ளக்ஸ் முறையை விட BFGS முறைக்கு பொதுவாக குறைவான செயல்பாட்டு அழைப்புகள் தேவைப்படும்.
பகுப்பாய்வு வடிவத்தில் Rosenbrock செயல்பாட்டின் வழித்தோன்றலைக் கண்டுபிடிப்போம்:
இந்த வெளிப்பாடு முதல் மற்றும் கடைசியைத் தவிர அனைத்து மாறிகளின் வழித்தோன்றல்களுக்கும் செல்லுபடியாகும், அவை பின்வருமாறு வரையறுக்கப்படுகின்றன:
இந்த சாய்வைக் கணக்கிடும் பைதான் செயல்பாட்டைப் பார்ப்போம்:
def rosen_der (x):
xm = x [1: -1]
xm_m1 = x [: - 2]
xm_p1 = x [2:]
der = np.zeros_like (x)
der [1: -1] = 200 * (xm-xm_m1 ** 2) - 400 * (xm_p1 - xm ** 2) * xm - 2 * (1-xm)
der [0] = -400 * x [0] * (x [1] -x [0] ** 2) - 2 * (1-x [0])
der [-1] = 200 * (x [-1] -x [-2] ** 2)
return der
சாய்வு கணக்கீடு செயல்பாடு கீழே காட்டப்பட்டுள்ளபடி, குறைந்தபட்ச செயல்பாட்டின் jac அளவுருவின் மதிப்பாக குறிப்பிடப்படுகிறது.
res = minimize(rosen, x0, method='BFGS', jac=rosen_der, options={'disp': True})
print(res.x)
Optimization terminated successfully.
Current function value: 0.000000
Iterations: 25
Function evaluations: 30
Gradient evaluations: 30
[1.00000004 1.0000001 1.00000021 1.00000044 1.00000092]
இணையான சாய்வு வழிமுறை (நியூட்டன்)
வழிமுறை நியூட்டனின் இணைச் சாய்வுகள் மாற்றியமைக்கப்பட்ட நியூட்டனின் முறை.
நியூட்டனின் முறையானது, ஒரு உள்ளூர் பகுதியில் ஒரு செயல்பாட்டை இரண்டாம் பட்டத்தின் பல்லுறுப்புக்கோவை மூலம் தோராயமாக்குவதை அடிப்படையாகக் கொண்டது:
எங்கே இரண்டாவது வழித்தோன்றல்களின் அணி (ஹெஸ்ஸியன் மேட்ரிக்ஸ், ஹெஸ்ஸியன்).
Hessian நேர்மறை திட்டவட்டமாக இருந்தால், இந்தச் சார்பின் உள்ளூர் குறைந்தபட்சம் இருபடி வடிவத்தின் பூஜ்ஜிய சாய்வை பூஜ்ஜியத்திற்கு சமன் செய்வதன் மூலம் கண்டறியலாம். இதன் விளைவாக வெளிப்பாடு இருக்கும்:
தலைகீழ் ஹெஸ்சியன் இணைந்த சாய்வு முறையைப் பயன்படுத்தி கணக்கிடப்படுகிறது. Rosenbrock செயல்பாட்டைக் குறைக்க இந்த முறையைப் பயன்படுத்துவதற்கான எடுத்துக்காட்டு கீழே கொடுக்கப்பட்டுள்ளது. நியூட்டன்-சிஜி முறையைப் பயன்படுத்த, ஹெஸ்சியனைக் கணக்கிடும் செயல்பாட்டை நீங்கள் குறிப்பிட வேண்டும்.
பகுப்பாய்வு வடிவத்தில் ரோசன்ப்ராக் செயல்பாட்டின் ஹெஸ்ஸியன் இதற்கு சமம்:
எங்கே и , மேட்ரிக்ஸை வரையறுக்கவும் .
மேட்ரிக்ஸின் மீதமுள்ள பூஜ்ஜியமற்ற கூறுகள் இதற்கு சமம்:
எடுத்துக்காட்டாக, ஐந்து பரிமாண இடைவெளியில் N = 5, ரோசன்ப்ராக் செயல்பாட்டிற்கான ஹெஸ்ஸியன் மேட்ரிக்ஸ் ஒரு இசைக்குழுவின் வடிவத்தைக் கொண்டுள்ளது:
கான்ஜுகேட் கிரேடியன்ட் (நியூட்டன்) முறையைப் பயன்படுத்தி ரோசன்ப்ராக் செயல்பாட்டைக் குறைப்பதற்கான குறியீட்டுடன் இந்த ஹெஸ்சியனைக் கணக்கிடும் குறியீடு:
def rosen_hess(x):
x = np.asarray(x)
H = np.diag(-400*x[:-1],1) - np.diag(400*x[:-1],-1)
diagonal = np.zeros_like(x)
diagonal[0] = 1200*x[0]**2-400*x[1]+2
diagonal[-1] = 200
diagonal[1:-1] = 202 + 1200*x[1:-1]**2 - 400*x[2:]
H = H + np.diag(diagonal)
return H
res = minimize(rosen, x0, method='Newton-CG',
jac=rosen_der, hess=rosen_hess,
options={'xtol': 1e-8, 'disp': True})
print(res.x)
Optimization terminated successfully.
Current function value: 0.000000
Iterations: 24
Function evaluations: 33
Gradient evaluations: 56
Hessian evaluations: 24
[1. 1. 1. 0.99999999 0.99999999]
ஹெஸ்ஸியன் மற்றும் தன்னிச்சையான திசையன் ஆகியவற்றின் தயாரிப்பு செயல்பாட்டின் வரையறையுடன் ஒரு எடுத்துக்காட்டு
நிஜ-உலகப் பிரச்சனைகளில், முழு ஹெஸ்ஸியன் மேட்ரிக்ஸைக் கணக்கிடுவதற்கும் சேமிப்பதற்கும் குறிப்பிடத்தக்க நேரம் மற்றும் நினைவக வளங்கள் தேவைப்படும். இந்த வழக்கில், உண்மையில் ஹெஸ்ஸியன் மேட்ரிக்ஸைக் குறிப்பிட வேண்டிய அவசியமில்லை, ஏனெனில் குறைத்தல் செயல்முறைக்கு மற்றொரு தன்னிச்சையான திசையன் கொண்ட ஹெஸ்சியனின் உற்பத்திக்கு சமமான திசையன் மட்டுமே தேவைப்படுகிறது. எனவே, கணக்கீட்டுக் கண்ணோட்டத்தில், ஒரு தன்னிச்சையான திசையன் மூலம் ஹெஸ்ஸியன் உற்பத்தியின் முடிவைத் தரும் செயல்பாட்டை உடனடியாக வரையறுப்பது மிகவும் விரும்பத்தக்கது.
ஹெஸ் செயல்பாட்டைக் கருத்தில் கொள்ளுங்கள், இது குறைக்கும் திசையனை முதல் வாதமாகவும், தன்னிச்சையான திசையன் இரண்டாவது வாதமாகவும் (குறைக்கப்பட வேண்டிய செயல்பாட்டின் மற்ற வாதங்களுடன்) ஆகும். எங்கள் விஷயத்தில், ஒரு தன்னிச்சையான திசையன் மூலம் ரோசன்ப்ராக் செயல்பாட்டின் ஹெஸ்ஸியன் தயாரிப்பைக் கணக்கிடுவது மிகவும் கடினம் அல்ல. என்றால் p ஒரு தன்னிச்சையான திசையன், பின்னர் தயாரிப்பு தெரிகிறது:
ஹெஸ்ஸியன் மற்றும் தன்னிச்சையான திசையன் ஆகியவற்றின் பெருக்கத்தைக் கணக்கிடும் சார்பு, ஹெஸ்ப் வாதத்தின் மதிப்பாக குறைக்கப்பட்ட செயல்பாட்டிற்கு அனுப்பப்படுகிறது:
def rosen_hess_p(x, p):
x = np.asarray(x)
Hp = np.zeros_like(x)
Hp[0] = (1200*x[0]**2 - 400*x[1] + 2)*p[0] - 400*x[0]*p[1]
Hp[1:-1] = -400*x[:-2]*p[:-2]+(202+1200*x[1:-1]**2-400*x[2:])*p[1:-1]
-400*x[1:-1]*p[2:]
Hp[-1] = -400*x[-2]*p[-2] + 200*p[-1]
return Hp
res = minimize(rosen, x0, method='Newton-CG',
jac=rosen_der, hessp=rosen_hess_p,
options={'xtol': 1e-8, 'disp': True})
Optimization terminated successfully.
Current function value: 0.000000
Iterations: 24
Function evaluations: 33
Gradient evaluations: 56
Hessian evaluations: 66
ஹெஸ்ஸியன் மேட்ரிக்ஸின் மோசமான கண்டிஷனிங் மற்றும் தவறான தேடல் திசைகள் ஆகியவை நியூட்டனின் கன்ஜுகேட் கிரேடியன்ட் அல்காரிதம் பயனற்றதாக இருக்கும். இதுபோன்ற சந்தர்ப்பங்களில், முன்னுரிமை அளிக்கப்படுகிறது நம்பிக்கை பிராந்திய முறை (trust-region) நியூட்டன் சாய்வுகளை இணைக்கவும்.
Optimization terminated successfully.
Current function value: 0.000000
Iterations: 20
Function evaluations: 21
Gradient evaluations: 20
Hessian evaluations: 0
[1. 1. 1. 1. 1.]
கிரைலோவ் வகை முறைகள்
Trust-ncg முறையைப் போலவே, Krylov-வகை முறைகளும் பெரிய அளவிலான சிக்கல்களைத் தீர்க்க மிகவும் பொருத்தமானவை, ஏனெனில் அவை matrix-vector தயாரிப்புகளை மட்டுமே பயன்படுத்துகின்றன. துண்டிக்கப்பட்ட கிரைலோவ் சப்ஸ்பேஸால் வரையறுக்கப்பட்ட நம்பிக்கை பிராந்தியத்தில் ஒரு சிக்கலைத் தீர்ப்பதே அவற்றின் சாராம்சம். நிச்சயமற்ற சிக்கல்களுக்கு, இந்த முறையைப் பயன்படுத்துவது நல்லது, ஏனெனில் இது Trust-ncg முறையுடன் ஒப்பிடும்போது, ஒரு துணைப் பிரச்சனைக்கு சிறிய எண்ணிக்கையிலான மேட்ரிக்ஸ்-வெக்டார் தயாரிப்புகளின் காரணமாக குறைந்த எண்ணிக்கையிலான நேரியல் அல்லாத மறு செய்கைகளைப் பயன்படுத்துகிறது. கூடுதலாக, இருபடி துணைப் பிரச்சனைக்கான தீர்வு, Trust-ncg முறையைப் பயன்படுத்துவதை விட மிகவும் துல்லியமாகக் கண்டறியப்பட்டுள்ளது.
ஹெஸ்ஸியன் மேட்ரிக்ஸின் வரையறையுடன் எடுத்துக்காட்டு:
res = minimize(rosen, x0, method='trust-krylov',
jac=rosen_der, hess=rosen_hess,
options={'gtol': 1e-8, 'disp': True})
Optimization terminated successfully.
Current function value: 0.000000
Iterations: 19
Function evaluations: 20
Gradient evaluations: 20
Hessian evaluations: 18
print(res.x)
[1. 1. 1. 1. 1.]
ஹெஸ்ஸியன் மற்றும் தன்னிச்சையான திசையன் ஆகியவற்றின் தயாரிப்பு செயல்பாட்டின் எடுத்துக்காட்டு:
res = minimize(rosen, x0, method='trust-krylov',
jac=rosen_der, hessp=rosen_hess_p,
options={'gtol': 1e-8, 'disp': True})
Optimization terminated successfully.
Current function value: 0.000000
Iterations: 19
Function evaluations: 20
Gradient evaluations: 20
Hessian evaluations: 0
print(res.x)
[1. 1. 1. 1. 1.]
நம்பிக்கை மண்டலத்தில் தோராயமான தீர்வுக்கான அல்காரிதம்
அனைத்து முறைகளும் (Newton-CG, Trust-ncg மற்றும் Trust-krylov) பெரிய அளவிலான சிக்கல்களைத் தீர்ப்பதற்கு மிகவும் பொருத்தமானவை (ஆயிரக்கணக்கான மாறிகளுடன்). இதற்குக் காரணம், அடிப்படையான இணைச் சாய்வு அல்காரிதம் தலைகீழ் ஹெஸியன் மேட்ரிக்ஸின் தோராயமான தீர்மானத்தைக் குறிக்கிறது. ஹெஸ்சியனின் வெளிப்படையான விரிவாக்கம் இல்லாமல், மீண்டும் மீண்டும் தீர்வு காணப்படுகிறது. ஹெஸ்ஸியன் மற்றும் தன்னிச்சையான வெக்டரின் தயாரிப்புக்கான செயல்பாட்டை மட்டுமே நீங்கள் வரையறுக்க வேண்டும் என்பதால், இந்த அல்காரிதம் ஸ்பேர்ஸ் (பேண்ட் மூலைவிட்ட) மெட்ரிக்குகளுடன் வேலை செய்வதற்கு மிகவும் நல்லது. இது குறைந்த நினைவக செலவு மற்றும் குறிப்பிடத்தக்க நேர சேமிப்பு ஆகியவற்றை வழங்குகிறது.
நடுத்தர அளவிலான பிரச்சனைகளுக்கு, ஹெஸ்சியனை சேமித்து காரணியாக்குவதற்கான செலவு முக்கியமானதல்ல. இதன் பொருள், குறைவான மறுமுறைகளில் தீர்வைப் பெறுவது சாத்தியம், நம்பிக்கைப் பகுதியின் துணைப் பிரச்சனைகளை கிட்டத்தட்ட சரியாகத் தீர்க்கும். இதைச் செய்ய, ஒவ்வொரு இருபடி துணைப் பிரச்சனைக்கும் சில நேரியல் அல்லாத சமன்பாடுகள் மீண்டும் மீண்டும் தீர்க்கப்படுகின்றன. அத்தகைய தீர்வுக்கு பொதுவாக ஹெஸ்ஸியன் மேட்ரிக்ஸின் 3 அல்லது 4 சோலஸ்கி சிதைவுகள் தேவைப்படுகின்றன. இதன் விளைவாக, இந்த முறை குறைவான மறு செய்கைகளில் ஒன்றிணைகிறது மற்றும் பிற செயல்படுத்தப்பட்ட நம்பிக்கை மண்டல முறைகளைக் காட்டிலும் குறைவான புறநிலை செயல்பாடு கணக்கீடுகள் தேவைப்படுகிறது. இந்த அல்காரிதம் முழுமையான ஹெஸ்ஸியன் மேட்ரிக்ஸை தீர்மானிப்பதை மட்டுமே உள்ளடக்கியது மற்றும் ஹெஸ்ஸியன் மற்றும் தன்னிச்சையான திசையன் ஆகியவற்றின் தயாரிப்பு செயல்பாட்டைப் பயன்படுத்துவதற்கான திறனை ஆதரிக்காது.
Optimization terminated successfully.
Current function value: 0.000000
Iterations: 13
Function evaluations: 14
Gradient evaluations: 13
Hessian evaluations: 14
array([1., 1., 1., 1., 1.])
நாங்கள் அநேகமாக அங்கேயே நிறுத்துவோம். அடுத்த கட்டுரையில் நிபந்தனை குறைத்தல், தோராயச் சிக்கல்களைத் தீர்ப்பதில் குறைத்தல் பயன்பாடு, ஒரு மாறி, தன்னிச்சையான மினிமைசர்களின் செயல்பாட்டைக் குறைத்தல் மற்றும் scipy.optimize ஐப் பயன்படுத்தி சமன்பாடுகளின் அமைப்பின் வேர்களைக் கண்டறிதல் பற்றி மிகவும் சுவாரஸ்யமான விஷயங்களைச் சொல்ல முயற்சிக்கிறேன். தொகுப்பு.