I denne artikkelen skal vi se pΓ₯ de grunnleggende teknikkene for matematisk programmering - Γ₯ lΓΈse betingede optimaliseringsproblemer for en skalarfunksjon av flere variabler ved Γ₯ bruke scipy.optimize-pakken. Ubegrensede optimaliseringsalgoritmer har allerede blitt diskutert i siste artikkel. Mer detaljert og oppdatert hjelp om scipy-funksjoner kan alltid fΓ₯s ved Γ₯ bruke help()-kommandoen, Shift+Tab eller i offisiell dokumentasjon.
Innledning
Et felles grensesnitt for Γ₯ lΓΈse bΓ₯de betingede og ubegrensede optimaliseringsproblemer i scipy.optimize-pakken leveres av funksjonen minimize(). Imidlertid er det kjent at det ikke er noen universell metode for Γ₯ lΓΈse alle problemer, sΓ₯ valget av en adekvat metode, som alltid, faller pΓ₯ forskerens skuldre.
ΠΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π·Π°Π΄Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ minimize(..., method="").
For betinget optimalisering av en funksjon av flere variabler, er implementeringer av fΓΈlgende metoder tilgjengelige:
listen (min, max) for de samme metodene L-BFGS-B, TNC, SLSQP, trust-constr;
et objekt eller en liste over objekter LinearConstraint, NonlinearConstraint Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² COBYLA, SLSQP, trust-constr;
ordbok eller liste over ordbΓΈker {'type':str, 'fun':callable, 'jac':callable,opt, 'args':sequence,opt} for COBYLA, SLSQP metoder.
Artikkeloversikt:
1) Π Π°ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π² Π΄ΠΎΠ²Π΅ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ (method=Β»trust-constrΒ») Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ, Π·Π°Π΄Π°Π½Π½ΡΠΌΠΈ Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Bounds, LinearConstraint, NonlinearConstraint ;
2) Π Π°ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΎΠ² (method=Β»SLSQPΒ») Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ, Π·Π°Π΄Π°Π½Π½ΡΠΌΠΈ Π² Π²ΠΈΠ΄Π΅ ΡΠ»ΠΎΠ²Π°ΡΡ {'type', 'fun', 'jac', 'args'};
3) Analyser et eksempel pΓ₯ optimalisering av produserte produkter ved Γ₯ bruke eksemplet med et webstudio.
Betinget optimaliseringsmetode = "trust-constr"
Implementering av metoden trust-constr basert pΓ₯ EQSQP Π΄Π»Ρ Π·Π°Π΄Π°Ρ Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ Π²ΠΈΠ΄Π° ΡΠ°Π²Π΅Π½ΡΡΠ²Π° ΠΈ Π½Π° TUR for problemer med begrensninger i form av ulikheter. Begge metodene er implementert av algoritmer for Γ₯ finne et lokalt minimum i konfidensregionen og er godt egnet for store problemer.
ΠΠ»Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ ΡΡΡΠΎΠ³ΠΎΠ³ΠΎ ΡΠ°Π²Π΅Π½ΡΡΠ²Π° Π½ΠΈΠΆΠ½ΡΡ Π³ΡΠ°Π½ΠΈΡΠ° ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΡΠ°Π²Π½ΠΎΠΉ Π²Π΅ΡΡ Π½Π΅ΠΉ .
ΠΠ»Ρ ΠΎΠ΄Π½ΠΎΡΡΠΎΡΠΎΠ½Π½Π΅Π³ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π²Π΅ΡΡ Π½ΡΡ ΠΈΠ»ΠΈ Π½ΠΈΠΆΠ½ΡΡ Π³ΡΠ°Π½ΠΈΡΠ° ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ np.inf Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ Π·Π½Π°ΠΊΠΎΠΌ.
La det vΓ¦re nΓΈdvendig Γ₯ finne minimum av en kjent Rosenbrock-funksjon av to variabler:
I dette tilfellet er fΓΈlgende begrensninger satt pΓ₯ definisjonsdomenet:
Ved beregning av den hessiske matrisen ΡΡΠ΅Π±ΡΠ΅Ρ Π±ΠΎΠ»ΡΡΠΈΡ Π·Π°ΡΡΠ°Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡ HessianUpdateStrategy. FΓΈlgende strategier er tilgjengelige: BFGS ΠΈ SR1.
SLSQP-metoden er designet for Γ₯ lΓΈse problemer med Γ₯ minimere en funksjon i formen:
hvor ΠΈ β sett med indekser av uttrykk som beskriver restriksjoner i form av likheter eller ulikheter. β ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π½ΠΈΠΆΠ½ΠΈΡ ΠΈ Π²Π΅ΡΡ Π½ΠΈΡ Π³ΡΠ°Π½ΠΈΡ Π΄Π»Ρ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ.
Lineære og ikke-lineære begrensninger er beskrevet i form av ordbøker med nøkler 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])
}
La den fΓΈrste tilgjengelige junior bruke (0, 1, 2) timer pΓ₯ utvikling og distribusjon av ett nettsted av typen (x10, x20, x30), mellom - (7, 15, 20), senior - (5, 10, 15) ) timer av den beste tiden i livet ditt.
Som enhver vanlig direktΓΈr ΓΈnsker vi Γ₯ maksimere mΓ₯nedlig fortjeneste. Det fΓΈrste trinnet til suksess er Γ₯ skrive ned den objektive funksjonen value ΠΊΠ°ΠΊ ΡΡΠΌΠΌΡ Π΄ΠΎΡ ΠΎΠ΄ΠΎΠ² ΠΎΡ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π·Π° ΠΌΠ΅ΡΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠΈ:
Og til slutt, den mest rosenrΓΈde antagelsen er at pΓ₯ grunn av den lave prisen og den hΓΈye kvaliteten, stΓ₯r en kΓΈ av fornΓΈyde kunder stadig i kΓΈ for oss. Vi kan velge de mΓ₯nedlige produksjonsvolumene selv, basert pΓ₯ Γ₯ lΓΈse det begrensede optimaliseringsproblemet med scipy.optimize:
Konklusjon: for at regissΓΈren skal fΓ₯ sitt velfortjente maksimum, er det optimalt Γ₯ lage 8 landingssider, 6 mellomstore nettsteder og 3 butikker per mΓ₯ned. I dette tilfellet mΓ₯ senioren plΓΈye uten Γ₯ se opp fra maskinen, belastningen pΓ₯ de midterste vil vΓ¦re ca 2/3, juniorene mindre enn halvparten.
Konklusjon
Artikkelen skisserer de grunnleggende teknikkene for Γ₯ jobbe med pakken scipy.optimize, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ. ΠΠΈΡΠ½ΠΎ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ scipy rent for akademiske formΓ₯l, og det er derfor eksemplet som er gitt er av en sΓ₯ komisk karakter.