
SciPy(sai Pie๋ก ๋ฐ์)๋ C ๋ฐ Fortran ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํฌํจํ๋ numpy ๊ธฐ๋ฐ ์ํ ํจํค์ง์ ๋๋ค. SciPy๋ ๋ํํ Python ์ธ์ ์ MATLAB, IDL, Octave, R ๋๋ SciLab๊ณผ ๊ฐ์ ์์ ํ ๋ฐ์ดํฐ ๊ณผํ ํ๊ฒฝ์ผ๋ก ์ ํํฉ๋๋ค.
์ด ๊ธฐ์ฌ์์๋ scipy.optimize ํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ๋ณ์์ ์ค์นผ๋ผ ํจ์์ ๋ํ ์กฐ๊ฑด๋ถ ์ต์ ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ํ์ ํ๋ก๊ทธ๋๋ฐ์ ๊ธฐ๋ณธ ๊ธฐ์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ ์ฝ ์๋ ์ต์ ํ ์๊ณ ๋ฆฌ์ฆ์ ์ด๋ฏธ ๋ค์์์ ๋ ผ์๋์์ต๋๋ค. . scipy ๊ธฐ๋ฅ์ ๋ํ ๋ ์์ธํ ์ต์ ๋์๋ง์ help() ๋ช ๋ น, Shift+Tab ๋๋ .
์๊ฐ
scipy.optimize ํจํค์ง์ ์กฐ๊ฑด๋ถ ์ต์ ํ ๋ฌธ์ ์ ์ ์ฝ ์๋ ์ต์ ํ ๋ฌธ์ ๋ฅผ ๋ชจ๋ ํด๊ฒฐํ๊ธฐ ์ํ ๊ณตํต ์ธํฐํ์ด์ค๋ ๋ค์ ํจ์๋ก ์ ๊ณต๋ฉ๋๋ค. minimize(). ๊ทธ๋ฌ๋ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ณดํธ์ ์ธ ๋ฐฉ๋ฒ์ ์๋ค๋ ๊ฒ์ด ์๋ ค์ ธ ์์ผ๋ฏ๋ก, ์ธ์ ๋ ๊ทธ๋ ๋ฏ์ด ์ ์ ํ ๋ฐฉ๋ฒ์ ์ ํํ๋ ๊ฒ์ ์ฐ๊ตฌ์์ ๋ชซ์
๋๋ค.
์ ์ ํ ์ต์ ํ ์๊ณ ๋ฆฌ์ฆ์ ํจ์ ์ธ์๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ ๋ฉ๋๋ค. minimize(..., method="").
์ฌ๋ฌ ๋ณ์์ ํจ์์ ๋ํ ์กฐ๊ฑด๋ถ ์ต์ ํ๋ฅผ ์ํด ๋ค์ ๋ฐฉ๋ฒ์ ๊ตฌํํ ์ ์์ต๋๋ค.
trust-constrโ ์ ๋ขฐ ์์ญ์์ ์ง์ญ ์ต์๊ฐ์ ๊ฒ์ํฉ๋๋ค. , ;SLSQPโ ์ ์ฝ ์กฐ๊ฑด์ด ์๋ ์์ฐจ XNUMX์ฐจ ๊ณํ๋ฒ, ๋ผ๊ทธ๋์ฃผ ์์คํ ์ ํด๊ฒฐํ๊ธฐ ์ํ ๋ดํด ๋ฐฉ์. .TNC- Truncated Newton ์ ์ฝ์ด ์๊ณ ๋ฐ๋ณต ํ์๊ฐ ์ ํ๋์ด ์์ผ๋ฉฐ ๋ ๋ฆฝ ๋ณ์๊ฐ ๋ง์ ๋น์ ํ ํจ์์ ์ ํฉํฉ๋๋ค. .L-BFGS-Bโ BroydenโFletcherโGoldfarbโShanno ํ์ ๋ฐฉ๋ฒ์ผ๋ก ํค์ธ ํ๋ ฌ์์ ๋ฒกํฐ๋ฅผ ๋ถ๋ถ์ ์ผ๋ก ๋ก๋ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์๋น๋ฅผ ์ค์ด๋๋ก ๊ตฌํ๋์์ต๋๋ค. , .COBYLAโ ์ ํ ๊ทผ์ฌ๋ฅผ ํตํ MARE ์ ์ฝ ์ต์ ํ, ์ ํ ๊ทผ์ฌ๋ฅผ ํตํ ์ ์ฝ ์ต์ ํ(๊ทธ๋ผ๋์ธํธ ๊ณ์ฐ ์์). .
์ ํํ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ๋ฌธ์ ํด๊ฒฐ์ ์ํ ์กฐ๊ฑด๊ณผ ์ ํ ์ฌํญ์ด ๋ค๋ฅด๊ฒ ์ค์ ๋ฉ๋๋ค.
- ํด๋์ค ๊ฐ์ฒด
BoundsL-BFGS-B, TNC, SLSQP, trust-constr ๋ฐฉ๋ฒ์ ๊ฒฝ์ฐ; - ๋ชฉ๋ก
(min, max)๋์ผํ ๋ฐฉ๋ฒ์ผ๋ก L-BFGS-B, TNC, SLSQP, trust-constr; - ๊ฐ์ฒด ๋๋ ๊ฐ์ฒด ๋ชฉ๋ก
LinearConstraint,NonlinearConstraintCOBYLA, SLSQP, trust-constr ๋ฐฉ๋ฒ์ ๊ฒฝ์ฐ; - ์ฌ์ ๋๋ ์ฌ์ ๋ชฉ๋ก
{'type':str, 'fun':callable, 'jac':callable,opt, 'args':sequence,opt}COBYLA, SLSQP ๋ฐฉ๋ฒ์ ๊ฒฝ์ฐ.
๊ธฐ์ฌ ๊ฐ์:
1) ๊ฐ์ฒด๋ก ์ง์ ๋ ์ ์ฝ ์กฐ๊ฑด์ ์ฌ์ฉํ์ฌ ์ ๋ขฐ ์์ญ(method="trust-constr")์์ ์กฐ๊ฑด๋ถ ์ต์ ํ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉ์ ๊ณ ๋ คํฉ๋๋ค. Bounds, LinearConstraint, NonlinearConstraint ;
2) ์ฌ์ ํ์์ผ๋ก ์ง์ ๋ ์ ํ ์ฌํญ์ ์ฌ์ฉํ์ฌ ์ต์ ์ ๊ณฑ๋ฒ(๋ฐฉ๋ฒ = "SLSQP")์ ์ฌ์ฉํ๋ ์์ฐจ ํ๋ก๊ทธ๋๋ฐ์ ๊ณ ๋ คํฉ๋๋ค. {'type', 'fun', 'jac', 'args'};
3) ์น์คํ๋์ค๋ฅผ ์ฌ๋ก๋ก ์ ์๋ ์ ํ์ ์ต์ ํ ์ฌ๋ก๋ฅผ ๋ถ์ํ๋ค.
์กฐ๊ฑด๋ถ ์ต์ ํ ๋ฐฉ๋ฒ="trust-constr"
๋ฐฉ๋ฒ์ ๊ตฌํ trust-constr ๊ธฐ๋ฐ์ผ๋ก ํ๋ฑ์ ํํ์ ๋ํ ์ ์ฝ๊ณผ ๊ด๋ จ๋ ๋ฌธ์ ๋ถํ๋ฑ ํํ์ ์ ์ฝ ์กฐ๊ฑด์ด ์๋ ๋ฌธ์ ์ ๊ฒฝ์ฐ. ๋ ๋ฐฉ๋ฒ ๋ชจ๋ ์ ๋ขฐ ์์ญ์์ ๊ตญ์ ์ต์๊ฐ์ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๊ตฌํ๋๋ฉฐ ๋๊ท๋ชจ ๋ฌธ์ ์ ๋งค์ฐ ์ ํฉํฉ๋๋ค.
์ผ๋ฐ์ ์ธ ํํ๋ก ์ต์๊ฐ์ ์ฐพ๋ ๋ฌธ์ ์ ์ํ์ ๊ณต์ํ:



