SciPy (waxaa loogu dhawaaqaa sai pie) waa xirmo xisaabeed nambaro ku saleysan oo ay ku jiraan maktabadaha C iyo Fortran. SciPy waxay u beddeshaa fadhigaaga isdhexgalka ee Python jawi xogeed oo dhamaystiran sida MATLAB, IDL, Octave, R, ama SciLab.
Maqaalkan, waxaan ku eegi doonaa farsamooyinka aasaasiga ah ee barnaamijka xisaabinta - xallinta mashaakilaadka hagaajinta shuruudaha ee shaqada scalar ee doorsoomayaal dhowr ah iyadoo la adeegsanayo xirmada scipy.optimize. Algorithms-ka hagaajinta aan xadidnayn ayaa mar hore lagaga hadlay maqaalkii ugu dambeeyay. Caawimo faahfaahsan oo cusub oo ku saabsan hawlaha scipy ayaa had iyo jeer la heli karaa iyada oo la adeegsanayo amarka caawinta, Shift+Tab ama gudaha dukumeenti rasmi ah.
Horudhac
Isku-xidhka guud ee lagu xalliyo mashaakilaadka hagaajinta shuruudaysan iyo kuwa aan xaddidnayn ee ku jira xirmada scipy.optimize waxaa bixiya shaqada minimize(). Si kastaba ha ahaatee, waxaa la og yahay in aysan jirin hab caalami ah oo lagu xalliyo dhammaan dhibaatooyinka, sidaas darteed doorashada hab ku filan, sida had iyo jeer, waxay ku dhacdaa garbaha cilmi-baarayaasha.
Algorithm hagaajinta ku habboon ayaa lagu qeexay iyadoo la adeegsanayo doodda shaqada minimize(..., method="").
Si loo hagaajiyo shuruudaha doorsoomayaasha kala duwan, hirgelinta hababka soo socda ayaa diyaar ah:
SLSQP -Barnaamij afar geesle ah oo isdabajoog ah oo leh caqabado, habka Newtonian ee lagu xalliyo nidaamka Lagrange. Maqaalka Wiki.
TNC - Newton Constrained, tirada xaddidan ee ku celcelinta, oo u fiican hawlaha aan tooska ahayn oo leh tiro badan oo doorsoomayaal madaxbannaan. Maqaalka Wiki.
L-BFGS-B - hab ka yimid kooxda Broyden-Fletcher-Goldfarb-Shanno, oo lagu hirgeliyay isticmaalka xusuusta oo yaraatay iyadoo ay ugu wacan tahay qayb ka mid ah vectors oo ka yimid jaantuska Hessian. Maqaalka Wiki, maqaal ku saabsan Habré.
dulmar maqaalka:
1) Tixgeli adeegsiga algorithm hagaajinta shuruudaha ee gobolka kalsoonida (hab = "trust-constr") oo leh caqabado lagu tilmaamay walxo Bounds, LinearConstraint, NonlinearConstraint ;
2) Tixgeli barnaamijyada isku xigxiga adoo isticmaalaya habka ugu yar ee afar geesoodka ah (hab = "SLSQP") oo leh xaddidaadyo lagu qeexay qaabka qaamuuska. {'type', 'fun', 'jac', 'args'};
3) Falanqee tusaalaha hagaajinta alaabta la soo saaray iyadoo la isticmaalayo tusaale ahaan istuudiyaha shabakadda.
Habka wanaajinta shuruuda ah="trust-constr"
Hirgelinta habka trust-constr ku salaysan EQSQP dhibaatooyinka ka haysta caqabadaha qaabka sinnaanta iyo ku SAFAR dhibaatooyinka haysta caqabadaha qaabka sinnaan la'aanta. Labada habba waxaa lagu fuliyaa algorithms si loo helo ugu yaraan degaanka ee gobolka kalsoonida waxayna si fiican ugu habboon yihiin dhibaatooyinka baaxadda leh.
Samaynta xisaabta ee dhibaatada helitaanka ugu yaraan qaab guud:
Caqabadaha adag ee sinnaanta, soohdinta hoose waxaa loo dejiyay mid la mid ah xadka sare .
Xayiraadda hal dhinac ah, xadka sare ama hoose ayaa la dejiyay np.inf oo leh calaamad u dhiganta.
U ogolow inay lagama maarmaan noqoto in la helo ugu yar ee shaqada Rosenbrock ee la yaqaan ee laba doorsoomayaal:
Xaaladdan oo kale, xaddidaadaha soo socda ayaa lagu dejiyay goobta qeexitaanka:
Xaaladeena, waxaa jira xal u gaar ah barta , kuwaas oo kaliya xayiraadaha koowaad iyo afaraad ay ansax yihiin.
Aynu ka gudubno xannibaadaha hoos ilaa sare oo aynu eegno sida aan u qori karno si scipy ah.
Xaddidaadda и aynu ku qeexno anagoo adeegsanayna shayga Soohdinta.
Marka la xisaabinayo matrixka Hessian waxay u baahan tahay dadaal badan, waxaad isticmaali kartaa fasal HessianUpdateStrategy. Xeeladaha soo socda ayaa diyaar ah: BFGS и SR1.
Matrixka Jacobian ee xannibaadaha ayaa sidoo kale lagu xisaabin karaa iyadoo la adeegsanayo kala duwanaansho xaddidan. Si kastaba ha ahaatee, kiiskan Hessian matrixka laguma xisaabin karo iyada oo la adeegsanayo kala duwanaansho xaddidan. Hessian-ka waa in lagu qeexaa hawl ama adeegsiga fasalka HessianUpdate Strategy.
Beddel ahaan, soosaarayaasha koowaad iyo labaad ee shaqada la hagaajiyay waa la qiyaasi karaa. Tusaale ahaan, Hessian-ka waxaa lagu qiyaasi karaa iyadoo la isticmaalayo shaqada SR1 (qiyaastii-Newtonian). Jaangooyooyinka waxaa lagu qiyaasi karaa kala duwanaansho xaddidan.
from scipy.optimize import SR1
res = minimize(rosen, x0, method='trust-constr', jac="2-point", hess=SR1(),
constraints=[linear_constraint, nonlinear_constraint],
options={'verbose': 1}, bounds=bounds)
print(res.x)
Habka wanaajinta shuruuda = "SLSQP"
Habka SLSQP waxaa loogu talagalay in lagu xalliyo mashaakilaadka yaraynta shaqada qaabka:
Xagee и - tibaaxaha tusmooyinka odhaahyada qeexaya xannibaadaha qaabka sinnaanta ama sinnaan la'aanta. - dejinta xuduudaha hoose iyo sare ee goobta qeexida shaqada.
Xayiraadaha tooska ah iyo kuwa aan tooska ahayn ayaa lagu sifeeyay qaab qaamuusyo leh furayaal type, fun и jac.
ineq_cons = {'type': 'ineq',
'fun': lambda x: np.array ([1 - x [0] - 2 * x [1],
1 - x [0] ** 2 - x [1],
1 - x [0] ** 2 + x [1]]),
'jac': lambda x: np.array ([[- 1.0, -2.0],
[-2 * x [0], -1.0],
[-2 * x [0], 1.0]])
}
eq_cons = {'type': 'eq',
'fun': lambda x: np.array ([2 * x [0] + x [1] - 1]),
'jac': lambda x: np.array ([2.0, 1.0])
}
Raadinta ugu yar ayaa loo fuliyaa sida soo socota:
Optimization terminated successfully. (Exit mode 0)
Current function value: 0.34271757499419825
Iterations: 4
Function evaluations: 5
Gradient evaluations: 4
[0.41494475 0.1701105 ]
Tusaalaha Hagaajinta
Marka la eego u gudubka qaabdhismeedka tignoolajiyada shanaad, aynu ka fikirno hagaajinta wax soo saarka anagoo adeegsanayna tusaale ahaan istuudiyaha webka, kaas oo noo keena dakhli yar laakiin xasilloon. Aan ku qiyaasno nafteena in aan nahay maamulaha galley soo saarta saddex nooc oo badeecooyin ah:
x0 - iibinta bogagga degitaanka, laga bilaabo 10 tr.
x1 - shabakadaha shirkadaha, laga bilaabo 20 tr.
x2 - dukaamada khadka tooska ah, laga bilaabo 30 tr.
Kooxdayada shaqo ee saaxiibtinimada leh waxa ka mid ah afar junior, laba dhexe iyo mid sare. Khasnadda wakhtiga shaqada ee bisha:
Juunyo: 4 * 150 = 600 чел * час,
dhexda: 2 * 150 = 300 чел * час,
senator: 150 чел * час.
U ogolow ilmaha ugu horreeya ee la heli karo (0, 1, 2) saacadood horumarinta iyo geynta hal goob oo nooc ah (x10, x20, x30), dhexe - (7, 15, 20), sare - (5, 10, 15) ) saacadaha wakhtiga ugu fiican noloshaada.
Sida agaasime kasta oo caadi ah, waxaan rabnaa inaan sare u qaadno faa'iidada bisha. Talaabada ugu horeysa ee guusha waa in la qoro shaqada ujeedada value sida xadiga dakhliga ka soo gala alaabta la soo saaro bishii:
Aan si dabacsan ugu soo koobno tirooyinka oo dhan oo aan ku xisaabinno culeyska doomoyaasha bishiiba iyadoo si wanaagsan loo qaybinayo x = (8, 6, 3) :
Juunyo: 8 * 10 + 6 * 20 + 3 * 30 = 290 чел * час;
dhexda: 8 * 7 + 6 * 15 + 3 * 20 = 206 чел * час;
senator: 8 * 5 + 6 * 10 + 3 * 15 = 145 чел * час.
Gabagabo: si uu agaasimuhu u helo ugu badnaantii uu xaqa u lahaa, waxa fiican in la sameeyo 8 bog oo deg deg ah, 6 goobood oo dhexdhexaad ah iyo 3 dukaan bishiiba. Xaaladdan oo kale, waayeelku waa inuu xaaqaa isagoo aan kor ka eegayn mashiinka, culeyska dhexda ayaa noqon doona qiyaastii 2/3, da'yarta wax ka yar kala badh.
gunaanad
Maqaalku wuxuu qeexayaa farsamooyinka aasaasiga ah ee la shaqeynta xirmada scipy.optimize, loo isticmaalo in lagu xalliyo dhibaatooyinka yaraynta shuruudaha. Shakhsi ahaan waan isticmaalaa scipy oo keliya ujeeddooyin tacliimeed, taas oo ah sababta tusaalaha la bixiyay uu u yahay dabeecad majaajillo ah.
Tusaalayaal badan oo aragti iyo muuqaal ah ayaa laga heli karaa, tusaale ahaan, buugga IL Akulich "Barnaamijka xisaabta ee tusaalooyinka iyo dhibaatooyinka." Codsi adag oo badan scipy.optimize in la dhiso qaab dhismeedka 3D oo laga soo qaaday sawirro (maqaal ku saabsan Habré) waa laga eegi karaa buug-cunto-karinta.
Isha ugu weyn ee macluumaadka waa docs.scipy.orgkuwa raba inay ka qaybqaataan tarjumaada tan iyo qaybaha kale scipy Ku soo DHAWOOW GitHub.
Спасибо mephistophees ka qayb qaadashada diyaarinta daabacaadda.