SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ

SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ

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 āωāĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇ EQSQP āϏāĻŽāϤāĻžāϰ āĻĢāĻ°ā§āĻŽā§‡āϰ āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻžāϰ āϏāĻžāĻĨ⧇ āϏāĻŽāĻ¸ā§āϝāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻŦāĻ‚ āĻ…āύ āĻŸā§āϰāĻŋāĻĒ āĻ…āϏāĻŽāϤāĻžāϰ āφāĻ•āĻžāϰ⧇ āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻžāϰ āϏāĻŽāĻ¸ā§āϝāĻžāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝāĨ¤ āωāĻ­āϝāĻŧ āĻĒāĻĻā§āϧāϤāĻŋāχ āφāĻ¤ā§āĻŽāĻŦāĻŋāĻļā§āĻŦāĻžāϏ āĻ…āĻžā§āϚāϞ⧇ āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧ āĻ¨ā§āϝ⧂āύāϤāĻŽ āϖ⧁āρāĻœā§‡ āĻŦ⧇āϰ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻ…ā§āϝāĻžāϞāĻ—āϰāĻŋāĻĻāĻŽ āĻĻā§āĻŦāĻžāϰāĻž āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰāĻž āĻšāϝāĻŧ āĻāĻŦāĻ‚ āĻŦāĻĄāĻŧ āφāĻ•āĻžāϰ⧇āϰ āϏāĻŽāĻ¸ā§āϝāĻžāϰ āϜāĻ¨ā§āϝ āωāĻĒāϝ⧁āĻ•ā§āϤāĨ¤

āϏāĻžāϧāĻžāϰāĻŖ āφāĻ•āĻžāϰ⧇ āĻ¨ā§āϝ⧂āύāϤāĻŽ āϖ⧁āρāĻœā§‡ āĻĒāĻžāĻ“āϝāĻŧāĻžāϰ āϏāĻŽāĻ¸ā§āϝāĻžāϰ āĻ—āĻžāĻŖāĻŋāϤāĻŋāĻ• āϏ⧂āĻ¤ā§āϰ:

SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ

SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ

SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ

āĻ•āĻ ā§‹āϰ āϏāĻŽāϤāĻž āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻžāϰ āϜāĻ¨ā§āϝ, āύāĻŋāĻŽā§āύ āϏ⧀āĻŽāĻžāϟāĻŋ āωāĻĒāϰ⧇āϰ āϏ⧀āĻŽāĻžāϰ āϏāĻŽāĻžāύ āϏ⧇āϟ āĻ•āϰāĻž āĻšāϝāĻŧ SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ.
āĻāĻ•āϟāĻŋ āĻāĻ•āĻŽā§āĻ–ā§€ āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻžāϰ āϜāĻ¨ā§āϝ, āωāĻĒāϰ⧇āϰ āĻŦāĻž āύāĻŋāĻŽā§āύ āϏ⧀āĻŽāĻž āϏ⧇āϟ āĻ•āϰāĻž āĻšāϝāĻŧ np.inf āϏāĻ‚āĻļā§āϞāĻŋāĻˇā§āϟ āϚāĻŋāĻšā§āύ āĻĻāĻŋāϝāĻŧ⧇āĨ¤
āĻĻ⧁āϟāĻŋ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ⧇āϰ āĻāĻ•āϟāĻŋ āĻĒāϰāĻŋāϚāĻŋāϤ āϰ⧋āĻœā§‡āύāĻŦā§āϰāĻ• āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āĻ¨ā§āϝ⧂āύāϤāĻŽ āϏāĻ¨ā§āϧāĻžāύ āĻ•āϰāĻž āĻĒā§āϰāϝāĻŧā§‹āϜāύ:

SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ

āĻāχ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻžāϗ⧁āϞāĻŋ āĻāϰ āϏāĻ‚āĻœā§āĻžāĻžāϰ āĻĄā§‹āĻŽā§‡āύ⧇ āϏ⧇āϟ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇:

SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ

SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ

SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ

SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ

SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ

SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ

āφāĻŽāĻžāĻĻ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āĻĒāϝāĻŧ⧇āĻ¨ā§āϟ āĻ āĻāĻ•āϟāĻŋ āĻ…āύāĻ¨ā§āϝ āϏāĻŽāĻžāϧāĻžāύ āφāϛ⧇ SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ, āϝāĻžāϰ āϜāĻ¨ā§āϝ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻĒā§āϰāĻĨāĻŽ āĻāĻŦāĻ‚ āϚāϤ⧁āĻ°ā§āĻĨ āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻž āĻŦ⧈āϧāĨ¤
āφāϏ⧁āύ āύ⧀āĻšā§‡ āĻĨ⧇āϕ⧇ āωāĻĒāϰ⧇ āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻžāϰ āĻŽāĻ§ā§āϝ āĻĻāĻŋāϝāĻŧ⧇ āϝāĻžāĻ“āϝāĻŧāĻž āϝāĻžāĻ• āĻāĻŦāĻ‚ āφāĻŽāϰāĻž āϕ⧀āĻ­āĻžāĻŦ⧇ āϏ⧇āϗ⧁āϞāĻŋāϕ⧇ āĻ¸ā§āĻ•āĻŋāĻĒāĻŋāϤ⧇ āϞāĻŋāĻ–āϤ⧇ āĻĒāĻžāϰāĻŋ āϤāĻž āĻĻ⧇āĻ–āĻŋāĨ¤
āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻž SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ и SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ āĻāϰ Bounds āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāϟāĻŋ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰāĻž āϝāĻžāĻ•āĨ¤

from scipy.optimize import Bounds
bounds = Bounds ([0, -0.5], [1.0, 2.0])

āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻž SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ и SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ āφāϏ⧁āύ āĻāϟāĻŋ āϞāĻŋāύāĻŋāϝāĻŧāĻžāϰ āφāĻ•āĻžāϰ⧇ āϞāĻŋāĻ–āĻŋ:

SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ

āφāϏ⧁āύ āĻāχ āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻžāϗ⧁āϞāĻŋāϕ⧇ āϞāĻŋāύāĻŋāϝāĻŧāĻžāϰ āĻ•āύāĻ¸ā§āĻŸā§āϰ⧇āĻ¨ā§āϟ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻšāĻŋāϏāĻžāĻŦ⧇ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰāĻŋ:

import numpy as np
from scipy.optimize import LinearConstraint
linear_constraint = LinearConstraint ([[1, 2], [2, 1]], [-np.inf, 1], [1, 1])

āĻāĻŦāĻ‚ āĻ…āĻŦāĻļ⧇āώ⧇ āĻŽā§āϝāĻžāĻŸā§āϰāĻŋāĻ•ā§āϏ āφāĻ•āĻžāϰ⧇ āĻ…āϰ⧈āĻ–āĻŋāĻ• āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻž:

SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ

āφāĻŽāϰāĻž āĻāχ āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻžāϰ āϜāĻ¨ā§āϝ āĻœā§āϝāĻžāϕ⧋āĻŦāĻŋāϝāĻŧāĻžāύ āĻŽā§āϝāĻžāĻŸā§āϰāĻŋāĻ•ā§āϏāϕ⧇ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰāĻŋ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āχāĻšā§āĻ›āĻžāĻ•ā§ƒāϤ āϭ⧇āĻ•ā§āϟāϰ⧇āϰ āϏāĻžāĻĨ⧇ āĻšā§‡āϏāĻŋāϝāĻŧāĻžāύ āĻŽā§āϝāĻžāĻŸā§āϰāĻŋāĻ•ā§āϏ⧇āϰ āĻāĻ•āϟāĻŋ āϰ⧈āĻ–āĻŋāĻ• āϏāĻŽāĻ¨ā§āĻŦāϝāĻŧāĨ¤ SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ:

SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ

SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ

āĻāĻ–āύ āφāĻŽāϰāĻž āĻāĻ•āϟāĻŋ āĻ…āϰ⧈āĻ–āĻŋāĻ• āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻžāϕ⧇ āĻāĻ•āϟāĻŋ āĻŦāĻ¸ā§āϤ⧁ āĻšāĻŋāϏāĻžāĻŦ⧇ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ 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)

āĻšā§‡āϏāĻŋāϝāĻŧāĻžāύ āĻŽā§āϝāĻžāĻŸā§āϰāĻŋāĻ•ā§āϏ āĻ—āĻŖāύāĻž āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ āĻ…āύ⧇āĻ• āĻĒā§āϰāĻšā§‡āĻˇā§āϟāĻž āĻĒā§āϰāϝāĻŧā§‹āϜāύ, āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ āĻ•ā§āϞāĻžāϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ 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 āĻĒāĻĻā§āϧāϤāĻŋāϟāĻŋ āĻĢāĻ°ā§āĻŽā§‡ āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ āĻŽāĻŋāύāĻŋāĻŽāĻžāχāϜ āĻ•āϰāĻžāϰ āϏāĻŽāĻ¸ā§āϝāĻž āϏāĻŽāĻžāϧāĻžāύ⧇āϰ āϜāĻ¨ā§āϝ āĻĄāĻŋāϜāĻžāχāύ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇:

SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ

SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ

SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ

SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ

āϝ⧇āĻ–āĻžāύ⧇ SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ и SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ — āϏāĻŽāϤāĻž āĻŦāĻž āĻ…āϏāĻŽāϤāĻžāϰ āφāĻ•āĻžāϰ⧇ āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻž āĻŦāĻ°ā§āĻŖāύāĻž āĻ•āϰ⧇ āĻ…āĻ­āĻŋāĻŦā§āϝāĻ•ā§āϤāĻŋāϰ āϏ⧂āϚāϕ⧇āϰ āϏ⧇āϟāĨ¤ SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ — āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āϏāĻ‚āĻœā§āĻžāĻžāϰ āĻĄā§‹āĻŽā§‡āύ⧇āϰ āϜāĻ¨ā§āϝ āύāĻŋāĻŽā§āύ āĻāĻŦāĻ‚ āωāĻĒāϰ⧇āϰ āϏ⧀āĻŽāĻžāϰ āϏ⧇āϟāĨ¤

āϰ⧈āĻ–āĻŋāĻ• āĻāĻŦāĻ‚ āĻ…āϰ⧈āĻ–āĻŋāĻ• āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻžāϗ⧁āϞāĻŋ āϕ⧀ āϏāĻš āĻ…āĻ­āĻŋāϧāĻžāύ āφāĻ•āĻžāϰ⧇ āĻŦāĻ°ā§āĻŖāύāĻž āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ 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]

āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻ¤ā§āϰ⧁āϟāĻŋ āύāϝāĻŧ; āϏāĻ°ā§āĻŦāĻžāϧāĻŋāĻ• āĻ…āύ⧁āϏāĻ¨ā§āϧāĻžāύ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ, āωāĻĻā§āĻĻ⧇āĻļā§āϝ āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ āĻŦāĻŋāĻĒāϰ⧀āϤ āϚāĻŋāĻšā§āύ āĻĻāĻŋāϝāĻŧ⧇ āϛ⧋āϟ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻĒāĻĻāĻ•ā§āώ⧇āĻĒ āĻšāϞ āφāĻŽāĻžāĻĻ⧇āϰ āĻ•āĻ°ā§āĻŽā§€āĻĻ⧇āϰ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻ•āĻžāϜ āĻ•āϰāĻž āĻĨ⧇āϕ⧇ āύāĻŋāώ⧇āϧ āĻ•āϰāĻž āĻāĻŦāĻ‚ āĻ•āĻžāĻœā§‡āϰ āϘāĻ¨ā§āϟāĻžāϰ āωāĻĒāϰ āĻŦāĻŋāϧāĻŋāύāĻŋāώ⧇āϧ āĻĒā§āϰāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻž:

SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ

āϏāĻŽāϤ⧁āĻ˛ā§āϝ āĻ•āĻŋ:

SciPy, āĻļāĻ°ā§āϤ āϏāĻš āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ

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 āĻ•āĻžāĻ āĻžāĻŽā§‹ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ (HabrÊ āύāĻŋāĻŦāĻ¨ā§āϧ) āĻ āĻĻ⧇āĻ–āĻž āϝāĻžāĻŦ⧇ āĻ¸ā§āĻ•āĻŋāĻĒāĻŋ-āϰāĻžāĻ¨ā§āύāĻžāϰ āĻŦāχ.

āϤāĻĨā§āϝ⧇āϰ āĻĒā§āϰāϧāĻžāύ āĻ‰ā§ŽāϏ āĻšāϞ docs.scipy.orgāϝāĻžāϰāĻž āĻāχ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻŦāĻŋāĻ­āĻžāϗ⧇āϰ āĻ…āύ⧁āĻŦāĻžāĻĻ⧇ āĻ…āĻŦāĻĻāĻžāύ āϰāĻžāĻ–āϤ⧇ āχāĻšā§āϛ⧁āĻ• scipy āĻ¸ā§āĻŦāĻžāĻ—āϤāĻŽ GitHub.

ĐĄĐŋĐ°ŅĐ¸ĐąĐž āĻŽā§‡āĻĢāĻŋāĻ¸ā§āĻŸā§‹āĻĢāĻŋāϏ āĻĒā§āϰāĻ•āĻžāĻļāύāĻžāϰ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤāĻŋāϤ⧇ āĻ…āĻ‚āĻļāĻ—ā§āϰāĻšāϪ⧇āϰ āϜāĻ¨ā§āϝāĨ¤

āωāĻ¤ā§āϏ: www.habr.com

āĻāĻ•āϟāĻŋ āĻŽāĻ¨ā§āϤāĻŦā§āϝ āϜ⧁āĻĄāĻŧ⧁āύ