์๊ฒฉํ ๋๋ฑ ์ ์ฝ ์กฐ๊ฑด์ ๊ฒฝ์ฐ ํํ์ ์ํ๊ณผ ๋์ผํ๊ฒ ์ค์ ๋ฉ๋๋ค.
.
๋จ๋ฐฉํฅ ์ ์ฝ์กฐ๊ฑด์ ๊ฒฝ์ฐ ์ํ ๋๋ ํํ์ด ์ค์ ๋ฉ๋๋ค. np.inf ํด๋น ๊ธฐํธ๊ฐ ์์ต๋๋ค.
์๋ ค์ง ๋ ๋ณ์์ Rosenbrock ํจ์์ ์ต์๊ฐ์ ์ฐพ๋ ๊ฒ์ด ํ์ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.

์ด ๊ฒฝ์ฐ ์ ์ ์์ญ์ ๋ค์๊ณผ ๊ฐ์ ์ ํ ์ฌํญ์ด ์ค์ ๋ฉ๋๋ค.






์ฐ๋ฆฌ์ ๊ฒฝ์ฐ์๋ ๊ทธ ์์ ์ ๋
ํนํ ์๋ฃจ์
์ด ์์ต๋๋ค.
, ์ฒซ ๋ฒ์งธ์ ๋ค ๋ฒ์งธ ์ ํ์ฌํญ๋ง ์ ํจํฉ๋๋ค.
์ ํ ์ฌํญ์ ์๋์์ ์๋ก ์ดํด๋ณด๊ณ scipy์์ ์ด๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ ํ
ะธ
Bounds ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ํด ๋ณด๊ฒ ์ต๋๋ค.
from scipy.optimize import Bounds
bounds = Bounds ([0, -0.5], [1.0, 2.0])์ ํ
ะธ
์ ํ ํ์์ผ๋ก ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.

