A nemlineáris többdimenziós optimalizálás egyszerű

Egy történet, amely az optimális megoldás megtalálásának gradiens módszerének bemutatásával mutatja be.

Az optimalizálási feladatok (a legjobb megoldás megtalálása) nem az 1C környezetben a legnépszerűbbek. Sőt, az egyik dolog számolni a végrehajtás minden döntést, és ez egészen más dolog, hogy fogadja el ezeket a döntéseket. Az utóbbi időben azonban úgy tűnik számomra, hogy az 1C rögtön felkeltette a versenytársakat ebben a kérdésben. Nagyon izgalmas egy tető alatt összeilleszteni mindazt, amit egy modern vezetőnek szüksége lehet, felzárkózni az SAP-val ebben az ügyben, és az MS Project és más tervezési rendszerek cseréjével.







Tehát az első téma a gradiens süllyedés módja.

A módszer alkalmazási köre minden olyan feladat, amely egy olyan n változót eredményez, amely az objektumfunkció minimális (maximális) értékét biztosítja. A célfüggvény itt a legérzékenyebb n-változók függvénye - a módszer által az objektív függvényre kivetett egyetlen feltétel annak folytonossága, legalábbis a döntés-keresési szegmensben. A folytonosság a gyakorlatban azt jelenti, hogy a változók értékeinek bármilyen kombinációjával megtalálható az objektív funkció valós értéke.

Vesszük be a jelölést:

- Az X változókészlet, amelyen az objektumfüggvény értéke függ

És maga a cél-függvény Z, amelyet a legegyszerűbb módon számítanak ki az X-ből

Most magyarázzuk meg, mi a gradiens. A gradiens egy multidimenzionális tér vektorja, amely jelzi az adott funkció legnagyobb növekedésének irányát. A gradiens komponensei a Z függvény változóinak különbségei.

Ez a legfontosabb korlátozása a gradiens süllyedés módszer alkalmazhatóságának - egy függvény differenciálhatóságának (folyamatosságának) a megoldáskeresés teljes területén. Ha ez a feltétel teljesül, akkor az optimális megoldás keresése tisztán technikai.

Klasszikus gradiens csökkenési eljárásával van implementálva, hogy minimálisra csökkentsék a célfüggvény keresztül antigradient (azaz szemben a gradiens vektor), amely nyerik a gradiens a legegyszerűbb módon - szorzás -1 a gradiens komponenseket. Vagy a jelölésben:

Most a legfontosabb kérdés: hogyan találjuk ezeket a nagyon dZ-t és a dX1-et. dX2 stb. Nagyon egyszerű! dXn az Xn változó infinitezimális növekménye. 0,0001 jelenlegi értékét. Vagy 0.0000000001 - a lényeg az, hogy (növekmény) nagyon kicsi :)

És hogyan számítsuk ki a dZ-t. Túl elemi! Számítjuk ki az X változókészletet Z, majd változtassuk meg az xn változót a dXn-ben. Ismét értékének kiszámításához az objektív függvény Z erre kissé módosított a (Zn) és keresse meg a különbséget - ez lesz dZ = Zn - Z. És most már tudjuk, DXN tét, és megtalálja dZ dZ / DXN egy szelet tortát.

Miután egymás után megtalálta a gradiens és az antigradizátum összes komponensét, megkapjuk a változók variációjának irányát, ami lehetővé teszi számunkra, hogy minél hamarabb elérjük a funkció minimális értékét.

A következő (k + 1) lépésben, itt is ki kell számítani az új értékeket a tömb változó X. Nyilvánvaló, hogy közelebb kerüljünk a minimális a célfüggvény Z, meg kell állítsa be az értékeket az előző X (k-adik) lépést a antigradient e képlet:

Még mindig meg kell értenie ezt a nagyon alfát a képletben. Miért van szükség, és honnan származik.

α az az együttható, amellyel az antigén sokszorosodik annak biztosítására, hogy a funkció lehetséges legkisebb értéke egy adott irányba érjen el. Önmagában a gradiens vagy az égésgátlás nem egy változó eltolódásának mértéke, hanem csak a mozgás irányát jelzi. A geometriai jelentése a gradiens - a lejtőn a érintő a funkciót a ponton Z Xn (az arány a másik lábát, hogy egy szomszédos dZ DXN), de a mozgó a tangens, mi elkerülhetetlenül eltérni a funkciót vonal eléréséhez a minimális. A jelentése az érintő, hogy ez ad a kijelző formájában egy egyenes vonal önkényes íves funkciók egy nagyon szűk térben - pontjának szomszédságában Xn.







Az α paraméter értékének keresését az egydimenziós optimalizálás egyik módjával végezzük. A változók értékei ismertek minket, és a gradiensük ismertek - a jelenlegi megoldás közelében még mindig minimálisra kell csökkenteni az objektív függvényt egyetlen paraméter tekintetében: α.

