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

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