SciPy (เชเชเซเชเชพเชฐเชฃ เชธเชพเช เชชเชพเช) เช เชจเชฎเซเชชเซ-เชเชงเชพเชฐเชฟเชค เชเชฃเชฟเชคเชจเซเช เชชเซเชเซเช เชเซ เชเซเชฎเชพเช C เช เชจเซ Fortran เชชเซเชธเซเชคเชเชพเชฒเชฏเซเชจเซ เชชเชฃ เชธเชฎเชพเชตเซเชถ เชฅเชพเชฏ เชเซ. SciPy เชคเชฎเชพเชฐเชพ เชเชจเซเชเชฐเซเชเซเชเชฟเชต เชชเชพเชฏเชฅเซเชจ เชธเชคเซเชฐเชจเซ MATLAB, IDL, Octave, R, เช เชฅเชตเชพ SciLab เชเซเชตเชพ เชธเชเชชเซเชฐเซเชฃ เชกเซเชเชพ เชตเชฟเชเซเชเชพเชจ เชตเชพเชคเชพเชตเชฐเชฃเชฎเชพเช เชซเซเชฐเชตเซ เชเซ.
เช เชฒเซเชเชฎเชพเช, เช
เชฎเซ เชเชพเชฃเชฟเชคเชฟเช เชชเซเชฐเซเชเซเชฐเชพเชฎเชฟเชเชเชจเซ เชฎเซเชณเชญเซเชค เชคเชเชจเซเชเซ เชเซเชเชถเซเช - scipy.optimize เชชเซเชเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชฃเชพ เชเชฒเซเชจเชพ เชธเซเชเซเชฒเชฐ เชเชพเชฐเซเชฏ เชฎเชพเชเซ เชถเชฐเชคเซ เชเชชเซเชเชฟเชฎเชพเชเชเซเชถเชจ เชธเชฎเชธเซเชฏเชพเชเชจเซเช เชจเชฟเชฐเชพเชเชฐเชฃ. เช
เชจเชฟเชฏเชเชคเซเชฐเชฟเชค เชเชชเซเชเชฟเชฎเชพเชเชเซเชถเชจ เชเชฒเซเชเซเชฐเชฟเชงเชฎเซเชธเชจเซ เชชเชนเซเชฒเซเชฅเซ เช เชเชฐเซเชเชพ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ
เชชเชฐเชฟเชเชฏ
scipy.optimize เชชเซเชเซเชเชฎเชพเช เชถเชฐเชคเซ เช
เชจเซ เช
เชจเชฟเชฏเชเชคเซเชฐเชฟเชค เชเชชเซเชเชฟเชฎเชพเชเชเซเชถเชจ เชธเชฎเชธเซเชฏเชพเช เชฌเชเชจเซเชจเซ เชเชเซเชฒเชตเชพ เชฎเชพเชเซเชจเซเช เชเช เชธเชพเชฎเชพเชจเซเชฏ เชเชจเซเชเชฐเชซเซเชธ เชซเชเชเซเชถเชจ เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเชฆเชพเชจ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ. minimize()
. เชเซ เชเซ, เชคเซ เชเชพเชฃเซเชคเซเช เชเซ เชเซ เชฌเชงเซ เชธเชฎเชธเซเชฏเชพเช เชนเชฒ เชเชฐเชตเชพ เชฎเชพเชเซ เชเซเช เชธเชพเชฐเซเชตเชคเซเชฐเชฟเช เชชเชฆเซเชงเชคเชฟ เชจเชฅเซ, เชคเซเชฅเซ เชชเชฐเซเชฏเชพเชชเซเชค เชชเชฆเซเชงเชคเชฟเชจเซ เชชเชธเชเชฆเชเซ, เชนเชเชฎเซเชถเชจเซ เชเซเชฎ, เชธเชเชถเซเชงเชเชจเชพ เชเชญเชพ เชชเชฐ เชชเชกเซ เชเซ.
เชฏเซเชเซเชฏ เชเชชเซเชเชฟเชฎเชพเชเชเซเชถเชจ เช
เชฒเซเชเซเชฐเชฟเชงเชฎ เชซเชเชเซเชถเชจ เชฆเชฒเซเชฒเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชฒเซเชฒเซเชเชฟเชค เชเซ minimize(..., method="")
.
เชเชฃเชพ เชเชฒเซเชจเชพ เชเชพเชฐเซเชฏเชจเชพ เชถเชฐเชคเซ เชเชชเซเชเชฟเชฎเชพเชเชเซเชถเชจ เชฎเชพเชเซ, เชจเซเชเซเชจเซ เชชเชฆเซเชงเชคเชฟเชเชจเชพ เช
เชฎเชฒเซเชเชฐเชฃเซ เชเชชเชฒเชฌเซเชง เชเซ:
trust-constr
- เชเชคเซเชฎเชตเชฟเชถเซเชตเชพเชธ เชเซเชทเซเชคเซเชฐเชฎเชพเช เชธเซเชฅเชพเชจเชฟเช เชฒเชเซเชคเซเชคเชฎ เชฎเชพเชเซ เชถเซเชงเซ.เชตเชฟเชเชฟ เชฒเซเช ,เชนเซเชฌเซเชฐเซ เชชเชฐเชจเซ เชฒเซเช ;SLSQP
- เช เชตเชฐเซเชงเซ เชธเชพเชฅเซ เชเซเชฐเชฎเชฟเช เชเชคเซเชฐเซเชญเซเช เชชเซเชฐเซเชเซเชฐเชพเชฎเชฟเชเช, เชฒเซเชเซเชฐเซเชจเซเช เชธเชฟเชธเซเชเชฎเชจเซ เชเชเซเชฒเชตเชพ เชฎเชพเชเซ เชจเซเชฏเซเชเซเชจเชฟเชฏเชจ เชชเชฆเซเชงเชคเชฟ.เชตเชฟเชเชฟ เชฒเซเช .TNC
- เชเชชเชพเชฏเซเชฒ เชจเซเชฏเซเชเชจ เชเชจเซเชธเซเชเซเชฐเซเชเชจเซเชก, เชชเซเชจเชฐเชพเชตเซเชคเซเชคเชฟเชเชจเซ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชธเชเชเซเชฏเชพ, เชฎเซเชเซ เชธเชเชเซเชฏเชพเชฎเชพเช เชธเซเชตเชคเชเชคเซเชฐ เชเชฒเซ เชธเชพเชฅเซ เชฌเชฟเชจเชฐเซเชเซเชฏ เชเชพเชฐเซเชฏเซ เชฎเชพเชเซ เชธเชพเชฐเซ.เชตเชฟเชเชฟ เชฒเซเช .L-BFGS-B
โ เชนเซเชธเชฟเชฏเชจ เชฎเซเชเซเชฐเชฟเชเซเชธเชฎเชพเชเชฅเซ เชตเซเชเซเชเชฐเชจเชพ เชเชเชถเชฟเช เชฒเซเชกเชฟเชเชเชจเซ เชเชพเชฐเชฃเซ เชเชเซ เชฎเซเชฎเชฐเซ เชตเชชเชฐเชพเชถ เชธเชพเชฅเซ เชฌเซเชฐเซเชฏเชกเซเชจ-เชซเซเชฒเซเชเชฐ-เชเซเชฒเซเชกเชซเชพเชฐเซเชฌ-เชถเชพเชจเซเชจเซ เชเซเชฎเชจเซ เชชเชฆเซเชงเชคเชฟ.เชตเชฟเชเชฟ เชฒเซเช ,เชนเซเชฌเซเชฐเซ เชชเชฐเชจเซ เชฒเซเช .COBYLA
โ เชฐเซเชเซเชฏ เช เชเชฆเชพเช เชฆเซเชตเชพเชฐเชพ MARE เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชเชชเซเชเชฟเชฎเชพเชเชเซเชถเชจ, เชฐเซเชเซเชฏ เช เชเชฆเชพเช เชธเชพเชฅเซ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชเชชเซเชเชฟเชฎเชพเชเชเซเชถเชจ (เชเซเชฐเซเชกเชฟเชฏเชจเซเช เชเชฃเชคเชฐเซ เชตเชฟเชจเชพ).เชตเชฟเชเชฟ เชฒเซเช .
เชชเชธเชเชฆ เชเชฐเซเชฒเซ เชชเชฆเซเชงเชคเชฟเชจเชพ เชเชงเชพเชฐเซ, เชธเชฎเชธเซเชฏเชพ เชนเชฒ เชเชฐเชตเชพ เชฎเชพเชเซเชจเซ เชถเชฐเชคเซ เช เชจเซ เชจเชฟเชฏเชเชคเซเชฐเชฃเซ เช เชฒเช เชฐเซเชคเซ เชธเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเชพ เชเซ:
- เชตเชฐเซเช เชชเชฆเชพเชฐเซเชฅ
Bounds
L-BFGS-B, TNC, SLSQP, เชเซเชฐเชธเซเช-เชเชจเซเชธเซเชเซเชฐเชฐ เชชเชฆเซเชงเชคเชฟเช เชฎเชพเชเซ; - เชธเซเชเซ
(min, max)
เชธเชฎเชพเชจ เชชเชฆเซเชงเชคเชฟเช เชฎเชพเชเซ L-BFGS-B, TNC, SLSQP, trust-constr; - เชเชฌเซเชเซเชเซเช เช
เชฅเชตเชพ เชเชฌเซเชเซเชเซเชเซเชธเชจเซ เชธเซเชเชฟ
LinearConstraint
,NonlinearConstraint
COBYLA, SLSQP, เชเซเชฐเชธเซเช-เชเชจเซเชธเซเชเซเชฐเชฐ เชชเชฆเซเชงเชคเชฟเช เชฎเชพเชเซ; - เชถเชฌเซเชฆเชเซเชถ เช
เชฅเชตเชพ เชถเชฌเซเชฆเชเซเชถเซเชจเซ เชธเซเชเชฟ
{'type':str, 'fun':callable, 'jac':callable,opt, 'args':sequence,opt}
COBYLA, SLSQP เชชเชฆเซเชงเชคเชฟเช เชฎเชพเชเซ.
เชฒเซเชเชจเซ เชฐเซเชชเชฐเซเชเชพ:
1) เชเชฌเซเชเซเชเซเช เชคเชฐเซเชเซ เชเชฒเซเชฒเซเชเชฟเชค เช
เชตเชฐเซเชงเซ เชธเชพเชฅเซ เชเซเชฐเชธเซเช เชชเซเชฐเชฆเซเชถเชฎเชพเช เชถเชฐเชคเซ เชเชชเซเชเชฟเชฎเชพเชเชเซเชถเชจ เช
เชฒเซเชเซเชฐเชฟเชงเชฎเชจเซ เชเชชเชฏเซเช เชงเซเชฏเชพเชจเชฎเชพเช เชฒเซ Bounds
, LinearConstraint
, NonlinearConstraint
;
2) เชถเชฌเซเชฆเชเซเชถเชจเชพ เชฐเซเชชเชฎเชพเช เชเชฒเซเชฒเซเชเชฟเชค เชชเซเชฐเชคเชฟเชฌเชเชงเซ เชธเชพเชฅเซ เชเชเชพเชฎเชพเช เชเชเชพ เชเซเชฐเชธ เชชเชฆเซเชงเชคเชฟ (เชชเชฆเซเชงเชคเชฟ = "SLSQP") เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเซเชฐเชฎเชฟเช เชชเซเชฐเซเชเซเชฐเชพเชฎเชฟเชเชเชจเซ เชตเชฟเชเชพเชฐ เชเชฐเซ {'type', 'fun', 'jac', 'args'}
;
3) เชตเซเชฌ เชธเซเชเซเชกเชฟเชฏเซเชจเชพ เชเชฆเชพเชนเชฐเชฃเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชคเซเชชเชพเชฆเชฟเชค เชเชคเซเชชเชพเชฆเชจเซเชจเชพ เชเชชเซเชเชฟเชฎเชพเชเชเซเชถเชจเชจเชพ เชเชฆเชพเชนเชฐเชฃเชจเซเช เชตเชฟเชถเซเชฒเซเชทเชฃ เชเชฐเซ.
เชถเชฐเชคเซ เชเชชเซเชเชฟเชฎเชพเชเชเซเชถเชจ เชชเชฆเซเชงเชคเชฟ="trust-constr"
เชชเชฆเซเชงเชคเชฟเชจเซ เช
เชฎเชฒ trust-constr
เชชเชฐ เชเชงเชพเชฐเชฟเชค เชเซ
เชธเชพเชฎเชพเชจเซเชฏ เชธเซเชตเชฐเซเชชเชฎเชพเช เชจเซเชฏเซเชจเชคเชฎ เชถเซเชงเชตเชพเชจเซ เชธเชฎเชธเซเชฏเชพเชจเซ เชเชพเชฃเชฟเชคเชฟเช เชฐเชเชจเชพ:
เชธเชเชค เชธเชฎเชพเชจเชคเชพเชจเซ เชฎเชฐเซเชฏเชพเชฆเชพเช เชฎเชพเชเซ, เชจเซเชเชฒเซ เชฌเชพเชเชจเซเชก เชเชชเชฒเชพ เชฌเชพเชเชจเซเชกเชจเซ เชฌเชฐเชพเชฌเชฐ เชธเซเช เชเชฐเซเชฒเซ เชเซ .
เชเช-เชฎเชพเชฐเซเชเซเชฏ เช
เชตเชฐเซเชง เชฎเชพเชเซ, เชเชชเชฒเซ เช
เชฅเชตเชพ เชจเซเชเชฒเซ เชฎเชฐเซเชฏเชพเชฆเชพ เชธเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ np.inf
เช
เชจเซเชฐเซเชช เชเชฟเชนเซเชจ เชธเชพเชฅเซ.
เชฌเซ เชเชฒเซเชจเชพ เชเชพเชฃเซเชคเชพ เชฐเซเชเซเชจเชฌเซเชฐเซเช เชซเชเชเซเชถเชจเชจเซเช เชจเซเชฏเซเชจเชคเชฎ เชถเซเชงเชตเชพ เชฎเชพเชเซ เชคเซ เชเชฐเซเชฐเซ เชเซ:
เช เชเชฟเชธเซเชธเชพเชฎเชพเช, เชจเซเชเซเชจเชพ เชจเชฟเชฏเชเชคเซเชฐเชฃเซ เชคเซเชจเซ เชตเซเชฏเชพเชเซเชฏเชพเชจเชพ เชกเซเชฎเซเชจ เชชเชฐ เชธเซเช เชเซ:
เช
เชฎเชพเชฐเชพ เชเชฟเชธเซเชธเชพเชฎเชพเช, เชฌเชฟเชเชฆเซ เชชเชฐ เชเช เช
เชจเชจเซเชฏ เชเชเซเชฒ เชเซ , เชเซเชจเชพ เชฎเชพเชเซ เชฎเชพเชคเซเชฐ เชชเซเชฐเชฅเชฎ เช
เชจเซ เชเซเชฅเชพ เชชเซเชฐเชคเชฟเชฌเชเชงเซ เชฎเชพเชจเซเชฏ เชเซ.
เชเชพเชฒเซ เชจเซเชเซเชฅเซ เชเชชเชฐ เชธเซเชงเซเชจเชพ เชชเซเชฐเชคเชฟเชฌเชเชงเซเชฎเชพเชเชฅเซ เชชเชธเชพเชฐ เชฅเชเช เช
เชจเซ เชเซเชเช เชเซ เชเชชเชฃเซ เชคเซเชฎเชจเซ เชเซเชตเซ เชฐเซเชคเซ เชธเซเชเซเชชเซเชฎเชพเช เชฒเชเซ เชถเชเซเช.
เชชเซเชฐเชคเชฟเชฌเชเชงเซ ะธ เชเชพเชฒเซ เชคเซเชจเซ เชฌเชพเชเชจเซเชกเซเชธ เชเชฌเซเชเซเชเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชฐเซเช.
from scipy.optimize import Bounds
bounds = Bounds ([0, -0.5], [1.0, 2.0])
เชชเซเชฐเชคเชฟเชฌเชเชงเซ ะธ เชเชพเชฒเซ เชคเซเชจเซ เชฐเซเชเซเชฏ เชธเซเชตเชฐเซเชชเชฎเชพเช เชฒเชเซเช:
เชเชพเชฒเซ เช เช เชตเชฐเซเชงเซเชจเซ เชฒเซเชจเชฟเชฏเชฐ เชเชจเซเชธเซเชเซเชฐเซเชเช เชเชฌเซเชเซเชเซเช เชคเชฐเซเชเซ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชฐเซเช:
import numpy as np
from scipy.optimize import LinearConstraint
linear_constraint = LinearConstraint ([[1, 2], [2, 1]], [-np.inf, 1], [1, 1])
เช เชจเซ เชเซเชฒเซเชฒเซ เชฎเซเชเซเชฐเชฟเชเซเชธ เชธเซเชตเชฐเซเชชเชฎเชพเช เชฌเชฟเชจเชฐเซเชเซเชฏ เช เชตเชฐเซเชง:
เช เชฎเซ เช เช เชตเชฐเซเชง เชฎเชพเชเซ เชเซเชเซเชฌเชฟเชฏเชจ เชฎเซเชเซเชฐเชฟเชเซเชธเชจเซ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชฐเซเช เชเซเช เช เชจเซ เชนเซเชธเชฟเชฏเชจ เชฎเซเชเซเชฐเชฟเชเซเชธเชจเซเช เชฐเซเชเซเชฏ เชธเชเชฏเซเชเชจ เชฎเชจเชธเซเชตเซ เชตเซเชเซเชเชฐ เชธเชพเชฅเซ :
เชนเชตเซ เชเชชเชฃเซ เชฌเชฟเชจเชฐเซเชเซเชฏ เช
เชตเชฐเซเชงเชจเซ เชเช เชชเชฆเชพเชฐเซเชฅ เชคเชฐเซเชเซ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชฐเซ เชถเชเซเช เชเซเช NonlinearConstraint
:
from scipy.optimize import NonlinearConstraint
def cons_f(x):
return [x[0]**2 + x[1], x[0]**2 - x[1]]
def cons_J(x):
return [[2*x[0], 1], [2*x[0], -1]]
def cons_H(x, v):
return v[0]*np.array([[2, 0], [0, 0]]) + v[1]*np.array([[2, 0], [0, 0]])
nonlinear_constraint = NonlinearConstraint(cons_f, -np.inf, 1, jac=cons_J, hess=cons_H)
เชเซ เชเชฆ เชฎเซเชเซเช เชนเซเชฏ, เชคเซ เชฎเซเชเซเชฐเชฟเชธเชฟเชธเชจเซ เชเซเชเชพเชเชตเชพเชฏเชพ เชธเซเชตเชฐเซเชชเชฎเชพเช เชชเชฃ เชธเซเชชเชทเซเช เชเชฐเซ เชถเชเชพเชฏ เชเซ:
from scipy.sparse import csc_matrix
def cons_H_sparse(x, v):
return v[0]*csc_matrix([[2, 0], [0, 0]]) + v[1]*csc_matrix([[2, 0], [0, 0]])
nonlinear_constraint = NonlinearConstraint(cons_f, -np.inf, 1,
jac=cons_J, hess=cons_H_sparse)
เช
เชฅเชตเชพ เชชเชฆเชพเชฐเซเชฅ เชคเชฐเซเชเซ LinearOperator
:
from scipy.sparse.linalg import LinearOperator
def cons_H_linear_operator(x, v):
def matvec(p):
return np.array([p[0]*2*(v[0]+v[1]), 0])
return LinearOperator((2, 2), matvec=matvec)
nonlinear_constraint = NonlinearConstraint(cons_f, -np.inf, 1,
jac=cons_J, hess=cons_H_linear_operator)
เชนเซเชธเชฟเชฏเชจ เชฎเซเชเซเชฐเชฟเชเซเชธเชจเซ เชเชฃเชคเชฐเซ เชเชฐเชคเซ เชตเชเชคเซ เชเชฃเชพ เชชเซเชฐเชฏเชคเซเชจเซเชจเซ เชเชฐเซเชฐ เชเซ, เชคเชฎเซ เชตเชฐเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเซ เชเซ HessianUpdateStrategy
BFGS
ะธ SR1
.
from scipy.optimize import BFGS
nonlinear_constraint = NonlinearConstraint(cons_f, -np.inf, 1, jac=cons_J, hess=BFGS())
เชนเซเชธเชฟเชฏเชจเชจเซ เชเชฃเชคเชฐเซ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชคเชซเชพเชตเชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชชเชฃ เชเชฐเซ เชถเชเชพเชฏ เชเซ:
nonlinear_constraint = NonlinearConstraint (cons_f, -np.inf, 1, jac = cons_J, hess = '2-point')
เชฎเชฐเซเชฏเชพเชฆเชพเช เชฎเชพเชเซ เชเซเชเซเชฌเชฟเชฏเชจ เชฎเซเชเซเชฐเชฟเชเซเชธ เชชเชฃ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชคเชซเชพเชตเชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชฃเชคเชฐเซ เชเชฐเซ เชถเชเชพเชฏ เชเซ. เชเซ เชเซ, เช เชเชฟเชธเซเชธเชพเชฎเชพเช เชนเซเชธเชฟเชฏเชจ เชฎเซเชเซเชฐเชฟเชเซเชธเชจเซ เชเชฃเชคเชฐเซ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชคเชซเชพเชตเชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชฐเซ เชถเชเชพเชคเซ เชจเชฅเซ. เชนเซเชธเชฟเชฏเชจเชจเซ เชซเชเชเซเชถเชจ เชคเชฐเซเชเซ เช เชฅเชตเชพ HessianUpdateStrategy เชตเชฐเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชฐเชตเซเช เชเชตเชถเซเชฏเช เชเซ.
nonlinear_constraint = NonlinearConstraint (cons_f, -np.inf, 1, jac = '2-point', hess = BFGS ())
เชเชชเซเชเชฟเชฎเชพเชเชเซเชถเชจ เชธเชฎเชธเซเชฏเชพเชจเซ เชเชเซเชฒ เชเชจเชพ เชเซเชตเซ เชฆเซเชเชพเชฏ เชเซ:
from scipy.optimize import minimize
from scipy.optimize import rosen, rosen_der, rosen_hess, rosen_hess_prod
x0 = np.array([0.5, 0])
res = minimize(rosen, x0, method='trust-constr', jac=rosen_der, hess=rosen_hess,
constraints=[linear_constraint, nonlinear_constraint],
options={'verbose': 1}, bounds=bounds)
print(res.x)
`gtol` termination condition is satisfied.
Number of iterations: 12, function evaluations: 8, CG iterations: 7, optimality: 2.99e-09, constraint violation: 1.11e-16, execution time: 0.033 s.
[0.41494531 0.17010937]
เชเซ เชเชฐเซเชฐเซ เชนเซเชฏ เชคเซ, เชนเซเชธเชฟเชฏเชจเชจเซ เชเชฃเชคเชฐเซ เชฎเชพเชเซเชจเซเช เชเชพเชฐเซเชฏ LinearOperator เชตเชฐเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชฐเซ เชถเชเชพเชฏ เชเซ
def rosen_hess_linop(x):
def matvec(p):
return rosen_hess_prod(x, p)
return LinearOperator((2, 2), matvec=matvec)
res = minimize(rosen, x0, method='trust-constr', jac=rosen_der, hess=rosen_hess_linop,
constraints=[linear_constraint, nonlinear_constraint],
options={'verbose': 1}, bounds=bounds)
print(res.x)
เช
เชฅเชตเชพ เชนเซเชธเชฟเชฏเชจเชจเซเช เชเชคเซเชชเชพเชฆเชจ เช
เชจเซ เชชเซเชฐเชพเชฎเซเชเชฐ เชฆเซเชตเชพเชฐเชพ เชฎเชจเชธเซเชตเซ เชตเซเชเซเชเชฐ hessp
:
res = minimize(rosen, x0, method='trust-constr', jac=rosen_der, hessp=rosen_hess_prod,
constraints=[linear_constraint, nonlinear_constraint],
options={'verbose': 1}, bounds=bounds)
print(res.x)
เชตเซเชเชฒเซเชชเชฟเช เชฐเซเชคเซ, เชเชชเซเชเชฟเชฎเชพเชเช เชฅเช เชฐเชนเซเชฒเชพ เชซเชเชเซเชถเชจเชจเชพ เชชเซเชฐเชฅเชฎ เช
เชจเซ เชฌเซเชเชพ เชกเซเชฐเชฟเชตเซเชเชฟเชตเซเชธ เช
เชเชฆเชพเชเชฟเชค เชเชฐเซ เชถเชเชพเชฏ เชเซ. เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชนเซเชธเชฟเชฏเชจเชจเซ เชซเชเชเซเชถเชจเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เช
เชเชฆเชพเชเชฟเชค เชเชฐเซ เชถเชเชพเชฏ เชเซ SR1
(เช
เชฐเซเชง-เชจเซเชฏเซเชเซเชจเชฟเชฏเชจ เช
เชเชฆเชพเช). เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชคเชซเชพเชตเชคเซ เชฆเซเชตเชพเชฐเชพ เชขเชพเชณ เช
เชเชฆเชพเชเชฟเชค เชเชฐเซ เชถเชเชพเชฏ เชเซ.
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)
เชถเชฐเชคเซ เชเชชเซเชเชฟเชฎเชพเชเชเซเชถเชจ เชชเชฆเซเชงเชคเชฟ="SLSQP"
SLSQP เชชเชฆเซเชงเชคเชฟ เชซเซเชฐเซเชฎเชฎเชพเช เชซเชเชเซเชถเชจเชจเซ เชจเซเชฏเซเชจเชคเชฎ เชเชฐเชตเชพเชจเซ เชธเชฎเชธเซเชฏเชพเช เชเชเซเชฒเชตเชพ เชฎเชพเชเซ เชฐเชเชพเชฏเซเชฒ เชเซ:
เชเซเชฏเชพเช ะธ - เชธเชฎเชพเชจเชคเชพ เช เชฅเชตเชพ เช เชธเชฎเชพเชจเชคเชพเชจเชพ เชธเซเชตเชฐเซเชชเชฎเชพเช เชชเซเชฐเชคเชฟเชฌเชเชงเซเชจเซเช เชตเชฐเซเชฃเชจ เชเชฐเชคเชพ เช เชญเชฟเชตเซเชฏเชเซเชคเชฟเชเชจเชพ เชธเซเชเชเชพเชเชเซเชจเซ เชธเชฎเซเชน. โ เชซเชเชเซเชถเชจเชจเซ เชตเซเชฏเชพเชเซเชฏเชพเชจเชพ เชกเซเชฎเซเชจ เชฎเชพเชเซ เชจเซเชเชฒเชพ เช เชจเซ เชเชชเชฒเชพ เชฌเชพเชเชจเซเชกเซเชธเชจเชพ เชธเซเช.
เชฐเซเชเซเชฏ เช
เชจเซ เชฌเชฟเชจเชฐเซเชเซเชฏ เช
เชตเชฐเซเชงเซ เชเซ เชธเชพเชฅเซ เชถเชฌเซเชฆเชเซเชถเชจเชพ เชธเซเชตเชฐเซเชชเชฎเชพเช เชตเชฐเซเชฃเชตเซเชฒ เชเซ 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])
}
เชฒเชเซเชคเซเชคเชฎ เชฎเชพเชเซ เชถเซเชง เชจเซเชเซ เชชเซเชฐเชฎเชพเชฃเซ เชนเชพเชฅ เชงเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ:
x0 = np.array([0.5, 0])
res = minimize(rosen, x0, method='SLSQP', jac=rosen_der,
constraints=[eq_cons, ineq_cons], options={'ftol': 1e-9, 'disp': True},
bounds=bounds)
print(res.x)
Optimization terminated successfully. (Exit mode 0)
Current function value: 0.34271757499419825
Iterations: 4
Function evaluations: 5
Gradient evaluations: 4
[0.41494475 0.1701105 ]
เชเชชเซเชเชฟเชฎเชพเชเชเซเชถเชจ เชเชฆเชพเชนเชฐเชฃ
เชชเชพเชเชเชฎเซ เชคเชเชจเซเชเซ เชฐเชเชจเชพเชฎเชพเช เชธเชเชเซเชฐเชฎเชฃเชจเชพ เชธเชเชฌเชเชงเชฎเชพเช, เชเชพเชฒเซ เชตเซเชฌ เชธเซเชเซเชกเชฟเชฏเซเชจเชพ เชเชฆเชพเชนเชฐเชฃเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชคเซเชชเชพเชฆเชจ เชเชชเซเชเชฟเชฎเชพเชเชเซเชถเชจ เชเซเชเช, เชเซ เชเชชเชฃเชจเซ เชจเชพเชจเซ เชชเชฐเชเชคเซ เชธเซเชฅเชฟเชฐ เชเชตเช เชฒเชพเชตเซ เชเซ. เชเชพเชฒเซ เชเชชเชฃเซ เชเชพเชคเชจเซ เชเช เชเซเชฒเซเชจเชพ เชกเชฟเชฐเซเชเซเชเชฐ เชคเชฐเซเชเซ เชเชฒเซเชชเชจเชพ เชเชฐเซเช เชเซ เชคเซเชฐเชฃ เชชเซเชฐเชเชพเชฐเชจเชพ เชเชคเซเชชเชพเชฆเชจเซเชจเซเช เชเชคเซเชชเชพเชฆเชจ เชเชฐเซ เชเซ:
- x0 - เชฒเซเชจเซเชกเชฟเชเช เชชเซเชเชจเซเช เชตเซเชเชพเชฃ, 10 tr เชฅเซ.
- x1 - เชเซเชฐเซเชชเซเชฐเซเช เชตเซเชฌเชธเชพเชเชเซเชธ, 20 tr เชฅเซ.
- x2 - เชเชจเชฒเชพเชเชจ เชธเซเชเซเชฐเซเชธ, 30 tr เชฅเซ.
เช เชฎเชพเชฐเซ เชฎเซเชคเซเชฐเซเชชเซเชฐเซเชฃ เชเชพเชฐเซเชฏเชเชพเชฐเซ เชเซเชฎเชฎเชพเช เชเชพเชฐ เชเซเชจเชฟเชฏเชฐ, เชฌเซ เชฎเชฟเชกเชฒ เช เชจเซ เชเช เชธเชฟเชจเชฟเชฏเชฐเชจเซ เชธเชฎเชพเชตเซเชถ เชฅเชพเชฏ เชเซ. เชคเซเชฎเชจเชพ เชฎเชพเชธเชฟเช เชเชพเชฐเซเชฏ เชธเชฎเชฏ เชญเชเชกเซเชณ:
- เชเซเชจ:
4 * 150 = 600 ัะตะป * ัะฐั
, - เชฎเชงเซเชฏเชฎ
2 * 150 = 300 ัะตะป * ัะฐั
, - เชตเชฐเชฟเชทเซเช
150 ัะตะป * ัะฐั
.
เชชเซเชฐเชฅเชฎ เชเชชเชฒเชฌเซเชง เชเซเชจเชฟเชฏเชฐเชจเซ เชเช เชชเซเชฐเชเชพเชฐเชจเซ เชธเชพเชเช (x0, x1, x2), เชฎเชงเซเชฏเชฎ - (10, 20, 30), เชตเชฐเชฟเชทเซเช - (7, 15, 20) เชจเชพ เชตเชฟเชเชพเชธ เช เชจเซ เชเชฎเชพเชตเช เชชเชฐ เชเชฒเชพเชเซ (5, 10, 15) เชเชฐเซเชเชตเชพ เชฆเซ เชคเชฎเชพเชฐเชพ เชเซเชตเชจเชจเชพ เชถเซเชฐเซเชทเซเช เชธเชฎเชฏเชจเชพ เชเชฒเชพเชเซ.
เชเซเชเชชเชฃ เชธเชพเชฎเชพเชจเซเชฏ เชกเชฟเชฐเซเชเซเชเชฐเชจเซ เชเซเชฎ, เช
เชฎเซ เชฎเชพเชธเชฟเช เชจเชซเซ เชตเชงเชพเชฐเชตเชพ เชฎเชพเชเชเซเช เชเซเช. เชธเชซเชณเชคเชพเชจเซเช เชชเซเชฐเชฅเชฎ เชชเชเชฒเซเช เช เชเชฆเซเชฆเซเชถเซเชฏ เชเชพเชฐเซเชฏ เชฒเชเชตเชพเชจเซเช เชเซ value
เชฆเชฐ เชฎเชนเชฟเชจเซ เชเชคเซเชชเชพเชฆเชฟเชค เชเชคเซเชชเชพเชฆเชจเซเชฎเชพเชเชฅเซ เชเชตเชเชจเซ เชฐเชเชฎ เชคเชฐเซเชเซ:
def value(x):
return - 10*x[0] - 20*x[1] - 30*x[2]
เช เชเซเช เชญเซเชฒ เชจเชฅเซ; เชเซเชฏเชพเชฐเซ เชฎเชนเชคเซเชคเชฎเชจเซ เชถเซเชง เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชคเซเชฏเชพเชฐเซ เชเชฆเซเชฆเซเชถเซเชฏ เชเชพเชฐเซเชฏ เชตเชฟเชฐเซเชฆเซเชง เชเชฟเชนเซเชจ เชธเชพเชฅเซ เชเชเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
เชเชเชณเชจเซเช เชชเชเชฒเซเช เช เชเซ เชเซ เช เชฎเชพเชฐเชพ เชเชฐเซเชฎเชเชพเชฐเซเชเชจเซ เชตเชงเชพเชฐเซ เชเชพเชฎ เชเชฐเชตเชพเชฅเซ เชชเซเชฐเชคเชฟเชฌเชเชงเชฟเชค เชเชฐเชตเซเช เช เชจเซ เชเชพเชฎเชจเชพ เชเชฒเชพเชเซ เชชเชฐ เชจเชฟเชฏเชเชคเซเชฐเชฃเซ เชฆเชพเชเชฒ เชเชฐเชตเชพ:
เชธเชฎเชเชเซเชท เชถเซเช เชเซ:
ineq_cons = {'type': 'ineq',
'fun': lambda x: np.array ([600 - 10 * x [0] - 20 * x [1] - 30 * x[2],
300 - 7 * x [0] - 15 * x [1] - 20 * x[2],
150 - 5 * x [0] - 10 * x [1] - 15 * x[2]])
}
เชเชชเชเชพเชฐเชฟเช เชชเซเชฐเชคเชฟเชฌเชเชง เช เชเซ เชเซ เชเชคเซเชชเชพเชฆเชจเชจเซเช เชเชเชเชชเซเช เชฎเชพเชคเซเชฐ เชนเชเชพเชฐเชพเชคเซเชฎเช เชนเซเชตเซเช เชเซเชเช:
bnds = Bounds ([0, 0, 0], [np.inf, np.inf, np.inf])
เช
เชจเซ เชเซเชฒเซเชฒเซ, เชธเซเชฅเซ เชฐเซเชเซ เชงเชพเชฐเชฃเชพ เช เชเซ เชเซ เชจเซเชเซ เชเชฟเชเชฎเชค เช
เชจเซ เชเชเซเช เชเซเชฃเชตเชคเซเชคเชพเชจเซ เชเชพเชฐเชฃเซ, เชธเชเชคเซเชทเซเช เชเซเชฐเชพเชนเชเซเชจเซ เชเชคเชพเชฐ เช
เชฎเชพเชฐเชพ เชฎเชพเชเซ เชธเชคเชค เชเชญเซ เชฐเชนเซ เชเซ. เชชเซเชฐเชคเชฟเชฌเชเชงเชฟเชค เชเชชเซเชเชฟเชฎเชพเชเชเซเชถเชจ เชธเชฎเชธเซเชฏเชพเชจเซ เชเชเซเชฒเชตเชพเชจเซ เชเชงเชพเชฐเซ เช
เชฎเซ เชฎเชพเชธเชฟเช เชเชคเซเชชเชพเชฆเชจ เชตเซเชฒเซเชฏเซเชฎ เชเชพเชคเซ เชชเชธเชเชฆ เชเชฐเซ เชถเชเซเช เชเซเช scipy.optimize
:
x0 = np.array([10, 10, 10])
res = minimize(value, x0, method='SLSQP', constraints=ineq_cons, bounds=bnds)
print(res.x)
[7.85714286 5.71428571 3.57142857]
เชเชพเชฒเซ เชธเชเชชเซเชฐเซเชฃ เชธเชเชเซเชฏเชพเช เชชเชฐ เชขเซเชฒเซ เชฐเซเชคเซ เชฐเชพเชเชจเซเชก เชเชฐเซเช เช
เชจเซ เชเชคเซเชชเชพเชฆเชจเซเชจเชพ เชถเซเชฐเซเชทเซเช เชตเชฟเชคเชฐเชฃ เชธเชพเชฅเซ เชฐเซเชตเชฐเซเชธเชจเชพ เชฎเชพเชธเชฟเช เชญเชพเชฐเชจเซ เชเชฃเชคเชฐเซ เชเชฐเซเช x = (8, 6, 3)
:
- เชเซเชจ:
8 * 10 + 6 * 20 + 3 * 30 = 290 ัะตะป * ัะฐั
; - เชฎเชงเซเชฏเชฎ
8 * 7 + 6 * 15 + 3 * 20 = 206 ัะตะป * ัะฐั
; - เชตเชฐเชฟเชทเซเช
8 * 5 + 6 * 10 + 3 * 15 = 145 ัะตะป * ัะฐั
.
เชจเชฟเชทเซเชเชฐเซเชท: เชจเชฟเชฐเซเชฆเซเชถเชเชจเซ เชคเซเชจเซ เชธเชพเชฐเซ เชฐเซเชคเซ เชฒเชพเชฏเช เชฎเชนเชคเซเชคเชฎ เชชเซเชฐเชพเชชเซเชค เชเชฐเชตเชพ เชฎเชพเชเซ, เชฆเชฐ เชฎเชนเชฟเชจเซ 8 เชฒเซเชจเซเชกเชฟเชเช เชชเซเชทเซเช เซ, 6 เชฎเชงเซเชฏเชฎ เชเชฆเชจเซ เชธเชพเชเชเซเชธ เช เชจเซ 3 เชธเซเชเซเชฐเซเชธ เชฌเชจเชพเชตเชตเชพเชจเซเช เชถเซเชฐเซเชทเซเช เชเซ. เช เชเชฟเชธเซเชธเชพเชฎเชพเช, เชธเชฟเชจเชฟเชฏเชฐเซ เชฎเชถเซเชจเชฎเชพเชเชฅเซ เชเชชเชฐ เชเซเชฏเชพ เชตเชฟเชจเชพ เชนเชณ เชเชฒเชพเชตเชตเซเช เชเซเชเช, เชฎเชฟเชกเชฒเซเชธเชจเซ เชญเชพเชฐ เชเชถเชฐเซ 2/3 เชนเชถเซ, เชเซเชจเชฟเชฏเชฐ เช เชกเชงเชพ เชเชฐเชคเชพเช เชเชเซ เชนเชถเซ.
เชจเชฟเชทเซเชเชฐเซเชท
เชฒเซเช เชชเซเชเซเช เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเชพ เชฎเชพเชเซเชจเซ เชฎเซเชณเชญเซเชค เชคเชเชจเซเชเซเชจเซ เชฐเซเชชเชฐเซเชเชพ เชเชชเซ เชเซ scipy.optimize
, เชถเชฐเชคเซ เชจเซเชฏเซเชจเชคเชฎ เชธเชฎเชธเซเชฏเชพเช เชเชเซเชฒเชตเชพ เชฎเชพเชเซ เชตเชชเชฐเชพเชฏ เชเซ. เช
เชเชเชค เชฐเซเชคเซ เชนเซเช เชเชชเชฏเซเช เชเชฐเซเช เชเซเช scipy
เชเซเชตเชณ เชถเซเชเซเชทเชฃเชฟเช เชนเซเชคเซเช เชฎเชพเชเซ, เชคเซเชฅเซ เช เชเชชเซเชฒ เชเชฆเชพเชนเชฐเชฃ เชเชตเชพ เชนเชพเชธเซเชฏเชเชจเช เชชเซเชฐเชเซเชคเชฟเชจเซเช เชเซ.
เชเชฃเชพ เชฌเชงเชพ เชธเชฟเชฆเซเชงเชพเชเชค เช
เชจเซ เชตเชฐเซเชเซเชฏเซเช
เชฒ เชเชฆเชพเชนเชฐเชฃเซ เชฎเชณเซ เชถเชเซ เชเซ, เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, I.L. Akulich เชฆเซเชตเชพเชฐเชพ เชชเซเชธเซเชคเช "เชเชฆเชพเชนเชฐเชฃ เช
เชจเซ เชธเชฎเชธเซเชฏเชพเชเชฎเชพเช เชเชพเชฃเชฟเชคเชฟเช เชชเซเชฐเซเชเซเชฐเชพเชฎเชฟเชเช." เชตเชงเซ เชนเชพเชฐเซเชกเชเซเชฐ เชเชชเซเชฒเชฟเชเซเชถเชจ scipy.optimize
เชเชฌเซเชเชจเชพ เชธเชฎเซเชนเชฎเชพเชเชฅเซ 3D เชฎเชพเชณเชเซเช เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ (
เชฎเชพเชนเชฟเชคเซเชจเซ เชฎเซเชเซเชฏ เชธเซเชคเซเชฐเซเชค เชเซ scipy
เชธเซเชตเชพเชเชค
ะกะฟะฐัะธะฑะพ
เชธเซเชฐเซเชธ: www.habr.com