Itt maradok az egydimenziós optimalizáláson - a módszerek meglehetősen egyszerűen értelmezhetők és megvalósíthatók, csak azt mondom, hogy döntésemben az "arany" metódust alkalmaztam. Az ODZ az α esetében 0 és 1 között van.

Így összefoglalva azt, amit írtunk, olyan lépések sorozatát fogalmazzuk meg, amelyekkel megoldást találhat a gradiens alapján:

  1. A kezdeti támogatási megoldást alkotjuk, amelyhez a DGD-hez szükséges változókat rendeljük.
  2. Keressük meg a gradienseket és az antigrádokat minden egyes változó esetében az objektumfunkció növekedésének arányával, a változó értékének viszonylag kicsi növekedésével a változó növekményének értékéhez viszonyítva.
  3. Megtaláljuk az a-együtthatót. Az antigradiensek szaporodására van szükség, mielőtt a támogatási oldat kezdeti értékeit egydimenziós optimalizációs módszerrel hozzáadnánk. Az optimalizálás kritériuma az így korrigált értékek objektívfüggvényének legkisebb értéke.
  4. Az antigraditens és az α eltolódási tényező értékeinek megfelelően újraszámoljuk.
  5. Ellenőrizzük, hogy a szükséges pontosság (ε) kiszámításra kerül-e a célfunkció minimális számításához:

6. Ha a feltétel teljesül, és az egyik szintről a célfüggvény értékének változása kevesebb, mint mi meg a feltétel, ami azt jelenti, hogy az előírt pontosság érhető el, és a pillanatnyi megoldás, különben - folytassa a 2. lépéssel.

Most lépjünk át a feldolgozás során megoldott gyakorlati feladathoz.

A feladat szerint meg kell állítani a termék árát, hogy profitálni a megvalósítása a tervezett időszakban volt a legmagasabb. Meg kell jegyezni, hogy az értékesítési volumen függ a beépített ára nálunk, és a vételárat az áru (ami befolyásolja a bruttó nyereség) is függ a vásárlás összegét az áru: a szállító hajlandó engedményeket minél több, annál nagyobb lesz az összeg a mi vásárlások. Vagyis, mi szükség van mind az árképzés megérteni, hogy mennyi termék leszünk képesek végrehajtani, és milyen áron, és ezért mennyi árut kell ehhez a vásárláshoz, és akkor tudni fogja, hogy mi lesz a vételár. Általában egy ilyen kis rekurzív logika a megoldások megtalálásához :)

A legfontosabb dolog, hogy van - ez egy folytonos változó (az ár és a vásárlások nagyságához / értékesítés) és az objektív függvény (profit mindig ott vehet fel semmilyen értéket, akkor is, ha mínusz, ez az úgynevezett veszteség), és így a gradiens csökkenési eljárásával - a ez az.

Hogy oldja meg a problémát, ezt a módszert alkalmazzák kétszer az első szakaszban találjuk a paramétereket az egyenlet a termékek iránti kereslet szerinti értékesítés a korábbi időszakokban. Ez azt jelenti, feltételezve egyfajta függőség a kereslet az ár, kiszámítja az értékeket a paramétereket, amelyek minimalizálják az összege négyzetes eltérések a becsült és a tényleges értékesítési adatok. A második szakaszban, a paraméterek talált összefüggést az értékesítési volumen és az ár megvalósítását, optimalizáljuk a nyereség és a kezelés módjától is gradiensgyengülés, még akkor sem, csak egy változót. Mivel a gradiensgyengülés módszer, hogy minimalizálja az objektív függvény, és az eredmény semmi másnak kell maximalizálni, akkor ne használja tvialnuyu célfüggvény úgynevezett „MinusPribyl”, ami csak mi teszi, hogy kiszámítja profit kapott értéket az árak, és mielőtt visszatért megszorozza on -1 :) És működik! Most annál kevesebb lesz a "Minus Profibel", annál több a tény, hogy egyik sem a valódi haszon az értékesítésből.

Példa egy megoldásra a feldolgozásban, mint a megoldás univerzális keresési funkciója a gradiens süllyedés módszerével. Az egyetemesség lényege, hogy a változókat tömbként adják hozzá, és az objektumfüggvény egy karakterlánccal paraméterként átadódik. A célfüggvény, amely változó tömböt vesz és értéket ad vissza, írja be a kívánt típust - a legfontosabb az, hogy visszaad egy számot. És olyan szám, hogy minél kisebb, annál közelebb van az érvek adott tömbje az optimális megoldáshoz.

Miért nem adtam itt az eljárást, és kitaláltam a kezelést? Először is, az eljárás már túl hosszú, másrészt nem célzott funkciók nélkül működik, ezért mindent, mind pedig összekapcsolást is el kell húzni. Remélem, hogy a cikkben szereplő elmélet elég ahhoz, hogy képes legyen megvalósítani a megoldást, talán még jobb, mint én. Nos, ha egyáltalán nem működik - töltse le a kész feldolgozást és felhasználást :)

Fájlok letöltése