SciPy, оптимизация с условията

SciPy, оптимизация с условията

SciPy (произнася сС ΠΊΠ°Ρ‚ΠΎ сай ΠΏΠ°ΠΉ) β€” Ρ‚ΠΎΠ²Π° Π΅ матСматичСски ΠΏΠ°ΠΊΠ΅Ρ‚, основан Π½Π° numpy, ΠΊΠΎΠΉΡ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π° ΡΡŠΡ‰ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π° C ΠΈ Fortran. Π‘ SciPy ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Π°Ρ‚Π° сСсия Π½Π° Python сС ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π° Π² напълно Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½Π° срСда Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ, ΠΏΠΎΠ΄ΠΎΠ±Π½Π° Π½Π° MATLAB, IDL, Octave, R ΠΈΠ»ΠΈ SciLab.

Π’ Ρ‚Π°Π·ΠΈ статия Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ основнитС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π½Π° матСматичСското ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ β€” Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π° Π·Π°Π΄Π°Ρ‡ΠΈ Π·Π° условна оптимизация Π½Π° скаларна функция Π½Π° мноТСство ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° scipy.optimize. АлгоритмитС Π·Π° бСзусловна оптимизация Π²Π΅Ρ‡Π΅ бяха Ρ€Π°Π·Π³Π»Π΅Π΄Π°Π½ΠΈ Π² Π² ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° статия. По-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π° ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»Π½Π° справка Π·Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π½Π° scipy Π²ΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° help(), Shift+Tab ΠΈΠ»ΠΈ Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π°Ρ‚Π° докумСнтация.

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅

ΠžΠ±Ρ‰ΠΈΡΡ‚ интСрфСйс Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° Π·Π°Π΄Π°Ρ‡ΠΈ ΠΊΠ°ΠΊΡ‚ΠΎ Π·Π° условна, Ρ‚Π°ΠΊΠ° ΠΈ Π·Π° бСзусловна оптимизация Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π° scipy.optimize сС прСдоставя Ρ‡Ρ€Π΅Π· функцията minimize(). Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π° Π΅ извСстно, Ρ‡Π΅ Π½Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° унивСрсалСн Π½Π°Ρ‡ΠΈΠ½ Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° всички Π·Π°Π΄Π°Ρ‡ΠΈ, Π·Π°Ρ‚ΠΎΠ²Π° ΠΈΠ·Π±ΠΎΡ€ΡŠΡ‚ Π½Π° Π°Π΄Π΅ΠΊΠ²Π°Ρ‚Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ‚Π½ΠΎΠ²ΠΎ Π΅ Π² Ρ€ΡŠΡ†Π΅Ρ‚Π΅ Π½Π° изслСдоватСля.
ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰ΠΈΡΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ Π·Π° оптимизация сС Π·Π°Π΄Π°Π²Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π½Π° функцията minimize(..., method="").
Π—Π° условна оптимизация Π½Π° функция Π½Π° мноТСство ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ са Π½Π°Π»ΠΈΡ‡Π½ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° слСднитС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ:

  • trust-constr β€” Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° Π»ΠΎΠΊΠ°Π»Π΅Π½ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π² Π΄ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅Π»Π½Π° област. Бтатия Π½Π° wiki, статия Π½Π° Ρ…Π°Π±Ρ€Π΅;
  • SLSQP β€” послСдоватСлно ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ с ограничСния, ΠΡŽΡ‚ΠΎΠ½ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° систСмата Π½Π° Π›Π°Π³Ρ€Π°Π½ΠΆ. Бтатия Π½Π° Π²ΠΈΠΊΠΈ.
  • TNC β€” Truncated Newton Constrained, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ число ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, Π΄ΠΎΠ±ΡŠΡ€ Π΅ Π·Π° Π½Π΅Π»ΠΈΠ½Π΅ΠΉΠ½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΌΠ½ΠΎΠ³ΠΎ нСзависими ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ. Бтатия Π½Π° wiki.
  • L-BFGS-B β€” ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ‚ Ρ‡Π΅Ρ‚Π²ΠΎΡ€ΠΊΠ°Ρ‚Π° Π½Π° Π‘Ρ€ΠΎΠΉΠ΄ΡŠΠ½β€“Π€Π»Π΅Ρ‚Ρ‡ΡŠΡ€β€“Π“ΠΎΠ»Π΄Ρ„Π°Ρ€Π±β€“Π¨Π°Π½Π½ΠΎ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ с Π½Π°ΠΌΠ°Π»Π΅Π½ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° частично Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΈ ΠΎΡ‚ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°Ρ‚Π° Π½Π° Π₯Сс. Бтатия Π½Π° wiki, статия Π½Π° Ρ…Π°Π±Ρ€Π΅.
  • COBYLA β€” ΠšΠžΠ‘Π«Π›Π Constrained Optimization By Linear Approximation, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° оптимизация с Π»ΠΈΠ½Π΅ΠΉΠ½Π° аппроксимация (Π±Π΅Π· изчисляванС Π½Π° Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π°). Бтатия Π½Π° wiki.

