SciPy, เชถเชฐเชคเซ‹ เชธเชพเชฅเซ‡ เช“เชชเซเชŸเชฟเชฎเชพเช‡เชเซ‡เชถเชจ

SciPy, เชถเชฐเชคเซ‹ เชธเชพเชฅเซ‡ เช“เชชเซเชŸเชฟเชฎเชพเช‡เชเซ‡เชถเชจ

SciPy (เช‰เชšเซเชšเชพเชฐเชฃ เชธเชพเชˆ เชชเชพเชˆ) เช เชจเชฎเซเชชเซ€-เช†เชงเชพเชฐเชฟเชค เช—เชฃเชฟเชคเชจเซเช‚ เชชเซ‡เช•เซ‡เชœ เช›เซ‡ เชœเซ‡เชฎเชพเช‚ C เช…เชจเซ‡ Fortran เชชเซเชธเซเชคเช•เชพเชฒเชฏเซ‹เชจเซ‹ เชชเชฃ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡. SciPy เชคเชฎเชพเชฐเชพ เช‡เชจเซเชŸเชฐเซ‡เช•เซเชŸเชฟเชต เชชเชพเชฏเชฅเซ‹เชจ เชธเชคเซเชฐเชจเซ‡ MATLAB, IDL, Octave, R, เช…เชฅเชตเชพ SciLab เชœเซ‡เชตเชพ เชธเช‚เชชเซ‚เชฐเซเชฃ เชกเซ‡เชŸเชพ เชตเชฟเชœเซเชžเชพเชจ เชตเชพเชคเชพเชตเชฐเชฃเชฎเชพเช‚ เชซเซ‡เชฐเชตเซ‡ เช›เซ‡.

เช† เชฒเซ‡เช–เชฎเชพเช‚, เช…เชฎเซ‡ เช—เชพเชฃเชฟเชคเชฟเช• เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช—เชจเซ€ เชฎเซ‚เชณเชญเซ‚เชค เชคเช•เชจเซ€เช•เซ‹ เชœเซ‹เชˆเชถเซเช‚ - scipy.optimize เชชเซ‡เช•เซ‡เชœเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช˜เชฃเชพ เชšเชฒเซ‹เชจเชพ เชธเซเช•เซ‡เชฒเชฐ เช•เชพเชฐเซเชฏ เชฎเชพเชŸเซ‡ เชถเชฐเชคเซ€ เช‘เชชเซเชŸเชฟเชฎเชพเช‡เชเซ‡เชถเชจ เชธเชฎเชธเซเชฏเชพเช“เชจเซเช‚ เชจเชฟเชฐเชพเช•เชฐเชฃ. เช…เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เช‘เชชเซเชŸเชฟเชฎเชพเช‡เชเซ‡เชถเชจ เชเชฒเซเช—เซ‹เชฐเชฟเชงเชฎเซเชธเชจเซ€ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชšเชฐเซเชšเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡ เช›เซ‡เชฒเซเชฒเชพ เชฒเซ‡เช–. เชนเซ‡เชฒเซเชช() เช•เชฎเชพเชจเซเชก, เชถเชฟเชซเซเชŸ+เชŸเซ…เชฌ เช…เชฅเชตเชพ เช‡เชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชธเซเช•เซ€เชชเซ€ เชซเช‚เช•เซเชถเชจเซเชธ เชชเชฐ เชตเชงเซ เชตเชฟเช—เชคเชตเชพเชฐ เช…เชจเซ‡ เช…เชฆเซเชฏเชคเชจ เชฎเชฆเชฆ เชนเช‚เชฎเซ‡เชถเชพ เชฎเซ‡เชณเชตเซ€ เชถเช•เชพเชฏ เช›เซ‡. เชธเชคเซเชคเชพเชตเชพเชฐ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ.

