Költség csökkentés súlyozottan hiperbolikus tangens segítségével

Megosztok egy nehéz feladatot, mely ártatlannak és könnyűnek tűnik első ránézésre. Ráadásul egy nagyon gyakorlatias dologról van szó, mert a költség csökkentés mindig fontos része a céges működésnek.

Feladat:

Csökkenteni meglévő költségeket súlyozással úgy, hogy az összegük egy célérték legyen, mely kisebb a jelenlegi összegüknél.

Feltételek:

Mindegyik költség típus csak csökkenhet vagy azonos maradhat és nem lehet negatív. Tehát az eredeti érték és nulla közé kell esniük végül. Ismerjük a fontosságukat, mely egy súlyozott értékként jelenik meg, mely matematikailag vagy más módon került kiszámításra.

https://i.imgur.com/fNvJfKI.png

Példa:

Van 3 költség típusunk, melyeknél meg van a szabadságunk változtatni úgy, hogy a célzott költség a jelenlegi értékük és nulla közé essen. Havonta 100, 30 és 5 dollárba kerülnek. Ez összesen 135 dollár. Ezt a havi költséget szeretnénk levinni 80 dollárra. Tudjuk a súlyozást mindegyikhez, mely 5, 19, 40 értékű.

 

Mi adja a problémát?

Az, hogy nem lehet lineáris műveletekkel és sima súlyozott átlaggal kiszámolni a végeredményt úgy, hogy garantálni tudjuk, hogy soha semmilyen bemeneti kombináció nem okoz negatív értéket, vagy az eredetinél nagyobbat.

Ahogy egyre csökkentjük a kiindulási értékeket hogy elérjük a cél összeget, egyre lassulnia kell az értékcsökkenés sebességének, ahogy a nullát közelítjük. Másképpen fogalmazva, a csökkenés deriváltjának folyamatosan át kell mennie a súly értékéből nullába.

 

Miért van ez?

Azért, mert a súly független a kiindulási költségtől. Nézzünk két megoldási esetet.

1) Csökkentéssel számolva

Amikor felosztjuk a kezdeti költség összeg és cél összeg különbségét a súlyok alapján és mindegyik költséget ennyivel csökkentjük, akkor a súly független a kiindulási költségtől, ezért bármennyivel csökkentheti azt. Ha nagyobb a csökkenés mint az eredeti érték, akkor mínuszba mehet az eredmény.

A fenti példánál maradva a kiindulási összeg és cél összeg különbsége = ( 100 + 30 + 5 ) - 80 = 135 – 80 = 55. Tehát 55 dollárral kell csökkenteni az eredeti havi 135 dollárt. Ha az 55-öt felosztjuk a súlyok arányában, akkor 6.25, 23.75, 50 értékeket kapunk. Ha ezeket levonjuk a kiindulási költségekből, akkor a cél költségek 100 – 6.25, 30 – 23.75, 5 – 50 lesznek, amik 93.75, 6.25, -45.

Láthatjuk, hogy az utolsó értéknél az 5-ből -45 lett, vagyis mínuszba ment. Ez nem megengedett a kiindulásnál definiált feltételek alapján.

2) Növeléssel számolva

Ha fordítva csináljuk a cél összeg elérést és nem elkezdjük csökkenteni a kiindulási értékeket, hanem nulláról növeljük a súlyuk arányában addig, amíg el nem érjük a cél összeget, akkor meg túl nőhetnek az eredeti értéküknél. 100-hoz 6.25-öt kapunk, 30-hoz 23.75-öt és 5-höz 50-et. Látjuk, hogy az utolsó érték túlnő.

 

Mi a megoldás?

Az eredeti kiindulási költség szorzójának mindig 0 és 1 közé kell esnie. És mindenképpen szorzást kell végeznünk, hogy arányosságot tudjunk tartani. A 0 és 1 közé pedig egy faktor és a súly szorzójának kell esnie. És a végösszegnek el kell érnie a 80 dollárt.

 

Definíciók:

c → cost original (eredeti költségek)

t → cost total (végső költségek összege)

w → weight (költségek fontossága)

i → index (kiválasztja a költséget)

 

