SciPy, เดตเตเดฏเดตเดธเตเดฅเด•เดณเตเดณเตเดณ เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเตป

SciPy, เดตเตเดฏเดตเดธเตเดฅเด•เดณเตเดณเตเดณ เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเตป

SciPy (เดธเดพเดฏเดฟ เดชเตˆ เดŽเดจเตเดจเต เด‰เดšเตเดšเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต) เดธเดฟ, เดซเต‹เตผเดŸเตเดฐเดพเตป เดฒเตˆเดฌเตเดฐเดฑเดฟเด•เดณเตเด‚ เด‰เตพเดชเตเดชเต†เดŸเตเดจเตเดจ เด’เดฐเต เดจเดฎเตเดชเดฟ เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟเดฏเตเดณเตเดณ เดฎเดพเดคเตเดคเดฎเดพเดฑเตเดฑเดฟเด•เตเดธเต เดชเดพเด•เตเด•เต‡เดœเดพเดฃเต. SciPy เดจเดฟเด™เตเด™เดณเตเดŸเต† เดธเด‚เดตเต‡เดฆเดจเดพเดคเตเดฎเด• เดชเตˆเดคเตเดคเตบ เดธเต†เดทเดจเต† MATLAB, IDL, Octave, R เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ SciLab เดชเต‹เดฒเต†เดฏเตเดณเตเดณ เด’เดฐเต เดธเดฎเตเดชเต‚เตผเดฃเตเดฃ เดกเดพเดฑเตเดฑเดพ เดธเดฏเตปเดธเต เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเดฏเดพเด•เตเด•เดฟ เดฎเดพเดฑเตเดฑเตเดจเตเดจเต.

เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ, เด—เดฃเดฟเดค เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เดฟเดจเตเดฑเต† เด…เดŸเดฟเดธเตเดฅเดพเดจ เดธเดพเด™เตเด•เต‡เดคเดฟเด• เดตเดฟเดฆเตเดฏเด•เตพ เดžเด™เตเด™เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด‚ - scipy.optimize เดชเดพเด•เตเด•เต‡เดœเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฟเดฐเดตเดงเดฟ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เดณเตเดŸเต† เดธเตเด•เต†เดฏเดฟเดฒเตผ เดซเด‚เด—เตเดทเดจเตเดณเตเดณ เดธเต‹เดชเดพเดงเดฟเด• เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเตป เดชเตเดฐเดถเตเดจเด™เตเด™เตพ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเดฎเดฟเดฒเตเดฒเดพเดคเตเดค เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเตป เด…เตฝเด—เต‹เดฐเดฟเดคเด™เตเด™เตพ เด‡เดคเดฟเดจเด•เด‚ เดšเตผเดšเตเดš เดšเต†เดฏเตเดคเดฟเดŸเตเดŸเตเดฃเตเดŸเต เด•เดดเดฟเดžเตเดž เดฒเต‡เด–เดจเด‚. scipy เดซเด‚เด—เตโ€Œเดทเดจเตเด•เดณเดฟเตฝ เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดตเตเด‚ เด•เดพเดฒเดฟเด•เดตเตเดฎเดพเดฏ เดธเดนเดพเดฏเด‚ เดŽเดชเตเดชเต‹เดดเตเด‚ help() เด•เดฎเดพเตปเดกเต, Shift+Tab เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด‡เตป เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดฒเดญเดฟเด•เตเด•เตเด‚. เด”เดฆเตเดฏเต‹เด—เดฟเด• เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเตป.

เด†เดฎเตเด–เด‚