เชชเชฐเชฟเชšเชฏ

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

  • trust-constr - เช†เชคเซเชฎเชตเชฟเชถเซเชตเชพเชธ เช•เซเชทเซ‡เชคเซเชฐเชฎเชพเช‚ เชธเซเชฅเชพเชจเชฟเช• เชฒเช˜เซเชคเซเชคเชฎ เชฎเชพเชŸเซ‡ เชถเซ‹เชงเซ‹. เชตเชฟเช•เชฟ เชฒเซ‡เช–, เชนเซ‡เชฌเซเชฐเซ‡ เชชเชฐเชจเซ‹ เชฒเซ‡เช–;
  • SLSQP - เช…เชตเชฐเซ‹เชงเซ‹ เชธเชพเชฅเซ‡ เช•เซเชฐเชฎเชฟเช• เชšเชคเซเชฐเซเชญเซเชœ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช—, เชฒเซ‡เช—เซเชฐเซ‡เชจเซเชœ เชธเชฟเชธเซเชŸเชฎเชจเซ‡ เช‰เช•เซ‡เชฒเชตเชพ เชฎเชพเชŸเซ‡ เชจเซเชฏเซ‚เชŸเซ‹เชจเชฟเชฏเชจ เชชเชฆเซเชงเชคเชฟ. เชตเชฟเช•เชฟ เชฒเซ‡เช–.
  • TNC - เช•เชชเชพเชฏเซ‡เชฒ เชจเซเชฏเซ‚เชŸเชจ เช•เชจเซเชธเซเชŸเซเชฐเซ‡เช‡เชจเซเชก, เชชเซเชจเชฐเชพเชตเซƒเชคเซเชคเชฟเช“เชจเซ€ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชธเช‚เช–เซเชฏเชพ, เชฎเซ‹เชŸเซ€ เชธเช‚เช–เซเชฏเชพเชฎเชพเช‚ เชธเซเชตเชคเช‚เชคเซเชฐ เชšเชฒเซ‹ เชธเชพเชฅเซ‡ เชฌเชฟเชจเชฐเซ‡เช–เซ€เชฏ เช•เชพเชฐเซเชฏเซ‹ เชฎเชพเชŸเซ‡ เชธเชพเชฐเซ€. เชตเชฟเช•เชฟ เชฒเซ‡เช–.
  • L-BFGS-B โ€” เชนเซ‡เชธเชฟเชฏเชจ เชฎเซ‡เชŸเซเชฐเชฟเช•เซเชธเชฎเชพเช‚เชฅเซ€ เชตเซ‡เช•เซเชŸเชฐเชจเชพ เช†เช‚เชถเชฟเช• เชฒเซ‹เชกเชฟเช‚เช—เชจเซ‡ เช•เชพเชฐเชฃเซ‡ เช“เช›เซ€ เชฎเซ‡เชฎเชฐเซ€ เชตเชชเชฐเชพเชถ เชธเชพเชฅเซ‡ เชฌเซเชฐเซ‹เชฏเชกเซ‡เชจ-เชซเซเชฒเซ‡เชšเชฐ-เช—เซ‹เชฒเซเชกเชซเชพเชฐเซเชฌ-เชถเชพเชจเซเชจเซ‹ เชŸเซ€เชฎเชจเซ€ เชชเชฆเซเชงเชคเชฟ. เชตเชฟเช•เชฟ เชฒเซ‡เช–, เชนเซ‡เชฌเซเชฐเซ‡ เชชเชฐเชจเซ‹ เชฒเซ‡เช–.
  • 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, เชถเชฐเชคเซ‹ เชธเชพเชฅเซ‡ เช“เชชเซเชŸเชฟเชฎเชพเช‡เชเซ‡เชถเชจ เชšเชพเชฒเซ‹ เชคเซ‡เชจเซ‡ เชฌเชพเช‰เชจเซเชกเซเชธ เช‘เชฌเซเชœเซ‡เช•เซเชŸเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเซ€เช.

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')

เชฎเชฐเซเชฏเชพเชฆเชพเช“ เชฎเชพเชŸเซ‡ เชœเซ‡เช•เซ‹เชฌเชฟเชฏเชจ เชฎเซ‡เชŸเซเชฐเชฟเช•เซเชธ เชชเชฃ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชคเชซเชพเชตเชคเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช—เชฃเชคเชฐเซ€ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡. เชœเซ‹ เช•เซ‡, เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เชนเซ‡เชธเชฟเชฏเชจ เชฎเซ‡เชŸเซเชฐเชฟเช•เซเชธเชจเซ€ เช—เชฃเชคเชฐเซ€ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชคเชซเชพเชตเชคเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช•เชฐเซ€ เชถเช•เชพเชคเซ€ เชจเชฅเซ€. เชนเซ‡เชธเชฟเชฏเชจเชจเซ‡ เชซเช‚เช•เซเชถเชจ เชคเชฐเซ€เช•เซ‡ เช…เชฅเชตเชพ 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 เชฎเชพเชณเช–เซเช‚ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ (เชนเซ‡เชฌเซเชฐเซ‡ เชชเชฐเชจเซ‹ เชฒเซ‡เช–) เชฎเชพเช‚ เชœเซ‹เชˆ เชถเช•เชพเชฏ เช›เซ‡ เชฎเชธเชพเชฒเซ‡เชฆเชพเชฐ-เชฐเชธเซ‹เชˆ เชชเซเชธเซเชคเช•.

เชฎเชพเชนเชฟเชคเซ€เชจเซ‹ เชฎเซเช–เซเชฏ เชธเซเชคเซเชฐเซ‹เชค เช›เซ‡ docs.scipy.orgเช† เช…เชจเซ‡ เช…เชจเซเชฏ เชตเชฟเชญเชพเช—เซ‹เชจเชพ เช…เชจเซเชตเชพเชฆเชฎเชพเช‚ เชฏเซ‹เช—เชฆเชพเชจ เช†เชชเชตเชพ เชˆเชšเซเช›เชคเชพ เชฒเซ‹เช•เซ‹ scipy เชธเซเชตเชพเช—เชค GitHub.

ะกะฟะฐัะธะฑะพ เชฎเซ‡เชซเชฟเชธเซเชŸเซ‹เชซเซ€เชธ เชชเซเชฐเช•เชพเชถเชจเชจเซ€ เชคเซˆเชฏเชพเชฐเซ€เชฎเชพเช‚ เชญเชพเช— เชฒเซ‡เชตเชพ เชฎเชพเชŸเซ‡.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