Tudjuk, hogy “t”-nek egyenlőnek kell lennie a végső költségek összegével, melyeket úgy kapunk, hogy egy “y” faktorral szorozzuk az eredeti költségeket és ezt a faktort állapítjuk meg később.

t = sum( ci * y )

 

Ebből az egyenkénti végső költségek értéke:

ci * y

 

Tudjuk, hogy az “y” faktornak 0 és 1 közé szabad csak esnie, mert ekkor az eredeti érték és nulla között fogja tartani a végső értéket. Viszont függenie kell az eredeti költség súlyától. Hogyan érem ezt el?

Egyrészt behajlítom “y” értékét egy olyan görbébe, mely az “x” tengelyen nulla pontból növekszik és aszimptotikusan közelíti 1-et. Lásd az alábbi linken a zöld görbét, mely hiperbolikus tangens, és a kék görbét, mely egy fordított hiperbola balra csúsztatva.

https://www.geogebra.org/graphing/hqcyy4xr

https://i.imgur.com/z41e5Pe.png

A kettő közül hiperbolikus tangens-t választom, mert az gyorsabban konvergál az 1-es érték felé és így majd később a felezéses közelítésnél jobban behatárolt felső limitből tudok indulni, nem pedig a végtelent közelítő értéktől. Erről később.

 

Tehát azt mondom, hogy:

y = tanh( x * wi )

 

Melyhez keresem “x” értékét. Mit érek el ezzel? A nagyobb súlyok feljebb lesznek (“y” értéke nagyobb lesz), a kisebbek pedig lejjebb. De csakis 0 és 1 között.

És “x” értékét pedig bináris lépésekkel keresem meg 0 és a felső limit között (logaritmikus keresés másképpen). Ha valaki nem ismeri, akkor lásd::

https://en.wikipedia.org/wiki/Binary_search_algorithm

 

Mi történik? Egy olyan adaptív mechanizmust csinálok ezzel, mely az “x” tengelyen húzkodja a súlyokat balra és jobbra az “x” faktor keresése közben. És úgy fogja beállítani őket az “x” tengelyen, hogy az “y” tengelyen megjelenő értékeikkel szorzott eredeti költségek összege pontosan a cél összeget adja.

Előny, hogy elég az “x” keresését relatíve alacsony értékből indíthatom, mert tanh(x) már a 20-as értéknél is túlcsordul és 1-et kapok a lebegőpontos ábrázolás felbontása miatt. Így az “x” kiindulási limitjét úgy határozom meg, hogy 20-at osztom a legkisebb súllyal és azt használom, ha nagyobb mint 20, egyébként pedig 20-at.

x_start = max( 20, 20 / w_min )

 

Eredmény:

A fenti példát beadva az eredmény így alakul, immáron túlcsordulás és negatívok nélkül:

 

100 → 45.91574882372393

30 → 29.08557143952188

5 → 4.998679736754175

 

Kerekítve:

100 → 45.9

30 → 29.1

5 → 5

 

Ellenőrizzünk:

45.9 + 29.1 + 5 = 80

 

Tehát tetszőleges költségeket tetszőleges súlyokkal csökkentettem tetszőleges végösszeget célozva.

 

Nézzünk egy másik random példát:

költségek = 215, 105, 100

súlyok = 2.24, 1.48, 4.08

kiindulási összeg = 420

cél összeg = 77.04

 

Eredmény:

215 → 34.4

105 → 8.44

100 → 34.2

 

Kiegészítés:

Ha költség növelésről van szó, az egyszerű. A növekedési különbséget felosztjuk a súlyok arányában és ezzel növeljük az eredeti költségeket.

Hozzászólások

Javits ki, de azt hiszem ez a knapsack (zsakolasi) problema egyik valtozata:

https://en.wikipedia.org/wiki/Knapsack_problem

Van ra megoldas (legalabbis az integer knapsackre), heurisztikus es egzakt is, erdemes volna osszehasonlitani nagyobb problemaknal a megoldast, azt hogy az ertek mennyire van kozel a maximumhoz egy adott adott konfiguracional, a pontos megoldas nem biztos hogy ugyanaz.

Megnéztem és picit más a probléma ha jól nézem, de azért érdekes és nyugodtan jöhet bármi relevancia. Köszi.