scipy.optimize เดชเดพเด•เตเด•เต‡เดœเดฟเดฒเต† เดธเต‹เดชเดพเดงเดฟเด•เดตเตเด‚ เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเดฎเดฟเดฒเตเดฒเดพเดคเตเดคเดคเตเดฎเดพเดฏ เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเตป เดชเตเดฐเดถเตเดจเด™เตเด™เตพ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดชเตŠเดคเต เด‡เดจเตเดฑเตผเดซเต‡เดธเต เดซเด‚เด—เตเดทเตป เดจเตฝเด•เตเดจเตเดจเต. minimize(). เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เดŽเดฒเตเดฒเดพ เดชเตเดฐเดถเตเดจเด™เตเด™เดณเตเด‚ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดธเดพเตผเดตเดคเตเดฐเดฟเด• เดฐเต€เดคเดฟเด•เดณเตŠเดจเตเดจเตเดฎเดฟเดฒเตเดฒเต†เดจเตเดจเต เด…เดฑเดฟเดฏเดพเด‚, เด…เดคเดฟเดจเดพเตฝ เดฎเดคเดฟเดฏเดพเดฏ เดฐเต€เดคเดฟ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเดจเตเดจเดคเต เดŽเดฒเตเดฒเดพเดฏเตเดชเตเดชเต‹เดดเตเด‚ เดŽเดจเตเดจเดชเต‹เดฒเต† เด—เดตเต‡เดทเด•เดจเตเดฑเต† เดšเตเดฎเดฒเดฟเตฝ เดชเดคเดฟเด•เตเด•เตเดจเตเดจเต.
เดซเด‚เด—เตเดทเตป เด†เตผเด—เตเดฏเตเดฎเต†เดจเตเดฑเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด‰เดšเดฟเดคเดฎเดพเดฏ เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเตป เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต minimize(..., method="").
เดจเดฟเดฐเดตเดงเดฟ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เดณเตเดŸเต† เด’เดฐเต เดซเด‚เด—เตโ€Œเดทเดจเตเดฑเต† เดธเต‹เดชเดพเดงเดฟเด• เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเดจเดพเดฏเดฟ, เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดฐเต€เดคเดฟเด•เดณเตเดŸเต† เดจเดŸเดชเตเดชเดพเด•เตเด•เดฒเตเด•เตพ เดฒเดญเตเดฏเดฎเดพเดฃเต:

  • trust-constr - เด•เต‹เตบเดซเดฟเดกเตปเดธเต เดฎเต‡เด–เดฒเดฏเดฟเตฝ เด’เดฐเต เดชเตเดฐเดพเดฆเต‡เดถเดฟเด• เดฎเดฟเดจเดฟเดฎเด‚ เดคเดฟเดฐเดฏเตเด•. เดตเดฟเด•เตเด•เดฟ เดฒเต‡เด–เดจเด‚, เดนเดฌเตเดฐเต†เดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดฒเต‡เด–เดจเด‚;
  • SLSQP - เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเด™เตเด™เดณเตเดณเตเดณ เดธเต€เด•เตเดตเตปเดทเตเดฏเตฝ เด•เตเดตเดพเดกเตเดฐเดพเดฑเตเดฑเดฟเด•เต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต, เดฒเด—เตเดฐเดพเดžเตเดšเต เดธเดฟเดธเตเดฑเตเดฑเด‚ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดจเตเดฏเต‚เดŸเตเดŸเต‹เดฃเดฟเดฏเตป เดฐเต€เดคเดฟ. เดตเดฟเด•เตเด•เดฟ เดฒเต‡เด–เดจเด‚.
  • TNC - เดตเต†เดŸเตเดŸเดฟเดšเตเดšเตเดฐเตเด•เตเด•เดฟเดฏ เดจเตเดฏเต‚เดŸเตเดŸเตบ เด•เตบเดธเตเดŸเตเดฐเต†เดฏเดฟเตปเดกเต, เดชเดฐเดฟเดฎเดฟเดคเดฎเดพเดฏ เดŽเดฃเตเดฃเด‚ เด†เดตเตผเดคเตเดคเดจเด™เตเด™เตพ, เดงเดพเดฐเดพเดณเด‚ เดธเตเดตเดคเดจเตเดคเตเดฐ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เดณเตเดณเตเดณ เดจเต‹เตบเดฒเต€เดจเดฟเดฏเตผ เดซเด‚เด—เตเดทเดจเตเด•เตพเด•เตเด•เต เดจเดฒเตเดฒเดคเดพเดฃเต. เดตเดฟเด•เตเด•เดฟ เดฒเต‡เด–เดจเด‚.
  • L-BFGS-B - เดฌเตเดฐเต‹เดฏเตเดกเตป-เดซเตเดฒเต†เดšเตเดšเตผ-เด—เต‹เตพเดกเตเดซเดพเตผเดฌเต-เดทเดพเดจเต‹ เดŸเต€เดฎเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด’เดฐเต เดฐเต€เดคเดฟ, เดนเต†เดธเตเดธเดฟเดฏเตป เดฎเดพเดŸเตเดฐเดฟเด•เตเดธเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดตเต†เด•เตเดฑเตเดฑเดฑเตเด•เตพ เดญเดพเด—เดฟเด•เดฎเดพเดฏเดฟ เดฒเต‹เดกเตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เด•เดพเดฐเดฃเด‚ เดฎเต†เดฎเตเดฎเดฑเดฟ เด‰เดชเดญเต‹เด—เด‚ เด•เตเดฑเดšเตเดšเตเด•เตŠเดฃเตเดŸเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดฟ. เดตเดฟเด•เตเด•เดฟ เดฒเต‡เด–เดจเด‚, เดนเดฌเตเดฐเต†เดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดฒเต‡เด–เดจเด‚.
  • COBYLA โ€” เดฒเต€เดจเดฟเดฏเตผ เดเด•เดฆเต‡เดถเด‚ เดตเดดเดฟ MARE เด•เตบเดธเตเดŸเตเดฐเต†เดฏเดฟเตปเดกเต เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเตป, เดฒเต€เดจเดฟเดฏเตผ เดเด•เดฆเต‡เดถเด‚ (เด—เตเดฐเต‡เดกเดฟเดฏเดจเตเดฑเต เด•เดฃเด•เตเด•เตเด•เต‚เดŸเตเดŸเตฝ เด•เต‚เดŸเดพเดคเต†) เด‰เดณเตเดณ เด•เตบเดธเตเดŸเตเดฐเตˆเตปเดกเต เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเตป. เดตเดฟเด•เตเด•เดฟ เดฒเต‡เด–เดจเด‚.

เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดค เดฐเต€เดคเดฟเดฏเต† เด†เดถเตเดฐเดฏเดฟเดšเตเดšเต, เดชเตเดฐเดถเตเดจเด‚ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดตเตเดฏเดตเดธเตเดฅเด•เดณเตเด‚ เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเด™เตเด™เดณเตเด‚ เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฏเดฟ เดธเดœเตเดœเต€เด•เดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต:

  • เด•เตเดฒเดพเดธเต เด’เดฌเตเดœเด•เตเดฑเตเดฑเต Bounds เดฐเต€เดคเดฟเด•เตพเด•เตเด•เดพเดฏเดฟ L-BFGS-B, TNC, SLSQP, Trust-constr;
  • เดชเดŸเตเดŸเดฟเด• (min, max) เด‡เดคเต‡ เดฐเต€เดคเดฟเด•เตพเด•เตเด•เดพเดฏเดฟ L-BFGS-B, TNC, SLSQP, Trust-constr;
  • เด’เดฐเต เดตเดธเตเดคเต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดตเดธเตเดคเตเด•เตเด•เดณเตเดŸเต† เด’เดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต LinearConstraint, NonlinearConstraint COBYLA, SLSQP, Trust-constr เดฐเต€เดคเดฟเด•เตพเด•เตเด•เดพเดฏเดฟ;
  • เดจเดฟเด˜เดฃเตเดŸเต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดจเดฟเด˜เดฃเตเดŸเตเด•เตเด•เดณเตเดŸเต† เดชเดŸเตเดŸเดฟเด• {'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 เดธเดฎเดคเตเดต เดฐเต‚เดชเดคเตเดคเดฟเดจเตเดฑเต† เดชเดฐเดฟเดฎเดฟเดคเดฟเด•เดณเตเดฎเดพเดฏเตเดณเตเดณ เดชเตเดฐเดถเตเดจเด™เตเด™เตพเด•เตเด•เตเด‚ เด“เตบ TRIP เด…เดธเดฎเดคเตเดตเด™เตเด™เดณเตเดŸเต† เดฐเต‚เดชเดคเตเดคเดฟเตฝ เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเด™เตเด™เดณเตเดณเตเดณ เดชเตเดฐเดถเตเดจเด™เตเด™เตพเด•เตเด•เต. เด•เต‹เตบเดซเดฟเดกเตปเดธเต เดฑเต€เดœเดฟเดฏเดฃเดฟเตฝ เด’เดฐเต เดฒเต‹เด•เตเด•เตฝ เดฎเดฟเดจเดฟเดฎเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เดฐเดฃเตเดŸเต เดฐเต€เดคเดฟเด•เดณเตเด‚ เด…เตฝเด—เต‹เดฐเดฟเดคเด™เตเด™เตพ เดฎเตเด–เต‡เดจ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเด•เดฏเตเด‚ เดตเดฒเดฟเดฏ เดคเต‹เดคเดฟเดฒเตเดณเตเดณ เดชเตเดฐเดถเตเดจเด™เตเด™เตพเด•เตเด•เต เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฃเต.

เดชเตŠเดคเตเดตเดพเดฏ เดฐเต‚เดชเดคเตเดคเดฟเตฝ เดฎเดฟเดจเดฟเดฎเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดชเตเดฐเดถเตเดจเดคเตเดคเดฟเดจเตเดฑเต† เด—เดฃเดฟเดคเดถเดพเดธเตเดคเตเดฐ เดฐเต‚เดชเต€เด•เดฐเดฃเด‚:

SciPy, เดตเตเดฏเดตเดธเตเดฅเด•เดณเตเดณเตเดณ เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเตป

SciPy, เดตเตเดฏเดตเดธเตเดฅเด•เดณเตเดณเตเดณ เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเตป

SciPy, เดตเตเดฏเดตเดธเตเดฅเด•เดณเตเดณเตเดณ เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเตป

เด•เตผเดถเดจเดฎเดพเดฏ เดธเดฎเดคเตเดต เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ, เดคเดพเดดเดคเตเดคเต† เดชเดฐเดฟเดงเดฟ เดฎเตเด•เดณเดฟเดฒเต† เดชเดฐเดฟเดงเดฟเด•เตเด•เต เดคเตเดฒเตเดฏเดฎเดพเดฏเดฟ เดธเดœเตเดœเต€เด•เดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต SciPy, เดตเตเดฏเดตเดธเตเดฅเด•เดณเตเดณเตเดณ เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเตป.
เดตเตบ-เดตเต‡ เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเดคเตเดคเดฟเดจเดพเดฏเดฟ, เดฎเตเด•เดณเดฟเดฒเต‹ เดคเดพเดดเต†เดฏเต‹ เดชเดฐเดฟเดงเดฟ เดธเดœเตเดœเต€เด•เดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต np.inf เด…เดจเตเดฌเดจเตเดง เดšเดฟเดนเตเดจเดคเตเดคเต‹เดŸเตŠเดชเตเดชเด‚.
เดฐเดฃเตเดŸเต เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เดณเตเดŸเต† เด…เดฑเดฟเดฏเดชเตเดชเต†เดŸเตเดจเตเดจ Rosenbrock เดซเด‚เด—เตโ€Œเดทเดจเตเดฑเต† เดเดฑเตเดฑเดตเตเด‚ เด•เตเดฑเดžเตเดžเดคเต เด•เดฃเตเดŸเต†เดคเตเดคเต‡เดฃเตเดŸเดคเต เด†เดตเดถเตเดฏเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เดŸเตเดŸเต†:

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, เดตเตเดฏเดตเดธเตเดฅเด•เดณเตเดณเตเดณ เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเตป

เดจเดฎเตเด•เตเด•เต เดˆ เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเด™เตเด™เดณเต† เด’เดฐเต LinearConstraint เด’เดฌเตเดœเด•เตเดฑเตเดฑเต เด†เดฏเดฟ เดจเดฟเตผเดตเดšเดฟเด•เตเด•เดพเด‚:

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]

