SciPy, เจธเจผเจฐเจคเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจ…เจจเฉเจ•เฉ‚เจฒเจคเจพ

SciPy, เจธเจผเจฐเจคเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจ…เจจเฉเจ•เฉ‚เจฒเจคเจพ

SciPy (เจ‰เจšเจพเจฐเจฟเจ† เจธเจพเจˆ เจชเจพเจˆ) เจ‡เฉฑเจ• เจจเฉฐเจชเฉ€-เจ†เจงเจพเจฐเจฟเจค เจ—เจฃเจฟเจค เจชเฉˆเจ•เฉ‡เจœ เจนเฉˆ เจœเจฟเจธ เจตเจฟเฉฑเจš C เจ…เจคเฉ‡ Fortran เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€เจ†เจ‚ เจตเฉ€ เจธเจผเจพเจฎเจฒ เจนเจจเฅค SciPy เจคเฉเจนเจพเจกเฉ‡ เจ‡เฉฐเจŸเจฐเจเจ•เจŸเจฟเจต เจชเจพเจˆเจฅเจจ เจธเฉˆเจธเจผเจจ เจจเฉ‚เฉฐ MATLAB, IDL, Octave, R, เจœเจพเจ‚ SciLab เจตเจฐเจ—เฉ‡ เจธเฉฐเจชเฉ‚เจฐเจจ เจกเจพเจŸเจพ เจตเจฟเจ—เจฟเจ†เจจ เจตเจพเจคเจพเจตเจฐเจฃ เจตเจฟเฉฑเจš เจฌเจฆเจฒเจฆเจพ เจนเฉˆเฅค

เจ‡เจธ เจฒเฉ‡เจ– เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจ—เจฃเจฟเจคเจฟเจ• เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจฟเฉฐเจ— เจฆเฉ€เจ†เจ‚ เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจคเจ•เจจเฉ€เจ•เจพเจ‚ เจจเฉ‚เฉฐ เจฆเฉ‡เจ–เจพเจ‚เจ—เฉ‡ - scipy.optimize เจชเฉˆเจ•เฉ‡เจœ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจ•เจˆ เจตเฉ‡เจฐเฉ€เจเจฌเจฒเจพเจ‚ เจฆเฉ‡ เจ‡เฉฑเจ• เจธเจ•เฉ‡เจฒเจฐ เจซเฉฐเจ•เจธเจผเจจ เจฒเจˆ เจ•เฉฐเจกเฉ€เจธเจผเจจเจฒ เจ“เจชเจŸเฉ€เจฎเจพเจˆเจœเฉ‡เจธเจผเจจ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เจฐเจจเจพเฅค เจฌเฉ‡เจฐเฉ‹เจ• เจ…เจจเฉเจ•เฉ‚เจฒ เจ“เจชเจŸเฉ€เจฎเจพเจˆเจœเฉ‡เจธเจผเจจ เจเจฒเจ—เฉ‹เจฐเจฟเจฆเจฎ เจตเจฟเฉฑเจš เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจšเจฐเจšเจพ เจ•เฉ€เจคเฉ€ เจœเจพ เจšเฉเฉฑเจ•เฉ€ เจนเฉˆ เจ†เจ–เจฐเฉ€ เจฒเฉ‡เจ–. เจธเจ•เจพเจˆเจชเฉ€ เจซเฉฐเจ•เจธเจผเจจเจพเจ‚ 'เจคเฉ‡ เจตเจงเฉ‡เจฐเฉ‡ เจตเจฟเจธเจคเฉเจฐเจฟเจค เจ…เจคเฉ‡ เจจเจตเฉ€เจจเจคเจฎ เจฎเจฆเจฆ เจนเจฎเฉ‡เจธเจผเจพ help() เจ•เจฎเจพเจ‚เจก, Shift+Tab เจœเจพเจ‚ เจ…เฉฐเจฆเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเฉ€ เจœเจพ เจธเจ•เจฆเฉ€ เจนเฉˆเฅค เจ…เจงเจฟเจ•เจพเจฐเจค เจฆเจธเจคเจพเจตเฉ‡เจœเจผ.

เจœเจพเจฃ เจชเจ›เจพเจฃ