Úgy látom, hogy knapsack-nél az értéket maxolják ki a súly függvényében. Nálam pedig nincs érték, csupán a súly függvényében akarom csökkenteni. Tehát a relációt egymáshoz képest a súlyok adják és az érték határok (max és nulla) korlátozzák.

Természetesen aktívan vizsgálom, hogy hogyan módosulnak a súlyok egymáshoz képesti viszonya a hip. tangens miatt. Kutatásom arra is irányul, hogy a másik, hiperbolikus megoldásnál hogyan módosulnak.

Még egy megoldás. Egy rugó lenyomás és felnyomásnak tudom szemléltetni, ahol a rugó spiráljainak egymástól való távolsága szemlélteti a súlyokat. És felnyomásból indulunk, ahol maximumra van felfelé összenyomva a rugó és így minden súly 1-es értékű. Tehát a teljes összeg nagyobb mint a keresett végösszeg.

Majd engedjük le amíg a legkisebb súly el nem éri a nullát vagy egy alsó limitet és keressük, hogy hol találjuk meg a pontos cél összeget. Ha nincs meg, akkor tovább lehet menni vele lenyomással, ahol a súlyok nullába konvergálnak. Itt a végösszeg nulla, tehát a teljes összes kisebb mint a keresett összeg.

Ezért a kettő között lesz a válasz. Tehát ez egy lineáris 2 fázisú eljárás. Viszont látni kell, hogy a súlyok egymáshoz képesti aránya itt is módosul, hiperbolikusan felgyorsuló és lecsengő fázissal.

Meg ranezek erre a hetvegen, de ha jol latom itt torzulnak a sulyok, es az a kerdes mennyire szabad elterni a megadottol...

Nekem az az erzesem meg lehet ezt oldani sulyok torzulasa nelkul is, bar nem valoszinu hogy linearis lesz a megoldokeplet. A kenyszereket, hogy a vasarolt ertek ne legyen negativ sok felekeppen figyelembe lehet venni, pl negyzetek osszeget nezed. Ha a vegeredmeny nem is egyszeru keplet, de sokszor fix-pont keresesi modszerrel par iteracioval megvan.

A kommenteket olvasva sem teljesen egyertelmu nekem, hogy mit ertesz sulyokon. 

Most T_orig = sum(c_i), de szeretned, ha T = 80 = sum(c_i* y ), ahol y egy kozos szorzo?

Miben hasznalod ilyenkor a sulyt? Hogy allapitod meg, hogy serult a sulyozas?

Vagy eseltleg a T = 80 = sum(c_i*y_i) kenyszer-egyenletben y_i, a suly, es szerentned ha y_i / sum(y_i) = w_i/sum(w_i) ? (tehat az eredeti T_orig-ban mindennek 1 a sulya, T-nel pedig y_i)

Vagy a T_orig - T csokkenest okozo Delta c_i vektor aranyos legyen a w_i-vel?

OK, a kérdésed jó. Az "y"-t elírtam, helyesen "y_i", ahogy írtad is. Tehát:

t = 80 = sum( c_i * y_i )

És "y_i" minél kevésbé térjen el "w_i"-től, ha van rá mód. Ehhez egy közös faktort használtam, ami "x". Ahol:

y_i = tanh( w_i * x )

Az "x" közös faktor azért kell, hogy bináris kereséssel be tudjam állítani y_i értékét és elérjek a 80-as célösszeghez.

Nyilván külön is állíthatnád "x" értékét, a kérdés az, hogy mivel tudnak legjobban teljesülni a kiindulási feltételek.

Természetesen a súlyok torzulásának mértéke nem definiált, de pont itt van a megoldás szabadságának foka. Ha definiált lenne, akkor nincs kérdés és adott a megoldás. Tehát pont azt a kérdést kutatom, hogy hogyan torzuljanak a súlyok, ha szükséges a torzulás.

Bocs, valoban igy van . Lentebb amugy irtad, hogy ez egy valo eletbol vett problema. Gondolom ott a sulyok valamilyen linearis/derivalt alakbol szuletnek (pl stressz teszt, kis skalaju felmeres, proba), ami miatt nagy skalan ertelmuket veszthetik (negativ osszeg vagy 1-nel nagyobb szorzo). Nyilvan valamit tenni kell, amire egy megoldas a te altalad felvazolt modszer, de elobb-utobb muszaj lesz tesztelni ennek is a hatekonysagat.