เด†เดตเดถเตเดฏเดฎเต†เด™เตเด•เดฟเตฝ, เดฒเต€เดจเดฟเดฏเตผ เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเตผ เด•เตเดฒเดพเดธเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดนเต†เดธเตเดธเดฟเดฏเตป เด•เดฃเด•เตเด•เดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เดจเดฟเตผเดตเดšเดฟเด•เตเด•เดพเด‚

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 เดŸเตเดฐเดฟเดฏเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต.
  • x1 - เด•เต‹เตผเดชเตเดชเดฑเต‡เดฑเตเดฑเต เดตเต†เดฌเตโ€Œเดธเตˆเดฑเตเดฑเตเด•เตพ, 20 เดŸเตเดฐเดฟเตฝ เดจเดฟเดจเตเดจเต.
  • 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 เด•เต‡เดตเดฒเด‚ เด…เด•เตเด•เดพเดฆเดฎเดฟเด•เต เด†เดตเดถเตเดฏเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ, เด…เดคเดฟเดจเดพเดฒเดพเดฃเต เดจเตฝเด•เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เด‰เดฆเดพเดนเดฐเดฃเด‚ เด…เดคเตเดคเดฐเดฎเตŠเดฐเต เด•เต‹เดฎเดฟเด•เต เดธเตเดตเดญเดพเดตเดฎเตเดณเตเดณเดคเต.