เจซเฉฐเจ•เจธเจผเจจ เจฆเฉเจ†เจฐเจพ scipy.optimize เจชเฉˆเจ•เฉ‡เจœ เจตเจฟเฉฑเจš เจธเจผเจฐเจคเฉ€เจ† เจ…เจคเฉ‡ เจฌเฉ‡เจฐเฉ‹เจ• เจ…เจจเฉเจ•เฉ‚เจฒ เจ…เจจเฉเจ•เฉ‚เจฒเจจ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจธเจพเจ‚เจเจพ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจชเฉเจฐเจฆเจพเจจ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆเฅค minimize(). เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจ‡เจน เจœเจพเจฃเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจ•เจฟ เจธเจพเจฐเฉ€เจ†เจ‚ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เจฐเจจ เจฒเจˆ เจ•เฉ‹เจˆ เจตเจฟเจ†เจชเจ• เจคเจฐเฉ€เจ•เจพ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจ‡เจธ เจฒเจˆ เจ‡เฉฑเจ• เจขเฉเจ•เจตเฉ€เจ‚ เจตเจฟเจงเฉ€ เจฆเฉ€ เจšเฉ‹เจฃ, เจนเจฎเฉ‡เจธเจผเจพ เจตเจพเจ‚เจ—, เจ–เฉ‹เจœเจ•เจฐเจคเจพ เจฆเฉ‡ เจฎเฉ‹เจขเจฟเจ†เจ‚ 'เจคเฉ‡ เจ†เจ‰เจ‚เจฆเฉ€ เจนเฉˆ.
เจซเฉฐเจ•เจธเจผเจจ เจ†เจฐเจ—เฉ‚เจฎเฉˆเจ‚เจŸ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ‰เจšเจฟเจค เจ…เจจเฉเจ•เฉ‚เจฒเจจ เจเจฒเจ—เฉ‹เจฐเจฟเจฆเจฎ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ minimize(..., method="").
เจ•เจˆ เจตเฉ‡เจฐเฉ€เจเจฌเจฒเจพเจ‚ เจฆเฉ‡ เจ‡เฉฑเจ• เจซเฉฐเจ•เจธเจผเจจ เจฆเฉ‡ เจ•เฉฐเจกเฉ€เจธเจผเจจเจฒ เจ“เจชเจŸเฉ€เจฎเจพเจˆเจœเฉ‡เจธเจผเจจ เจฒเจˆ, เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ เจคเจฐเฉ€เจ•เจฟเจ†เจ‚ เจฆเฉ‡ เจฒเจพเจ—เฉ‚เจ•เจฐเจจ เจ‰เจชเจฒเจฌเจง เจนเจจ:

  • trust-constr - เจตเจฟเจธเจผเจตเจพเจธ เจ–เฉ‡เจคเจฐ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเจฅเจพเจจเจ• เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ เจฆเฉ€ เจ–เฉ‹เจœ เจ•เจฐเฉ‹เฅค เจตเจฟเจ•เฉ€ เจฒเฉ‡เจ–, Habrรฉ 'เจคเฉ‡ เจฒเฉ‡เจ–;
  • SLSQP โ€” เจชเจพเจฌเฉฐเจฆเฉ€เจ†เจ‚ เจฆเฉ‡ เจจเจพเจฒ เจ•เฉเจฐเจฎเจตเจพเจฐ เจšเจคเฉเจฐเจญเฉเจœ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจฟเฉฐเจ—, เจฒเฉˆเจ—เจฐเฉ‡เจ‚เจœ เจธเจฟเจธเจŸเจฎ เจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เจฐเจจ เจฒเจˆ เจจเจฟเจŠเจŸเฉ‹เจจเฉ€เจ…เจจ เจตเจฟเจงเฉ€เฅค เจตเจฟเจ•เฉ€ เจฒเฉ‡เจ–.
  • TNC - เจ•เฉฑเจŸเจฟเจ† เจจเจฟเจŠเจŸเจจ เจธเฉ€เจฎเจค, เจธเฉ€เจฎเจค เจธเฉฐเจ–เจฟเจ† เจฆเฉเจนเจฐเจพเจ“, เจตเฉฑเจกเฉ€ เจ—เจฟเจฃเจคเฉ€ เจตเจฟเฉฑเจš เจธเฉเจคเฉฐเจคเจฐ เจตเฉ‡เจฐเฉ€เจเจฌเจฒเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจ—เฉˆเจฐ-เจฐเฉ‡เจ–เจฟเจ• เจซเฉฐเจ•เจธเจผเจจเจพเจ‚ เจฒเจˆ เจตเจงเฉ€เจ†เฅค เจตเจฟเจ•เฉ€ เจฒเฉ‡เจ–.
  • L-BFGS-B โ€” เจฌเฉเจฐเฉ‹เจเจกเจจโ€“เจซเจฒเฉ‡เจšเจฐโ€“เจ—เฉ‹เจฒเจกเจซเจพเจฐเจฌโ€“เจธเจผเฉˆเจจเฉ‹ เจŸเฉ€เจฎ เจฆเฉ€ เจ‡เฉฑเจ• เจตเจฟเจงเฉ€, เจนเฉˆเจธเฉ€เจ…เจจ เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ เจคเฉ‹เจ‚ เจตเฉˆเจ•เจŸเจฐเจพเจ‚ เจฆเฉ‡ เจ…เฉฐเจธเจผเจ• เจฒเฉ‹เจกเจฟเฉฐเจ— เจ•เจพเจฐเจจ เจ˜เฉฑเจŸ เจฎเฉˆเจฎเฉ‹เจฐเฉ€ เจ–เจชเจค เจจเจพเจฒ เจฒเจพเจ—เฉ‚ เจ•เฉ€เจคเฉ€ เจ—เจˆเฅค เจตเจฟเจ•เฉ€ เจฒเฉ‡เจ–, Habrรฉ 'เจคเฉ‡ เจฒเฉ‡เจ–.
  • COBYLA โ€” เจฐเฉ‡เจ–เจฟเจ• เจ…เจจเฉเจฎเจพเจจ เจฆเฉเจ†เจฐเจพ MARE เจธเฉ€เจฎเจค เจ…เจจเฉเจ•เฉ‚เจฒเจจ, เจฒเฉ€เจจเฉ€เจ…เจฐ เจ…เจจเฉเจฎเจพเจจ เจฆเฉ‡ เจจเจพเจฒ เจธเฉ€เจฎเจค เจ…เจจเฉเจ•เฉ‚เจฒเจจ (เจ—เฉเจฐเฉ‡เจกเฉ€เจเจ‚เจŸ เจ—เจฃเจจเจพ เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚)เฅค เจตเจฟเจ•เฉ€ เจฒเฉ‡เจ–.