Köszi.

Igen, a valós feladatomban pontos súlyok érhetőek el és valós fontossági arányt mutatnak.

A hatékonyságot teszteljük, viszont tökéletes optimum konvergencia nem feltétlen bizonyítható egyelőre, így szuboptium adott. Emberi döntéshez képest kell jobbnak lennie, így ez már több mint jó.

100 → 45.9

30 → 29.1

5 → 5

 

 

De ekkor hol maradt az, hogy a költségek súlya 5, 19, 40?

Baromira nem értelek, mit takar a költségek súlyozása feltétel, és miért tartod be ennél a megoldásnál: miknek lesz az aránya itt 5:19:40?

Jó a kérdés és ezért jó a példám, mert ezek a számok megmutatják a szélsőséges esetet, amire kell a megoldás.

Nem tudom, hogy olvastad-e feljebb a negatív példát. Normál súlyozással 93.75, 6.25, -45 értékekre csökkenne az eredmény, ugyanis 55 dollárt le kell dolgozni a 135-ből.

A súlyok megtartásával nem lehet. Erről írhattam volna bővebben. Lényeg, hogy torzítás kell. A kérdés az, hogyan lehet megtenni ezt a torzítást. Mindenképpen úgy, hogy mivel negatívba nem mehetünk, ezért a nulla felé be kell lassulnia a csökkenésnek. Viszont ez miatt a csökkenés elindulásánál is lassú a "felfutás" a csökkenés sebességének, és ez látszik. Tehát a kisebb súllyal rendelkező gyorsabban kezd el csökkenni, de ott már elérte a cél értéket.

Feljebb írtam 3 megoldást is, mely ezt megteszi. Ha ezekhez van kérdésed, szívesen válaszolok.

Amint lesz időm, megmutatom a 3. megoldás működését.

na de amint elengedjük a súlyokat (relaxálni kell a feltételt, mert amúgy nincs megoldás), akkor meg nem tök mindegy, hogy mi a végeredmény, amíg az összeg 80 lesz? lehetne 80-0-0 is, pontosan ugyanannyira jó, mint bármelyik másik, mert eldobtuk a "költségek súlya" feltételt.

Megfogalmazhatod úgy a problémát, hogy van egy szám n-esed (x_i) és egy idealizált súly n-esed (w_i). Van egy célszámod (T). Keresed azt a w'_i szám n-est, amelyre igaz, hogy szumma(x_i*w'_i) = T, és w'_i közel van w_i-hez. Na, ez a közelség az, amit definiálni kéne, hogy hogyan teszed meg. Ha ez megvan, akkor ez egy optimalizálási probléma, eléggé jól definiált dolog. De kell hozzá az, hogy bármely két w szám n-est össze tudd hasonlítani. Akár az is lehet, hogy rendezési relációt adsz csak meg, de definiálhatsz rájuk metrikát is, sokfélét.

Az, hogy mi lesz a legjobb megoldás, ettől a közelségdefiníciótól/rendezési relációtól függ, nem lehet általános megoldást adni, amíg ez nincs definiálva.

Nálad mi ez a közelségmetrika? Miért pont ez a legjobb?

Ugyanazt leírtad, hogy minél jobban tartsuk a súlyokat, de közben el akarjuk érni a cél összeget. Ehhez torzulniuk kell.

Izgalmasabb szerintem ha megpróbálod megoldani és előjönni ötletekkel. Én felsoroltam 3 lehetséges megoldást. Persze a nullából 1-be konvergáló függvény sok fajta lehet. További kutatást kell beletenni ezek vizsgálatába és az optimum definícióba és hogy lehet-e optimum konvergenciát bizonyítani bármilyen kereten belül.

Részemről a fontos lépés a felismerése a nullából 1-be konvergáló függvény szüksége.

Ha a torzulás mértékét a két súly különbségével jellemezzük, akkor az eredeti súlynak is normalizáltnak kell lennie. Itt mondjuk eleve több megoldandó probléma van, melyek már kezeltem. Például nem jó ha 0 és 1 közé vannak széthúzva, mert akkor a 0-ban és 1-ben lévő súlyok közül az egyik nem változik. Ettől tekintsünk most el.