เดงเดพเดฐเดพเดณเด‚ เดธเดฟเดฆเตเดงเดพเดจเตเดคเด™เตเด™เดณเตเด‚ เดตเต†เตผเดšเตเดตเตฝ เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เดณเตเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเดพเตป เด•เดดเดฟเดฏเตเด‚, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, I.L. Akulich เดจเตเดฑเต† เดชเตเดธเตเดคเด•เดคเตเดคเดฟเตฝ "เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เดณเดฟเดฒเตเด‚ เดชเตเดฐเดถเตเดจเด™เตเด™เดณเดฟเดฒเตเด‚ เด—เดฃเดฟเดคเดถเดพเดธเตเดคเตเดฐ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต". เด•เต‚เดŸเตเดคเตฝ เดนเดพเตผเดกเตโ€Œเด•เต‹เตผ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป scipy.optimize เด’เดฐเต เด•เต‚เดŸเตเดŸเด‚ เดšเดฟเดคเตเดฐเด™เตเด™เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เด’เดฐเต 3D เด˜เดŸเดจ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เดพเตป (เดนเดฌเตเดฐเต†เดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดฒเต‡เด–เดจเด‚) เตฝ เด•เดพเดฃเดพเตป เด•เดดเดฟเดฏเตเด‚ scipy-เดชเดพเดšเด•เดชเตเดธเตเดคเด•เด‚.

เดตเดฟเดตเดฐเด™เตเด™เดณเตเดŸเต† เดชเตเดฐเดงเดพเดจ เด‰เดฑเดตเดฟเดŸเด‚ docs.scipy.orgเด‡เดคเดฟเดจเตเดฑเต†เดฏเตเด‚ เดฎเดฑเตเดฑเต เดตเดฟเดญเดพเด—เด™เตเด™เดณเตเดŸเต†เดฏเตเด‚ เดตเดฟเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดธเด‚เดญเดพเดตเดจ เดจเตฝเด•เดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเดตเตผ scipy เดธเตเดตเดพเด—เดคเด‚ เดธเดพเดฎเต‚เดนเดฟเด•เด‚.

ะกะฟะฐัะธะฑะพ เดฎเต†เดซเดฟเดธเตเดฑเตเดฑเต‹เดซเต€เดธเต เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฃเด‚ เดคเดฏเตเดฏเดพเดฑเดพเด•เตเด•เตเดจเตเดจเดคเดฟเตฝ เดชเด™เตเด•เดพเดณเดฟเดคเตเดคเดคเตเดคเดฟเดจเดพเดฏเดฟ.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•