Π’ зависимост ΠΎΡ‚ избрания ΠΌΠ΅Ρ‚ΠΎΠ΄, условията ΠΈ ограничСнията Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° сС Π·Π°Π΄Π°Π²Π°Ρ‚ ΠΏΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ Π½Π°Ρ‡ΠΈΠ½:

  • ΠΎΠ±Π΅ΠΊΡ‚ ΠΎΡ‚ класа 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) Π”Π° сС Ρ€Π°Π·Π³Π»Π΅Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΡ€Π° Π·Π° условна оптимизация Π² Π΄ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅Π»Π½Π°Ρ‚Π° област (method=Β»trust-constrΒ») с ограничСния, Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Bounds, LinearConstraint, NonlinearConstraint ;
2) Π”Π° сС Ρ€Π°Π·Π³Π»Π΅Π΄Π° послСдоватСлното ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Ρ‡Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π° Π½Π°ΠΉ-ΠΌΠ°Π»ΠΊΠΈΡ‚Π΅ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈ (method=Β»SLSQPΒ») с ограничСния, Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ Ρ€Π΅Ρ‡Π½ΠΈΠΊ {'type', 'fun', 'jac', 'args'};
3) Π”Π° сС Ρ€Π°Π·Π³Π»Π΅Π΄Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° оптимизация Π½Π° производството Ρ‡Ρ€Π΅Π· ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚ ΡƒΠ΅Π± студио.

Условна оптимизация method=Β»trust-constrΒ»

РСализация Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° trust-constr Π΅ основана Π½Π° EQSQP Π·Π° Π·Π°Π΄Π°Ρ‡ΠΈ с ограничСния ΠΎΡ‚ Π²ΠΈΠ΄Π° равСнство ΠΈ Π½Π° TRIP Π·Π° Π·Π°Π΄Π°Ρ‡ΠΈ с ограничСния ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° нСравСнства. И Π΄Π²Π°Ρ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° са Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ с Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈ Π·Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° Π»ΠΎΠΊΠ°Π»Π΅Π½ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π² Π΄ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅Π»Π½Π°Ρ‚Π° област ΠΈ са подходящи Π·Π° ΠΌΠ°Ρ‰Π°Π±Π½ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ.

ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠ° Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π° Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° Π·Π° Π½Π°ΠΌΠΈΡ€Π°Π½Π΅ Π½Π° ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π² ΠΎΠ±Ρ‰ Π²ΠΈΠ΄:

SciPy, оптимизация с условията

SciPy, оптимизация с условията

SciPy, оптимизация с условията

Π—Π° ограничСния ΠΏΡ€ΠΈ стриктно равСнство Π΄ΠΎΠ»Π½Π°Ρ‚Π° Π³Ρ€Π°Π½ΠΈΡ†Π° сС установява Ρ€Π°Π²Π½Π° Π½Π° Π³ΠΎΡ€Π½Π°Ρ‚Π° SciPy, оптимизация с условията.
Π—Π° Сдностранно ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π³ΠΎΡ€Π½Π°Ρ‚Π° ΠΈΠ»ΠΈ Π΄ΠΎΠ»Π½Π°Ρ‚Π° Π³Ρ€Π°Π½ΠΈΡ†Π° сС опрСдСля np.inf с ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ Π·Π½Π°ΠΊ.
НСка Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС Π½Π°ΠΌΠ΅Ρ€ΠΈ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π½Π° извСстната функция Π½Π° Π ΠΎΠ·Π΅Π½Π±Ρ€ΠΎΠΊ ΠΎΡ‚ Π΄Π²Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ:

SciPy, оптимизация с условията

ΠŸΡ€ΠΈ Ρ‚ΠΎΠ²Π° са Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ слСднитС ограничСния Π½Π° Π½Π΅ΠΉΠ½ΠΎΡ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅:

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, оптимизация с условията

Π”Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Ρ‚Π΅Π·ΠΈ ограничСния ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ 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:

ΠΎΡ‚ scipy.sparse.linalg ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ 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)

Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ = НСлинСйноС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅(cons_f, -np.inf, 1,
                                jac=cons_J, hess=cons_H_linear_operator)

ΠšΠΎΠ³Π°Ρ‚ΠΎ изчисляванСто Π½Π° Π₯Ссовата ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° SciPy, оптимизация с условията изисква Π³ΠΎΠ»Π΅ΠΌΠΈ Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈ, ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ»Π°ΡΡŠΡ‚ HessianUpdateStrategy. Доступни са слСднитС стратСгии: BFGS ΠΈ SR1.

ΠΎΡ‚ scipy.optimize ΠΈΠΌΠΏΠΎΡ€Ρ‚ BFGS

Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ = НСлинСйно ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅(cons_f, -np.inf, 1, jac=cons_J, hess=BFGS())

Π₯Ссовата ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΌΠΎΠΆΠ΅ ΡΡŠΡ‰ΠΎ Π΄Π° бъдС изчислСна с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΊΡ€Π°ΠΉΠ½ΠΈ разности:

Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ = НСлинСйно ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅(cons_f, -np.inf, 1, jac='2-point', hess='2-point')

Π―ΠΊΠΎΠ²Π°Ρ‚Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Π·Π° ограничСнията ΠΌΠΎΠΆΠ΅ ΡΡŠΡ‰ΠΎ Π΄Π° бъдС изчислСна с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΊΡ€Π°ΠΉΠ½ΠΈ разности. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π² Ρ‚ΠΎΠ·ΠΈ случай Π₯Ссовата ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС изчислСна с ΠΊΡ€Π°ΠΉΠ½ΠΈ разности. Π₯Ссовата ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° трябва Π΄Π° бъдС Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π° ΠΊΠ°Ρ‚ΠΎ функция ΠΈΠ»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° клас HessianUpdateStrategy.

Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ = НСлинСйно ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅(cons_f, -np.inf, 1, jac='2-point', hess=BFGS())

Π Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° Π·Π°Π΄Π°Ρ‡Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½:

ΠΎΡ‚ scipy.optimize ΠΈΠΌΠΏΠΎΡ€Ρ‚ minimize
ΠΎΡ‚ scipy.optimize ΠΈΠΌΠΏΠΎΡ€Ρ‚ 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` Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π½ΠΎΡ‚ΠΎ условиС Π΅ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€Π΅Π½ΠΎ.
Π‘Ρ€ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ: 12, ΠΎΡ†Π΅Π½ΠΊΠΈ Π½Π° функцията: 8, CG ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ: 7, оптималност: 2.99e-09, Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ Π½Π° условията: 1.11e-16, Π²Ρ€Π΅ΠΌΠ΅ Π½Π° изпълнСниС: 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 (ΠΊΠ²Π°Π·ΠΈ-ΠΡŽΡ‚ΠΎΠ½ΠΎΠ²ΠΎ апроксимиранС). Π“Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС апроксимирани с ΠΊΡ€Π°ΠΉΠ½ΠΈ разности.

ΠΎΡ‚ scipy.optimize ΠΈΠΌΠΏΠΎΡ€Ρ‚ 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)

Условна оптимизация method='SLSQP'

ΠœΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ SLSQP Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° Π·Π°Π΄Π°Ρ‡ΠΈ Π·Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° функция ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π°:

SciPy, оптимизация с условията

SciPy, оптимизация с условията

SciPy, оптимизация с условията

SciPy, оптимизация с условията

КъдС SciPy, оптимизация с условията ΠΈ SciPy, оптимизация с условията β€” мноТСства индСкси Π½Π° ΠΈΠ·Ρ€Π°Π·ΠΈ, описващи ограничСния ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° равСнства ΠΈΠ»ΠΈ нСравСнства. SciPy, оптимизация с условията β€” мноТСство Π΄ΠΎΠ»Π½ΠΈ ΠΈ Π³ΠΎΡ€Π½ΠΈ Π³Ρ€Π°Π½ΠΈΡ†ΠΈ Π·Π° областта Π½Π° дСфиниция Π½Π° функцията.

Π›ΠΈΠ½Π΅ΠΉΠ½ΠΈΡ‚Π΅ ΠΈ Π½Π΅Π»ΠΈΠ½Π΅ΠΉΠ½ΠΈΡ‚Π΅ ограничСния сС описват ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° Ρ€Π΅Ρ‡Π½ΠΈΡ†ΠΈ с ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ Ρ‚ΠΈΠΏ, Π·Π°Π±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ 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)

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡΡ‚Π° бСшС Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ.    (Π Π΅ΠΆΠΈΠΌ Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄ 0)
            Π’Π΅ΠΊΡƒΡ‰Π° стойност Π½Π° функцията: 0.34271757499419825
            Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ: 4
            ΠžΡ†Π΅Π½ΠΊΠΈ Π½Π° функцията: 5
            ΠžΡ†Π΅Π½ΠΊΠΈ Π½Π° Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π°: 4
[0.41494475 0.1701105 ]

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° оптимизация

Π’ΡŠΠ² Π²Ρ€ΡŠΠ·ΠΊΠ° с ΠΏΡ€Π΅Ρ…ΠΎΠ΄Π° към ΠΏΠ΅Ρ‚ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡ‡Π΅Π½ ΡƒΠΊΠ»Π°Π΄, Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ оптимизацията Π½Π° производството Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½Π° ΡƒΠ΅Π± студио, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½ΠΈ носи малък, Π½ΠΎ стабилСн Π΄ΠΎΡ…ΠΎΠ΄. Π”Π° си прСдставим, Ρ‡Π΅ смС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ Π½Π° галСрия, която ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π° Ρ‚Ρ€ΠΈ Π²ΠΈΠ΄Π° продукция:

  • x0 β€” ΠΏΡ€ΠΎΠ΄Π°Π²Π°Ρ‰ΠΈ Π»Π΅Π½Π΄ΠΈΠ½Π³ΠΈ, ΠΎΡ‚ 10 Ρ‚.Ρ€.
  • x1 β€” ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½ΠΈ сайтовС, ΠΎΡ‚ 20 Ρ‚.Ρ€.
  • x2 β€” ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΌΠ°Π³Π°Π·ΠΈΠ½ΠΈ, ΠΎΡ‚ 30 Ρ‚.Ρ€.

ΠΠ°ΡˆΠΈΡΡ‚ Π΄Ρ€ΡƒΠΆΠ΅Π»ΡŽΠ±Π΅Π½ Ρ€Π°Π±ΠΎΡ‚Π΅Π½ Π΅ΠΊΠΈΠΏ Π²ΠΊΠ»ΡŽΡ‡Π²Π° Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈΠΌΠ° Π΄ΠΆΡƒΠ½ΠΈΠΎΡ€ΠΈ, Π΄Π²Π°ΠΌΠ° ΠΌΠΈΠ΄Π»ΠΎΠ²Π΅ ΠΈ Π΅Π΄ΠΈΠ½ ΡΠ΅Π½ΡŒΠΎΡ€. Π€ΠΎΠ½Π΄ΡŠΡ‚ Π½Π° тяхното Ρ€Π°Π±ΠΎΡ‚Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° мСсСца Π΅:

  • Π΄ΠΆΡƒΠ½ΠΈΠΎΡ€ΠΈ: 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 чисто Π² Π°ΠΊΠ°Π΄Π΅ΠΌΠΈΡ‡Π½ΠΈ Ρ†Π΅Π»ΠΈ, Π·Π°Ρ‚ΠΎΠ²Π° прСдставСният ΠΏΡ€ΠΈΠΌΠ΅Ρ€ носи Ρ‚Π°ΠΊΡŠΠ² ΡˆΠ΅Π³ΠΎΠ²ΠΈΡ‚ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€.

Много тСория ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΎΡ‚ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°Ρ‚Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС намСрят, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠ½ΠΈΠ³Π°Ρ‚Π° Π½Π° И.Π›. Акулич "ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ". По-Ρ…Π°Ρ€Π΄ΠΊΠΎΡ€Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ scipy.optimize Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° 3D структура ΠΏΠΎ Π·Π°Π΄Π°Π΄Π΅Π½ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ изобраТСния (статия Π½Π° Ρ…Π°Π±Ρ€Π΅) ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π²ΠΈΠ΄ΠΈ Π² scipy-cookbook.

ОсновСн ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° информация β€” docs.scipy.org, ΠΆΠ΅Π»Π°Π΅Ρ‰ΠΈΡ‚Π΅ Π΄Π° контрибутираят Π² ΠΏΡ€Π΅Π²ΠΎΠ΄Π° Π½Π° Ρ‚Π°Π·ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ сСкции scipy са Π΄ΠΎΠ±Ρ€Π΅ дошли Π½Π° GitHub.

Благодаря mephistopheies Π·Π° участиС Π² ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ°Ρ‚Π° Π½Π° публикацията.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster