Ko te SciPy (ko te sai pie te whakahua) he kohinga pangarau-a-numpy kei roto hoki nga whare pukapuka C me Fortran. Ka huri a SciPy i to wahanga Python tauwhitiwhiti hei taiao putaiao raraunga oti penei i te MATLAB, IDL, Octave, R, SciLab ranei.
I roto i tenei tuhinga, ka titiro tatou ki nga tikanga taketake o te hotaka pangarau - whakaoti rapanga arotautanga herenga mo te mahi scalar o etahi taurangi ma te whakamahi i te kete scipy.optimize. Kua korerohia nga algorithm arotautanga kore herea i roto Tuhinga whakamutunga. Ka taea te tiki i nga wa katoa he awhina mo nga mahi scipy ma te tono awhina(), Shift+Ripa, i roto ranei tuhinga whaimana.
Whakataki
He atanga noa mo te whakaoti rapanga arotautanga herenga me te kore herea i roto i te kete scipy.optimize e whakaratohia ana e te mahi minimize(). Engari, e mohiotia ana kaore he tikanga mo te ao katoa mo te whakaoti rapanga katoa, na reira ko te whiriwhiri i tetahi tikanga tika, i nga wa katoa, ka taka ki runga i nga pokohiwi o te kairangahau.
Ko te algorithm arotautanga e tika ana ka tohua ma te whakamahi i te tautohe mahi minimize(..., method="").
Mo te arotautanga herenga o te mahi o te maha o nga taurangi, kei te waatea nga whakatinanatanga o nga tikanga e whai ake nei:
SLSQP — te hotaka raupapatanga tapawha me nga herenga, tikanga Newtonian mo te whakaoti i te punaha Lagrange. Tuhinga Wiki.
TNC - Ko Newton Kua Tapahia, He iti te maha o nga whitiwhitinga, he pai mo nga mahi korerangi me te maha o nga taurangi motuhake. Tuhinga Wiki.
L-BFGS-B — he tikanga mai i te roopu Broyden–Fletcher–Goldfarb–Shanno, i whakatinanahia me te iti o te kohi mahara na te utaina wahanga o nga vectors mai i te matrix Hessian. Tuhinga Wiki, tuhinga mo Habré.
COBYLA — MARE Arotautanga Herea Ma te Whakatata Rarangi, te arotautanga herea me te tata rarangi (kaore he tatauranga rōnaki). Tuhinga Wiki.
I runga i te tikanga kua tohua, he rereke nga whakaritenga me nga here mo te whakaoti rapanga:
ahanoa akomanga Bounds mo nga tikanga L-BFGS-B, TNC, SLSQP, whakawhirinaki-constr;
te rarangi (min, max) mo nga tikanga ano L-BFGS-B, TNC, SLSQP, trust-constr;
he ahanoa, he rarangi taonga ranei LinearConstraint, NonlinearConstraint mo COBYLA, SLSQP, tikanga whakawhirinaki-constr;
papakupu, rarangi papakupu ranei {'type':str, 'fun':callable, 'jac':callable,opt, 'args':sequence,opt} mo COBYLA, nga tikanga SLSQP.
Whakahuahua tuhinga:
1) Whakaarohia te whakamahi i te algorithm arotautanga herenga i roto i te rohe whakawhirinaki (tikanga =”trust-constr”) me nga here kua tohua hei ahanoa Bounds, LinearConstraint, NonlinearConstraint ;
2) Whakaarohia te raupapa raupapa ma te whakamahi i nga tikanga tapawha iti rawa (tikanga = "SLSQP") me nga here kua tohua ki te ahua o te papakupu {'type', 'fun', 'jac', 'args'};
3) Te tātari i tetahi tauira o te arotautanga o nga hua hanga ma te whakamahi i te tauira o te whare taiwhanga paetukutuku.
Tikanga arotautanga here = "trust-constr"
Te whakatinanatanga o te tikanga trust-constr i runga i EQSQP mo nga raruraru me nga herenga o te ahua o te taurite me te ake TRIP mo nga raruraru me nga here i roto i te ahua o nga rereke. Ko nga tikanga e rua ka whakatinanahia e te algorithms mo te rapu i te iti rawa o te rohe i roto i te rohe maia me te pai mo nga raru nui.
Te whakatakotoranga pangarau o te rapanga o te kimi i te iti i te ahua whanui:
Mo nga herenga taurite, ka whakatauritehia te rohenga o raro ki te rohe o runga .
Mo te herenga ara kotahi, ka whakatauhia te tepe o runga, o raro ranei np.inf me te tohu e rite ana.
Me kimihia te iti o te mahi Rosenbrock e mohiotia ana o nga taurangi e rua:
I roto i tenei take, ka whakatauhia nga here e whai ake nei i runga i tana rohe whakamaarama:
I roto i to maatau, he otinga ahurei kei te waahi , ko nga here tuatahi me te tuawha anake e whai mana ana.
Me haere ki roto i nga here mai i raro ki runga ka titiro me pehea e tuhia ai ki te scipy.
Whakataunga и me tautuhi ma te whakamahi i te ahanoa Bounds.
I te tatau i te matrix Hessian me whakapau kaha, ka taea e koe te whakamahi i te karaehe HessianUpdateStrategy. Kei te waatea nga rautaki e whai ake nei: BFGS и SR1.
Ka taea hoki te tatau i te matrix Jacobian mo nga herenga ma te whakamahi i nga rereketanga mutunga. Heoi, i tenei keehi kaore e taea te tatau te matrix Hessian ma te whakamahi i nga rereketanga mutunga. Ko te Hessian me tautuhi hei mahi, hei whakamahi ranei i te akomanga HessianUpdateStrategy.
Ko te tikanga, ka taea te tatai nga hua tuatahi me te tuarua o te mahi e arotau ana. Hei tauira, ka taea te tata ki te Hessian ma te whakamahi i te mahi SR1 (whakatata rite-Newtonian). Ka taea te tata i te rōnaki mā ngā rerekētanga mutunga.
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)
Tikanga arotautanga here = "SLSQP"
Ko te tikanga SLSQP i hangaia hei whakaoti rapanga mo te whakaiti i tetahi mahi i te ahua:
Kei hea и — he huinga tohu tohu korero e whakaatu ana i nga here i roto i te ahua o te orite, o te koretake ranei. — nga huinga o nga rohe o raro me o runga mo te rohe whakamaramatanga o te mahi.
Ko nga herenga raina me nga herenga kore e whakaahuatia ana hei papakupu whai mau ki 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])
}
Optimization terminated successfully. (Exit mode 0)
Current function value: 0.34271757499419825
Iterations: 4
Function evaluations: 5
Gradient evaluations: 4
[0.41494475 0.1701105 ]
Tauira Arotautanga
I roto i te hononga ki te whakawhiti ki te hanganga hangarau tuarima, kia titiro tatou ki te hanga arotautanga mā te whakamahi i te tauira o te studio tukutuku, e mau mai i te moni iti engari pūmau. Me whakaaro tatou ko tatou te kaiwhakahaere o te waka waka e whakaputa ana i nga momo hua e toru:
x0 - hoko wharangi taunga, mai i te 10 tr.
x1 - paetukutuku rangatōpū, mai i te 20 tr.
x2 - toa ipurangi, mai i te 30 tr.
E wha nga teina, e rua o waenga me tetahi tuakana. Ko ta ratou putea mahi mo ia marama:
Pipiri: 4 * 150 = 600 чел * час,
waenganui: 2 * 150 = 300 чел * час,
rangatira: 150 чел * час.
Kia noho te teina tuatahi e waatea ana (0, 1, 2) haora mo te whakawhanaketanga me te whakatakotoranga o tetahi waahi momo (x10, x20, x30), waenganui - (7, 15, 20), tuakana - (5, 10, 15 ) haora o te wa pai o to oranga.
Ka rite ki tetahi kaiwhakahaere noa, e hiahia ana matou ki te whakanui i nga hua o ia marama. Ko te mahi tuatahi ki te angitu ko te tuhi i te mahi whainga value ko te nui o nga moni whiwhi mai i nga hua ka mahia ia marama:
Ka mutu, ko te tino whakapae na te iti o te utu me te kounga teitei, kei te noho tonu te rarangi o nga kaihoko makona mo tatou. Ka taea e tatou te whiriwhiri i nga pukapuka whakangao ia marama ma tatou ano, i runga i te whakaoti rapanga arotautanga herea scipy.optimize:
Whakamutunga: kia whiwhi ai te kaiwhakahaere i tana tino pai, he pai ki te hanga i nga wharangi tauranga 8, 6 nga waahi reo-rahi me nga toa 3 ia marama. I tenei keehi, me parau te tuakana me te kore e titiro ake mai i te miihini, ko te kawenga o waenga ka tata ki te 2/3, ko nga teina iti iho i te haurua.
mutunga
Ko te tuhinga e whakaatu ana i nga tikanga taketake mo te mahi me te kete scipy.optimize, whakamahia hei whakaoti rapanga whakaiti herenga. Ko ahau te whakamahi scipy mo nga kaupapa matauranga, no reira he ahua whakakata te tauira i homai.
He maha nga ariā me nga tauira mariko ka kitea, hei tauira, i roto i te pukapuka a I.L. Akulich "Mathematic programming in examples and problems." He tono pakeke ake scipy.optimize ki te hanga hanganga 3D mai i te huinga whakaahua (tuhinga mo Habré) ka taea te tiro ki roto scipy-pukapuka.
Ko te tino puna korero docs.scipy.orgte hunga e hiahia ana ki te whai waahi ki te whakamaoritanga o tenei waahanga me etahi atu waahanga scipy Nau mai haere mai GitHub.
Tuhinga mephistophees mo te whai waahi ki te whakarite i te whakaputanga.