SciPy (āĻāĻā§āĻāĻžāĻ°āĻŋāĻ¤ āĻ¸āĻžāĻ āĻĒāĻžāĻ) āĻšāĻ˛ āĻāĻāĻāĻŋ āĻ¨āĻŽā§āĻĒāĻŋ-āĻāĻŋāĻ¤ā§āĻ¤āĻŋāĻ āĻāĻŖāĻŋāĻ¤ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻ¯āĻžāĻ¤ā§ C āĻāĻŦāĻ Fortran āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋāĻ āĻ āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤ āĻĨāĻžāĻā§āĨ¤ SciPy āĻāĻĒāĻ¨āĻžāĻ° āĻāĻ¨ā§āĻāĻžāĻ°ā§āĻā§āĻāĻŋāĻ āĻĒāĻžāĻāĻĨāĻ¨ āĻ¸ā§āĻļāĻ¨āĻā§ MATLAB, IDL, Octave, R, āĻŦāĻž SciLab-āĻāĻ° āĻŽāĻ¤ā§ āĻāĻāĻāĻŋ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻĄā§āĻāĻž āĻŦāĻŋāĻā§āĻāĻžāĻ¨ āĻĒāĻ°āĻŋāĻŦā§āĻļā§ āĻĒāĻ°āĻŋāĻŖāĻ¤ āĻāĻ°ā§āĨ¤
āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§, āĻāĻŽāĻ°āĻž āĻāĻžāĻŖāĻŋāĻ¤āĻŋāĻ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻŋāĻāĻ¯āĻŧā§āĻ° āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ āĻā§āĻļāĻ˛āĻā§āĻ˛āĻŋ āĻĻā§āĻāĻŦ - scipy.optimize āĻĒā§āĻ¯āĻžāĻā§āĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ā§āĻ° āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻ˛āĻžāĻ° āĻĢāĻžāĻāĻļāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻļāĻ°ā§āĻ¤āĻ¸āĻžāĻĒā§āĻā§āĻˇ āĻ
āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻā§āĻļāĻ¨ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻ°āĻžāĨ¤ āĻ
āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŋāĻ¤ āĻ
āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻā§āĻļāĻžāĻ¨ āĻ
ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻāĻ˛ā§āĻāĻ¨āĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§
āĻā§āĻŽāĻŋāĻāĻž
scipy.optimize āĻĒā§āĻ¯āĻžāĻā§āĻā§ āĻļāĻ°ā§āĻ¤āĻ¸āĻžāĻĒā§āĻā§āĻˇ āĻāĻŦāĻ āĻ¸ā§āĻŽāĻžāĻšā§āĻ¨ āĻāĻāĻ¯āĻŧ āĻ
āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻā§āĻļāĻ¨ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ āĻĢāĻžāĻāĻļāĻ¨ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸āĻ°āĻŦāĻ°āĻžāĻš āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§ minimize()
. āĻ¯āĻžāĻāĻšā§āĻ, āĻāĻāĻŋ āĻāĻžāĻ¨āĻž āĻ¯āĻžāĻ¯āĻŧ āĻ¯ā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻ¨āĻ āĻ¸āĻ°ā§āĻŦāĻāĻ¨ā§āĻ¨ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻ¨ā§āĻ, āĻ¤āĻžāĻ āĻāĻāĻāĻŋ āĻĒāĻ°ā§āĻ¯āĻžāĻĒā§āĻ¤ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻĒāĻāĻ¨ā§āĻĻ, āĻ¸āĻ°ā§āĻŦāĻĻāĻž āĻšāĻŋāĻ¸āĻžāĻŦā§, āĻāĻŦā§āĻˇāĻā§āĻ° āĻāĻžāĻāĻ§ā§ āĻĒāĻĄāĻŧā§āĨ¤
āĻāĻĒāĻ¯ā§āĻā§āĻ¤ āĻ
āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻā§āĻļāĻžāĻ¨ āĻ
ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽ āĻĢāĻžāĻāĻļāĻ¨ āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧ minimize(..., method="")
.
āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ā§āĻ° āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻļāĻ¨ā§āĻ° āĻļāĻ°ā§āĻ¤āĻžāĻ§ā§āĻ¨ āĻ
āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻā§āĻļāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯, āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻā§āĻ˛āĻŋāĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻāĻĒāĻ˛āĻŦā§āĻ§:
trust-constr
â āĻāĻ¤ā§āĻŽāĻŦāĻŋāĻļā§āĻŦāĻžāĻ¸ āĻ āĻā§āĻāĻ˛ā§ āĻāĻāĻāĻŋ āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧ āĻ¸āĻ°ā§āĻŦāĻ¨āĻŋāĻŽā§āĻ¨ āĻ āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻāĻ°ā§āĻ¨āĨ¤āĻāĻāĻāĻŋ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ ,HabrÊ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ ;SLSQP
â āĻ¸ā§āĻŽāĻžāĻŦāĻĻā§āĻ§āĻ¤āĻž āĻ¸āĻš āĻ āĻ¨ā§āĻā§āĻ°āĻŽāĻŋāĻ āĻĻā§āĻŦāĻŋāĻāĻžāĻ¤ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻŋāĻ, āĻ˛ā§āĻ¯āĻžāĻā§āĻ°ā§āĻā§āĻ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻāĻāĻ¨āĻŋāĻ¯āĻŧāĻžāĻ¨ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĨ¤āĻāĻāĻāĻŋ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ .TNC
- āĻ¸āĻā§āĻā§āĻāĻŋāĻ¤ āĻ¨āĻŋāĻāĻāĻ¨ āĻ¸ā§āĻŽāĻžāĻŦāĻĻā§āĻ§, āĻ¸ā§āĻŽāĻŋāĻ¤ āĻ¸āĻāĻā§āĻ¯āĻ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋ, āĻŦāĻŋāĻĒā§āĻ˛ āĻ¸āĻāĻā§āĻ¯āĻ āĻ¸ā§āĻŦāĻžāĻ§ā§āĻ¨ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ āĻ¸āĻš āĻ āĻ°ā§āĻāĻŋāĻ āĻĢāĻžāĻāĻļāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻžāĻ˛āĨ¤āĻāĻāĻāĻŋ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ .L-BFGS-B
â BroydenâFletcherâGoldfarbâShanno āĻĻāĻ˛ā§āĻ° āĻāĻāĻāĻŋ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ, āĻ¯āĻž āĻšā§āĻ¸āĻŋāĻ¯āĻŧāĻžāĻ¨ āĻŽā§āĻ¯āĻžāĻā§āĻ°āĻŋāĻā§āĻ¸ āĻĨā§āĻā§ āĻā§āĻā§āĻāĻ°ā§āĻ° āĻāĻāĻļāĻŋāĻ āĻ˛ā§āĻĄ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻāĻžāĻ°āĻŖā§ āĻŽā§āĻŽāĻ°āĻŋāĻ° āĻāĻ°āĻ āĻāĻŽāĻŋāĻ¯āĻŧā§ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§āĨ¤āĻāĻāĻāĻŋ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ ,HabrÊ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ .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
āĻ¸āĻāĻļā§āĻ˛āĻŋāĻˇā§āĻ āĻāĻŋāĻšā§āĻ¨ āĻĻāĻŋāĻ¯āĻŧā§āĨ¤
āĻĻā§āĻāĻŋ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ā§āĻ° āĻāĻāĻāĻŋ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤ āĻ°ā§āĻā§āĻ¨āĻŦā§āĻ°āĻ āĻĢāĻžāĻāĻļāĻ¨ā§āĻ° āĻ¨ā§āĻ¯ā§āĻ¨āĻ¤āĻŽ āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻāĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨:
āĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻ¸ā§āĻŽāĻžāĻŦāĻĻā§āĻ§āĻ¤āĻžāĻā§āĻ˛āĻŋ āĻāĻ° āĻ¸āĻāĻā§āĻāĻžāĻ° āĻĄā§āĻŽā§āĻ¨ā§ āĻ¸ā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§:
āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ āĻāĻāĻāĻŋ āĻ
āĻ¨āĻ¨ā§āĻ¯ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻā§ , āĻ¯āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻāĻŦāĻ āĻāĻ¤ā§āĻ°ā§āĻĨ āĻ¸ā§āĻŽāĻžāĻŦāĻĻā§āĻ§āĻ¤āĻž āĻŦā§āĻ§āĨ¤
āĻāĻ¸ā§āĻ¨ āĻ¨ā§āĻā§ āĻĨā§āĻā§ āĻāĻĒāĻ°ā§ āĻ¸ā§āĻŽāĻžāĻŦāĻĻā§āĻ§āĻ¤āĻžāĻ° āĻŽāĻ§ā§āĻ¯ āĻĻāĻŋāĻ¯āĻŧā§ āĻ¯āĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻ āĻāĻŦāĻ āĻāĻŽāĻ°āĻž āĻā§āĻāĻžāĻŦā§ āĻ¸ā§āĻā§āĻ˛āĻŋāĻā§ āĻ¸ā§āĻāĻŋāĻĒāĻŋāĻ¤ā§ āĻ˛āĻŋāĻāĻ¤ā§ āĻĒāĻžāĻ°āĻŋ āĻ¤āĻž āĻĻā§āĻāĻŋāĨ¤
āĻ¸ā§āĻŽāĻžāĻŦāĻĻā§āĻ§āĻ¤āĻž и āĻāĻ° Bounds āĻ
āĻŦāĻā§āĻā§āĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻāĻŋ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°āĻž āĻ¯āĻžāĻāĨ¤
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')
āĻ¸ā§āĻŽāĻžāĻŦāĻĻā§āĻ§āĻ¤āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻ¯āĻžāĻā§āĻŦāĻŋāĻ¯āĻŧāĻžāĻ¨ āĻŽā§āĻ¯āĻžāĻā§āĻ°āĻŋāĻā§āĻ¸āĻ āĻ¸āĻ¸ā§āĻŽ āĻĒāĻžāĻ°ā§āĻĨāĻā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻŖāĻ¨āĻž āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻ¯āĻžāĻāĻšā§āĻ, āĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻšā§āĻ¸āĻŋāĻ¯āĻŧāĻžāĻ¨ āĻŽā§āĻ¯āĻžāĻā§āĻ°āĻŋāĻā§āĻ¸ āĻ¸āĻ¸ā§āĻŽ āĻĒāĻžāĻ°ā§āĻĨāĻā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻŖāĻ¨āĻž āĻāĻ°āĻž āĻ¯āĻžāĻŦā§ āĻ¨āĻžāĨ¤ 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)
āĻŦāĻŋāĻāĻ˛ā§āĻĒāĻāĻžāĻŦā§, āĻ
āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻ āĻāĻ°āĻž āĻĢāĻžāĻāĻļāĻ¨ā§āĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻāĻŦāĻ āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧ āĻĄā§āĻ°āĻŋāĻā§āĻāĻŋāĻ āĻāĻ¨ā§āĻŽāĻžāĻ¨āĻŋāĻ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻšā§āĻ¸āĻŋāĻ¯āĻŧāĻžāĻ¨ āĻĢāĻžāĻāĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻ¨ā§āĻŽāĻžāĻ¨āĻŋāĻ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§ 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 ŅĐĩĐģ * ŅĐ°Ņ
.
āĻĒā§āĻ°āĻĨāĻŽ āĻāĻĒāĻ˛āĻŦā§āĻ§ āĻā§āĻ¨āĻŋāĻ¯āĻŧāĻ°āĻā§ (0, 1, 2) āĻāĻ¨ā§āĻāĻž āĻŦā§āĻ¯āĻ¯āĻŧ āĻāĻ°āĻ¤ā§ āĻĻāĻŋāĻ¨ (x10, x20, x30), āĻŽāĻ§ā§āĻ¯āĻŽ - (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
āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖāĻ°ā§āĻĒā§ āĻāĻāĻžāĻĄā§āĻŽāĻŋāĻ āĻāĻĻā§āĻĻā§āĻļā§āĻ¯ā§, āĻ¯ā§ āĻāĻžāĻ°āĻŖā§ āĻĒā§āĻ°āĻĻāĻ¤ā§āĻ¤ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻāĻŋ āĻāĻŽāĻ¨ āĻāĻāĻāĻŋ āĻāĻŽāĻŋāĻ āĻĒā§āĻ°āĻā§āĻ¤āĻŋāĻ°āĨ¤
āĻ
āĻ¨ā§āĻ āĻ¤āĻ¤ā§āĻ¤ā§āĻŦ āĻāĻŦāĻ āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻāĻāĻ˛ āĻāĻā§āĻ˛āĻŋāĻā§āĻ° āĻŦāĻ "āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻāĻŦāĻ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻā§āĻ˛āĻŋāĻ¤ā§ āĻāĻžāĻŖāĻŋāĻ¤āĻŋāĻ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻŋāĻ"āĨ¤ āĻāĻ°ā§ āĻšāĻžāĻ°ā§āĻĄāĻā§āĻ° āĻ
ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ scipy.optimize
āĻāĻŦāĻŋāĻ° āĻāĻāĻāĻŋ āĻ¸ā§āĻ āĻĨā§āĻā§ āĻāĻāĻāĻŋ 3D āĻāĻžāĻ āĻžāĻŽā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ (
āĻ¤āĻĨā§āĻ¯ā§āĻ° āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻā§āĻ¸ āĻšāĻ˛ scipy
āĻ¸ā§āĻŦāĻžāĻāĻ¤āĻŽ
ĐĄĐŋĐ°ŅийО
āĻāĻ¤ā§āĻ¸: www.habr.com