เจšเฉเจฃเฉ€ เจ—เจˆ เจตเจฟเจงเฉ€ 'เจคเฉ‡ เจจเจฟเจฐเจญเจฐ เจ•เจฐเจฆเจฟเจ†เจ‚, เจธเจฎเฉฑเจธเจฟเจ† เจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เจฐเจจ เจฒเจˆ เจธเจผเจฐเจคเจพเจ‚ เจ…เจคเฉ‡ เจชเจพเจฌเฉฐเจฆเฉ€เจ†เจ‚ เจตเฉฑเจ–เจฐเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เฉ€เจคเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ เจนเจจ:

  • เจ•เจฒเจพเจธ เจ†เจฌเจœเฉˆเจ•เจŸ Bounds เจคเจฐเฉ€เจ•เจฟเจ†เจ‚ เจฒเจˆ L-BFGS-B, TNC, SLSQP, trust-constr;
  • เจธเฉ‚เจšเฉ€ (min, max) เจ‰เจธเฉ‡ เจขเฉฐเจ—เจพเจ‚ เจฒเจˆ L-BFGS-B, TNC, SLSQP, เจŸเจฐเฉฑเจธเจŸ-เจ•เฉฐเจŸเจฐ;
  • เจ‡เฉฑเจ• เจตเจธเจคเฉ‚ เจœเจพเจ‚ เจตเจธเจคเฉ‚เจ†เจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ 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 ั‡ะตะป * ั‡ะฐั.

เจชเจนเจฟเจฒเฉ‡ เจ‰เจชเจฒเจฌเจง เจœเฉ‚เจจเฉ€เจ…เจฐ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจ•เจฟเจธเจฎ (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]

เจ‡เจน เจ•เฉ‹เจˆ เจ—เจฒเจคเฉ€ เจจเจนเฉ€เจ‚ เจนเฉˆ; เจ…เจงเจฟเจ•เจคเจฎ เจฆเฉ€ เจ–เฉ‹เจœ เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚, เจ‰เจฆเฉ‡เจธเจผ เจซเฉฐเจ•เจธเจผเจจ เจจเฉ‚เฉฐ เจ‰เจฒเจŸ เจšเจฟเฉฐเจจเฉเจน เจจเจพเจฒ เจ˜เฉฑเจŸ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค

เจ…เจ—เจฒเจพ เจ•เจฆเจฎ เจธเจพเจกเฉ‡ เจ•เจฐเจฎเจšเจพเจฐเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจœเจผเจฟเจ†เจฆเจพ เจ•เฉฐเจฎ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฐเฉ‹เจ•เจฃเจพ เจ…เจคเฉ‡ เจ•เฉฐเจฎ เจฆเฉ‡ เจ˜เฉฐเจŸเจฟเจ†เจ‚ 'เจคเฉ‡ เจชเจพเจฌเฉฐเจฆเฉ€เจ†เจ‚ เจฒเจ—เจพเจ‰เจฃเจพ เจนเฉˆ:

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 เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจ…เจ•เจพเจฆเจฎเจฟเจ• เจ‰เจฆเฉ‡เจธเจผเจพเจ‚ เจฒเจˆ, เจ‡เจธ เจฒเจˆ เจฆเจฟเฉฑเจคเฉ€ เจ—เจˆ เจ‰เจฆเจพเจนเจฐเจฃ เจ…เจœเจฟเจนเฉ€ เจนเจพเจธเจฐเจธ เจ•เจฟเจธเจฎ เจฆเฉ€ เจนเฉˆเฅค

เจฌเจนเฉเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจฅเจฟเจŠเจฐเฉ€ เจ…เจคเฉ‡ เจตเจฐเจšเฉเจ…เจฒ เจ‰เจฆเจพเจนเจฐเจฃเจพเจ‚ เจฒเฉฑเจญเฉ€เจ†เจ‚ เจœเจพ เจธเจ•เจฆเฉ€เจ†เจ‚ เจนเจจ, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, I.L. Akulich เจฆเฉ€ เจ•เจฟเจคเจพเจฌ "เจ‰เจฆเจพเจนเจฐเจจเจพเจ‚ เจ…เจคเฉ‡ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจตเจฟเฉฑเจš เจ—เจฃเจฟเจคเจ• เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจฟเฉฐเจ—" เจตเจฟเฉฑเจšเฅค เจตเจงเฉ‡เจฐเฉ‡ เจนเจพเจฐเจกเจ•เฉ‹เจฐ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ scipy.optimize เจšเจฟเฉฑเจคเจฐเจพเจ‚ เจฆเฉ‡ เจธเจฎเฉ‚เจน เจคเฉ‹เจ‚ เจ‡เฉฑเจ• 3D เจขเจพเจ‚เจšเจพ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ (Habrรฉ 'เจคเฉ‡ เจฒเฉ‡เจ–) เจตเจฟเฉฑเจš เจฆเฉ‡เจ–เจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ scipy-เจ•เฉเฉฑเจ•เจฌเฉเฉฑเจ•.

เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฆเจพ เจฎเฉเฉฑเจ– เจธเจฐเฉ‹เจค เจนเฉˆ docs.scipy.orgเจœเจฟเจนเฉœเฉ‡ เจ‡เจธ เจ…เจคเฉ‡ เจนเฉ‹เจฐ เจญเจพเจ—เจพเจ‚ เจฆเฉ‡ เจ…เจจเฉเจตเจพเจฆ เจตเจฟเฉฑเจš เจฏเฉ‹เจ—เจฆเจพเจจ เจชเจพเจ‰เจฃเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเจจ scipy เจธเจตเจพเจ—เจค เจนเฉˆ GitHub.

ะกะฟะฐัะธะฑะพ mephistophees เจชเฉเจฐเจ•เจพเจธเจผเจจ เจฆเฉ€ เจคเจฟเจ†เจฐเฉ€ เจตเจฟเฉฑเจš เจญเจพเจ— เจฒเฉˆเจฃ เจฒเจˆเฅค

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