Ha normalizált súlyokat hasonlítunk és így mindkét esetben 0..1 intervallumot kapunk, akkor

sum( | w_i - w'_i | ) adhatja a torzulás mértékét, de jobb ha L2-t veszünk négyzetes eltéréssel:

sum( ( w_i - w'_i )^2 )

Mivel végtelen állapot van az "x" faktor értéke alapján, így "x" minden állapotához tartozó előbbi summa értékének eloszlását érdemes vizsgálni szerintem az integrállal, melynél adja magát a várható érték meghatározása. Ezzel összehasonlíthatóvá válnak a különböző függvények, melyek között így további optimum kereshető.

További kérdés, hogy fixen kell-e tartani a kiindulási értékeket (c_i) és végösszeget (t). Vagy lehetséges ezektől függetlenül generalizálni az optimum keresést.

Mit jelent azt, hogy 0-ból 1-be konvergáló függvény?
Aminek -Inf-ben a határértéke 0, +Inf-ben pedig a határértéke 1? A tanh() nem ilyen.

Ha olyan kellene, hogy 0-ban 0, és a határértéke +Inf-ben 1, az megint mást jelent.

Először fogalmazd meg a feladatot jól. Eleve miért kéne olyan függvénynek lennie, aminek a határértéke +Inf-ben 1? Miért is kell ez? Fogalmazd meg rendesen a feladatot, ha matematikáról van szó.

Ne foglalkozz a megoldásommal, mert megzavar.

Adott c_0 ... c_n, továbbiakban c_i, melyek szám értékek.

Ezeket kell csökkenteni annyira, hogy az összegük végül t legyen ahol t <= sum( c_i )

Minden c_i -hez tartozik egy w_i súly, amelyeket minél jobban figyelembe kell venni c_i csökkentésekor, ahol w_i súlyok a c_i értékek fontosságát mutatják. Nagyobb w_i érték mellett kevésbé akarom csökkenteni c_i értékét.

Feltétel, hogy c_i csökkentett eredménye nem lehet nagyobb mint c_i és kisebb mint 0, tehát 0 és az eredeti érték közé kell hogy essen.

Ez rendben is van. Most már csak ezt kell szabatosan definiálnod, és már közelítünk a normális megfogalmazás felé:
 "minél jobban figyelembe kell venni", "Nagyobb w_i érték mellett kevésbé akarom csökkenteni c_i értékét."

De hogyan jön ehhez a végtelenben 1-be konvergáló függvények halmaza? Azt a megjegyzést tetted, hogy ez nagyon fontos elem.

Gondolom, az a célja, hogy ami 1 fölé menne, az egyre jobban felkeményedjen 1-hez közeledve, egyre nagyobb ellenállást fejtsen ki az ellen, hogy elérd az 1-et. Ehhez egy ilyen nonlinearitás épp jó. Az persze izgalmas kérdés, melyik lehet az a függvény, amely valamely szempont alapján az optimális, és képesek vagyunk-e megfogalmazni ezt a szempontot.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Ő adott egy olyan megoldást, ami szinte biztos, hogy nem optimális - hiszen az optimum kritériuma meg sem lett fogalmazva -, viszont az általa megfogalmazott peremfeltételeknek eleget tesz. Nem lesz egyik költség sem negatív, és nem lesz több a jelenleginél. Arra kellene kritériumot adni, hogy a súlyok minél kevésbé torzuljanak. Én erre talán a súlyok eredetitől való eltérésének négyzetét szoroznám a súllyal, ezeket összegezném, s ennek minimumát keresném. Azért, mert ebben megfogalmazódik, hogy a nagy eltérést nem szeretjük, és az is, hogy a nagyobb súlyú tétel fontosabb, szóval a nagy súlyúnak már a kisebb eltérését sem szeretjük annyira. :)

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Nem tudod elfogadni, amikor a szabadság foka nem 1, hanem mondjuk 30 egy rendszerben. Nem definiált, amit nem definiáltam. Kötekedhetsz, de akkor is az a kiinduló feltétel, amit írtam.

Nincs határozott optimum definíció, mert nem meghatározott a súlyok viszonya. Ez adja a nagyobb szabadságfokot. Ezért aktív kutatásom tárgya. Alkalmazott matematikáról van szó, ezért nehéz. Mert a tökéletlen és nagy információ hiánnyal rendelkező gyakorlathoz kell igazítani.

Még egyszer leírom a feltételt: tudunk fontossági arányt felállítani és a kérdés az, hogy HOGYAN alkalmazzam ezt a csökkentés folyamán.

Csak ennyi infó ismert. Csökkentenem kell az értékeket egy végösszegre, és tudom a fontossági arányt. Hogyan csökkentsem?

Ezért nehéz. Akkor is kell szuboptimális megoldást adni, ha valaki nem tudja elfogadni, hogy nem zárt problémáról beszélünk. A döntés nem megúszható.

Még mindig nem definiáltad matematikailag a feladatot. Nem azért nehéz, mert alkalmazott matematika, hanem azért, mert nem definiált a probléma.

"tudunk fontossági arányt felállítani és a kérdés az, hogy HOGYAN alkalmazzam ezt a csökkentés folyamán."

Ez nem problémadefiníció.

Nem kötekszem azért, hogy kötekedjek, hanem PONTOS, precíz, matematikailag értelmes definíciót keresek a problémához, hogy lehessen vele matematikailag dolgozni.

Mert amíg ez nincs meg, ez csak játék a számokkal.

"Akkor is kell szuboptimális megoldást adni, ha valaki nem tudja elfogadni, hogy nem zárt problémáról beszélünk. "

Ember, amíg nem definiált az, hogy mi a célfüggvény, addig nem tudhatod, hogy a megoldásod szuboptimális vagy sem.

Készakarva nem definiált. Ez a kérdés is a kutatás tárgya. Milyen kérdést tegyünk fel itt?

Egyébként például:

Hívjuk d_i -nek (difference), amely értékkel c_i csökken végül. Tehát:

sum( c_i - d_i ) = t

Cél: nagyobb w_i-hez (fontosabb faktor) kisebb d_i tartozzon. Vagyis minimalizálni sum( d_i / w_i ) értékét. De közben tartani kell a feltételt, hogy nulla és az eredetei érték közé eshet c_i végső csökkentett értéke.

Mivel osztás van benne (ami szorzás reciprokkal), így eleve gyökét venném, hogy visszakerüljünk valamelyes az eredeti nagyságrendbe.

sum( ( d_i / w_i )^0.5 )

De az összegük helyett akár a szorzatukra is minimalizálhatunk: PI( d_i / w_i )

(Itt kezelendő a nulla kérdése)

Nem biztos hogy ez a minimalizálandó feltétel az értelmesebb. Ezért kutatás tárgya.

Példákat mutattam. Egyébként a szorzat is lehetne jó, mert az is a minimum felé hajt, csak másképpen.

PI( d / w ) = PI( d ) / PI( w )

Tehát itt az összes szempontjából történne. Vagyis nem azt mondanánk, hogy külön értékeknél számítson, hanem összesítve számítson. De ez csak egy példa.

Erről szól a kutatás. Azt el tudod fogadni, hogy ez egy függőben lévő kérdés?

Befejeztem a lekódolását egy harmadik eljárásnak is. Módosítottam a fenti rugós példán.

Úgy működik, hogy mindegyik költséget elkezdem csökkenteni, amíg el nem éri a cél összeget. A csökkentés sebességét pedig a súlyuk reciproka adja. Ha mínuszba menne egy érték, akkor nullán tartom.

A fenti első példa eredménye ezzel a metódussal:

100 -> 59.2
30 -> 20.3
5 -> 0.471

Itt az alap különbség, hogy nem gyorsul és nem lassul a csökkenés sebessége az elején és végén.

Mutatok egy példát:

cost original total 33607
cost goal total 31428 (93.5%)

tanh:
w 1.57  c 151 -> 141
w 1.49  c 1081 -> 737
w 3.7  c 169 -> 169
w 1.58  c 32206 -> 30381

linear:
w 1.57  c 151 -> 0
w 1.49  c 1081 -> 0
w 3.7  c 169 -> 104
w 1.58  c 32206 -> 31324

A lineárisnál a változások:

151, 1081, 65, 882

Ha az utolsónak az eredeti súlyt vesszük (1.58), akkor a többi súlya erre jön ki:

9.22, 1.28, 21.4, 1.58

Ezek pedig az eredeti súlyok voltak:

1.57, 1.49, 3.7, 1.58

Tehát torzultak és ez normális, hogy ha valamelyik is nem csökkenthető tovább, mert negatívba menne.

Még egyszer: ha relaxálod azt a feltételt, hogy a súlyozást be kell tartani, akkor tetszőleges megoldás lehet jó. Ugyanis nincs definiálva semmilyen célfüggvényed, amit optimalizálni kell.

Definiáld rendesen a feladatot. Ha már matematikáról van szó, akkor legyen matematikai feladat, mert ez így csak játék a számokkal, és nem matematika.

Tudsz mutatni egy valós problémát és arra megoldást?

Bevallom nem tudom elképzelni.

Pénzt osztanak szét gazdasági entitások között, melyeknek egyébként jól behatárolható a hatékonysági vagy más mutatója sok szempont alapján, és most csökkenteni kell a szétosztott összeget. De nem az eddigi szétosztás arányában akarják csökkenteni, hanem a mutatók figyelembe vételével.

Úgy is fel lehet fogni, hogy nem csak a végösszeg csökken, hanem a szétosztás fontossága is. Ez adja a komplexitását.

Másik példa. Cégnek csökken a bevétele és ezért a kiadását is csökkenteni akarja. De nem az eddigi kiadások arányában (miért tenné úgy?), hanem a meghatározott fontosság szempontjából.

Vagy egy beruházás X tőkét indokolna, mely gondos tervezés alapján jön ki. De csökkentettből kell kihozni. Ha van szabadság foka a különböző egységekre jutó tőke csökkentésének és meghatározható a fontosságuk (ez külön kérdés, de amin dolgozok ott igen), akkor ott is adott a feladat.

Tehát egy más kialakított költség struktúrán változtatunk. Nem nulláról, mert akkor akármennyire ki tudod alakítani a költség felosztást. Hanem egy már meglévőn kell módosítani csökkentéssel adott fontosságok figyelembe vételével.

Példákkal nehéz készülni, remélem valamennyire elfogadhatók a fentik.

Elsőre azt hittem, hogy értem, de ezek alapján mégsem. :)

Lehet, hogy nekem maradt ki valami, de mi van az output oldallal? Lehet, hogy én nézem túl közgázos szemmel a matekos helyett, szóval fixme.

Ha van mondjuk három üzletágam, aminek van fix és változó költsége, akkor az összes költségem ugye: (F1 + x * V1) + (F2 + y * V2) + (F3 + z * V3) = SUM(költség). Ezt ugye csökkentjük. Ha nagyon leegyszerűsítem a kérdést, akkor költséget általában két okból csökkentünk (és ez kb. a kettes alá szint lesz, szóval a szőrszálhasogatást most hagyjuk :))

  • Profitabilitás javítása
    Úgy akarjuk az összes költséget (C) csökkenteni, hogy az összbevétel (R) ennél kevesebbet csökkenjen, tehát R - C < R' - C'. Ezzel az a baj, hogy mivel F1, F2, F3 >= 0, a bevételi oldalon pedig R' <= R, ezért nő az előállított termékek költséghányada.

    Példa. Az egyik üzletág csokit gyárt. A gyártósor fenntartásának napi költsége 1M forint. Egy db csoki legyártásának a költsége legyen mondjuk 100 forint. A nagyker 200 forintért veszi át a csokit. Ha most van 5M forint költség allokálva az üzletágra, abból 40.000 darab csoki lesz, ami ugye napi 8M forint bevétel. A profitom 3M forint, a profitabilitás 37.5%. Ha csökkentem a költségeket, és már csak 4M-et kap a cost center, akkor 30K db csoki lesz, 6M bevétellel, 2M profittal, 33% profitabilitással.

  • Finanszírozási problémák miatt
    Azért akarunk csökkenteni, mert valamilyen okból nem tudunk annyi pénzt fektetni a csokigyártásba, amennyit eddig. Beruházni akarunk valami másba, D/E-t akarunk javítani, lényegtelen. Ilyenkor ugye bevállaljuk a profitcsökkenést, mert az előbbi esetben egy jövőbeli, magasabb megtérülésben reménykedünk, utóbbi esetben meg mondjuk a túl magas D/E arány miatt a beszállító nem akar szóba állni velünk, és attól tartunk, hogy később emiatt többet fogunk veszíteni.

    Viszont itt is, akár az előző esetnél, felmerül a kérdés, hogy nem lehet-e a kimeneti oldalt, a profitot jobban optimalizálni. Ha mondjuk a csoki mellett gyártok bort is, miért nem azon gondolkodom, hogy hol van a komparatív előnye a cégnek? Lehet, hogy bort gyártani hülyeség, mert ha eladom a borgyárat, az ott felszabadított cashflow felét csokigyártásba fektetem (a másik felét meg ugye "költségcsökkentem") akkor simán lehet, hogy a végén nagyobb gyáram lesz, több profittal, stb. mint külön-külön.