์ด๋ฌํ ์ ์ฝ ์กฐ๊ฑด์ LinearConstraint ๊ฐ์ฒด๋ก ์ ์ํด ๋ณด๊ฒ ์ต๋๋ค.
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)ํค์ธ ํ๋ ฌ์ ๊ณ์ฐํ ๋
๋ง์ ๋
ธ๋ ฅ์ด ํ์ํ๋ฏ๋ก ์์
์ ์ฌ์ฉํ ์ ์์ต๋๋ค . ๋ค์ ์ ๋ต์ ์ฌ์ฉํ ์ ์์ต๋๋ค. 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')์ ์ฝ ์กฐ๊ฑด์ ๋ํ ์ผ์ฝ๋น ํ๋ ฌ์ ์ ํ ์ฐจ๋ถ์ ์ฌ์ฉํ์ฌ ๊ณ์ฐํ ์๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ๊ฒฝ์ฐ ํค์ธ ํ๋ ฌ์ ์ ํ ์ฐจ๋ถ์ ์ฌ์ฉํ์ฌ ๊ณ์ฐํ ์ ์์ต๋๋ค. Hessian์ ํจ์๋ก ์ ์๋๊ฑฐ๋ 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)๋์์ ์ผ๋ก, ์ต์ ํ๋๋ ํจ์์ XNUMX์ฐจ ๋ํจ์์ XNUMX์ฐจ ๋ํจ์๋ฅผ ๊ทผ์ฌํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํค์ธ ํ๋ ฌ์ ๋ค์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ทผ์ฌํํ ์ ์์ต๋๋ค. 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 ]์ต์ ํ ์์
XNUMX์ฐจ ๊ธฐ์ ๊ตฌ์กฐ๋ก์ ์ ํ๊ณผ ๊ด๋ จํ์ฌ ์์ง๋ง ์์ ์ ์ธ ์์ ์ ๊ฐ์ ธ๋ค์ฃผ๋ ์น์คํ๋์ค๋ฅผ ์๋ก ๋ค์ด ์์ฐ ์ต์ ํ๋ฅผ ์ดํด๋ณด์. ์ฐ๋ฆฌ ์์ ์ด ์ธ ๊ฐ์ง ์ ํ์ ์ ํ์ ์์ฐํ๋ ์ฃผ๋ฐฉ์ ์ฑ ์์๋ผ๊ณ ์์ํด ๋ด ์๋ค.
- x0 - ๋๋ฉ ํ์ด์ง ํ๋งค, 10 tr๋ถํฐ.
- x1 - ๊ธฐ์ ์น์ฌ์ดํธ, 20 tr.
- x2 - 30 tr๋ถํฐ ์จ๋ผ์ธ ์์ .
์ฐ๋ฆฌ์ ์น์ ํ ์์ ํ์๋ ํ๋ฐฐ XNUMX๋ช , ์ค๊ฐ XNUMX๋ช , ์ ๋ฐฐ XNUMX๋ช ์ด ํฌํจ๋์ด ์์ต๋๋ค. ์๊ฐ ๊ทผ๋ฌด ์๊ฐ ๊ธฐ๊ธ:
- XNUMX์:
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) :
- XNUMX์:
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 ์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค .
๊ฐ์ฌ ์ถํ๋ฌผ ์ค๋น์ ์ฐธ์ฌํ๊ธฐ ์ํด.
์ถ์ฒ : habr.com