Nékem teccik! :)

A közgazdaság megkülönböztet állandó és változó költségeket. Szerintem ez a modell csak az utóbbiakra alkalmazható, és ott is csak bizonyos korlátok között. Én kizárólag akkor alkalmaznám, ha csak számszerűsíthető kapcsolat van a költségek között. Ha teszem azt minőségi (nem számszerűsíthető) kapcsolat is van, akkor nagy eséllyel az felülírja a számokkal leírható kapcsolatot. További zavaró tényező lehet, ha a költségek változása a megváltozott termék/szolgáltatás tulajdonságokon keresztül a bevételekre is kimutatható hatással van.

Koszi a bejegyzest. Felhasznalva a szamolasaidat cegunk jovohetre leepiteseket tervez. :P

Ma kicsit több időm volt és átolvastam újra, hátha nem értettem meg elsőre. Nos, ha elsőre nem értettem meg, akkor másodikra sem, mert ugyan úgy látom most is.

Vagyis:

Egy vállalatnál a  LEAN elvek hatékonyabbak, mint ez a fajta matematika. Ennek oka a súlyok esetlegessége. Javíts ki, de én nem ismerek azok mérésére objektív módszertant.
Mutatom a problémát.

Mi mennyire fontos egy termék értékesítésénél?
- ár (eladási és beszerzési)
- minőség
- marketing
- kiszolgálás költsége

Ha egy kereskedő vállalkozás vagy (ebből van több), akkor ezekhez nyúlhatsz, amivel a (árrés-költség)/árrés (vagyis profit) mutatódat tudod javítani. 

E négy "költséghely"-ből megsejthető, hogy minden terméknél más és más  súly. Sőt! Ugyanannál a terméknél különböző minőség, ár vagy marketing tevékenység mellett is a súlyok aránya megváltozik.

Azt érzem (bizonyítani nem tudom), hogy a görbéhez görbíted a valóságot. Hozzá kell tennem: lehet, hogy a többségében igazad van ettől függetlenül. Már csak azért is, mert: Egy adott halmaz csekély számú  random értékeit, tetszőleges sorrendben, végtelen számú függvény tartalmazhatja.

A példám valszeg nem volt elég jó. Amihez fejlesztettem az eljárást, ott pontos súlyaim vannak.

Sajnos anélkül hogy pontosan részletezném a területet amin éppen dolgozok, nehéz jó példákkal szolgálni.

Ezen felül a súlyok sokszor jól megállapíthatók. A fenti példádhoz például a log-ok összegét javasolnám, ahogy régebben bemutattam. Tehát pozitív tulajdonságnál hozzáadni, negatívnál levonni.

0 - ln( ár ) + ln( minőség ) ... stb

Azért jó a log domain, mert az lineárisba húzza az exponenciális eloszlást és direkt módon felhasználhatóvá válnak a súly értékek lineáris számításokhoz. Vagyis másképp fogalmazva, közvetlenül szorozhatsz és oszthatsz velük, vagy súlyozott átlaghoz használhatod.

Az az érdekessége ennek az eljárásnak is, hogy emberileg csak állni tudunk előtte, de nem tudjuk eldönteni, hogy melyik terméket mennyire vegyük figyelembe. A kapott súlyokkal viszont azonnal el tudsz kezdeni dolgozni.

Tehát a súlyok megállapítása valóban szintén kritikus, de arra is van alkalmazható eljárás.

Összegezve: Jó példák valóban kellenek.