Eloszlás (distribution) #matek 2018. július 14., szombat - 1:31


Elkezdtem csinálni egy "fél órás" projektet. Egy Cleverbothoz hasonló csetbotot. Alapesetben ezt közel sem fél óra lenne megcsinálni, főleg, ha csicsázzuk a dolgot mindenféle extra dologgal, elágazásokkal, vizsgálatokkal, fene tudja. Alapvetően az egyszerűsége annyiban van egy YAML struktúrát használó bothoz képest (vagy valami ilyen, már nem emlékszek, bátyám foglalkozott ezzel többet), hogy nem kell előre megírni ötmillió beszélgetést, hogy értelmesnek látszódjon, hanem magától tanul.

Ezt majd részletezem másik bejegyzésben, viszont szükségem volt egy normál eloszláshoz hasonló véletlenszerű generálásra. A chatbothoz. De nem találtam, vagy nem értelmeset, vagy magas gépigényűt, stb. Miért?

Mármint, minek ez nekem, meg mi ez? Egyszerű. Igazából egy súlyozott véletlenszerűen választó szkript kellett nekem. Példa: a "hogy vagy?" kérdésre tegyük fel, hogy 100-ból 70 ember azt írja, hogy "jól.", 20 azt, hogy "megvagyok.", és 10 azt, hogy "rosszul". Ez százalékban is pont így jön ki.

Az én tanuló chatbotom az ugyanolyan kérdésre ugyanolyan adott válaszokat nem jegyzi fel magának többször, helyette egy számlálót növel mindössze. Ez a számláló mutatja, hogy mire mennyiszer mondták azt, hogy ... blablabla. Pl. az előző példa - hogy a chatbottal való beszélgetés közben hányszor mondták a "hogy vagy?" kérdésre, hogy "jól.".

Ez a chatbot visszafelé is így működik. Tehát ha Te írod neki, hogy "hogy vagy?", erre ő válaszol az ezutáni emberi válaszok közül valamelyikkel, véletlenszerűen. De minél többen mondtak egy adott választ, annál valószínűbb, hogy ő is azt fogja rá mondani. Na, erre kellett nekem ez a normál eloszlás. Ha valamit 500-an mondtak, és valamit csak 1x, akkor szinte soha ne azt a "csak egyszer" választ adja, hanem azt, amit 500 ember.

De erre épkézláb megoldást nem találtam (emberi nyelven / JÓ programozói megoldással; nem matematikusi megfogalmazást), csak 2-3 feltett, de nagyjából megválaszolatlan Stack Overflow kérdést. De az egyik béna tömbös megválaszolása után eszembe jutott egy viszontlag memória- és CPU kímélő megoldás a problémára. Most teszteltem is, jónak tűnik.

Előbb leírom a konkrét PHP kódot (phptester.net-en nyomtam le, de bárhogy lehet tesztelgetni):

$results = array('Jól', 'Megvagyok', 'Rosszul'); $odds = array(70, 20, 10); $max = 0; for($i = 0; $i < count($results); $i++) $max += $odds[$i]; $rand = mt_rand(0, $max); $choosenIndex = 0; /* echo "Esély: $rand<br />"; */ for($i = 0; $i < count($results); $i++) { $rand = max(0, $rand - $odds[$i]); if($rand == 0) break; else $choosenIndex++; } echo ' - Hogy vagy? <br /> - ' . $results[$choosenIndex];

Van egy tömbnyi választandó elemem, meg egy tömbnyi ugyanolyan sorrendbe feltöltött esélyem. Persze, megoldható kétdimenziós tömbbel is, vagy ilyesmi, de én most az egyszerűség kedvéért így csináltam.

Nem is bonyolult így nézve, ugye? Az esélyek bármennyik lehetnek. Végül van egy maximum számom, a randomizálás tetőpontja. Ez az összes elem esélye összeadva. 70+20+10 (lehetne 5000+20+10 is, működik úgy is, ofc).

Majd egy változót tényleg randomizálunk 0 és max közt. Kell még egy index változó, ami a számok alapján kiválasztottnak ítélt tömbindexet mutatja majd.

Innentől logikus. Csinálunk egy akkora for ciklust, mint a tömb elemeinek száma. A randomunkból minden "körben" kivonjuk az épp ciklusváltozó szerinti sorrendben következő esélyek tömb számát. Nem muszáj 0-ra redukálni, de úgy szebb. Ezután ellenőrizzük, hogy a randomunk kevesebbegyenlő-e, mint 0. Ha igen, akkor elértünk oda, hogy a jelenlegi index esik abba a szakaszba, amivel párosul a választott tömbelem a másik tömbben. Ha nem, akkor túlléptünk egy elemnek a lehetőségén. Ennyi.

Ezt nem is igazán tudom elmagyarázni, ezért lerajzolom, így befejezésképp:


Cserepelés 2018. június 30., szombat - 21:49


Vagy cserépcsere. Igazából annyi volt a terv mára, hogy leszedjük a kamraműhely (hát valójában tényleg az; két szekrénnyi részt kamra, maradék részt műhely..) tetőfedését jelentő cserepet, hogy kicseréljük ilyen acél hullámpalára..

Mi a fene lehet a neve? Megkerestem, hogy ne beszéljek hülyeséget. Lindab trapézlemez. Ilyenből 3 méteres darabokból volt 19 db, ebből lett kihozva az épületrész teteje. Nem volt olcsó mulatság, de legalább így biztos, hogy nem fog beázni ezentúl. Mert eddig ez volt az egyik legégetőbb probléma.

3-5 helyen becsepegett eső alatt, valószínűleg az eltört cserép miatt, meg a maszek felpakolásának köszönhetően - meg annak, hogy mivel nincs ablak a helyiségben, ezért tetőablaka van, polikarbonátból egy jó nagy (szerintem több, mint 2x2 méteres) darab. Jól ad fényt, de ugye nem voltak jól hozzápasszolva a cserepek, szóval ez most pontosabb, körültekintőbb megoldás, és körülményesebb is volt megcsinálni.


Hát, 8-kor keltünk, közös családi munkával le is szedtük a régi tetőt. Mocskosul fújt a szél, ami vicces volt, mert a cserép összes levelét, porát, meg egyéb vackát, ami csak volt rajta, másodpercenként az arcunkba fújta..



Hát, aztán felpakolásztuk szépen a lindab trapézokat. Elég sok mászkálás volt fel-le a tetőre/ről, mert ugye a két kémény miatt több helyen is méretre és formára kellett vágni a lemezeket. Meg persze a polikarbonát miatt is. Kicsit meg is áztunk, mikor már a 80%-át felraktuk, így akkor már nemigen ázott be, viszont jó csúszós lett az amúgy is kb. 35° dőlési szögben lévő sík lapos tető. Valami ilyesmi okból kifolyólag a bátyám megvágta a combját az egyik lemezzel. Mocskos élesek lehetnek, mert be lehetett látni az izomig a vágásban, és nem is érezte a fájdalmat. >_<" Meg egyébként még a pakoláskor apám kezét is megvágta a lemez, ő sem érezte. Egyedül én viseltem ilyen menő, 310 Ft-os kesztyűt. Amúgy nagyon szuper volt, csalánt is szedtem félidő pihenőben vele. Eredetileg hófehérek voltak...


Szóval még a kezemet sem piszkoltam be voltaképp a munkával, mindössze a kesztyűmet. A 8 órás kezdéshez képest délután 5 körül végeztünk úgy igazán. Végeredményében elég menő lett, és már pakolás közbeni s láthattam élesben, ahogy az eső végigfut rajta. Hát, ez a nap jól eltelt.




Magasság nem volt túl nagy, de amúgy tériszonyos vagyok.

Monoblokk 2018. június 23., szombat - 18:48


A 84 km-es út első szakasza után már hülye, vinnyogó hangot adott ki a kerékpárom. Gyomai út még mindig nem szimpatikus a bringáknak, pedig már tényleg kezd alakulni..

Ezt megoldandó, elugrottam a boltba, vettem monoblokkot, bátyám javaslatára. Meg valami teflonos... politetrafluoretilénes* kenőolaj helyettesítő sprayt a lánchoz. Amint befújkáltam vele, már legalább nem sziszegett tekerés közben.


Ma a monoblokkot be is helyeztük továbbá, úgyis remegett már a lánc tekerés közben, meg az egész hajtómű. Egész pöpec most, már csak egy mosás és festés kell rá a napokban. De még vennem kell fújós narancssárga fényvisszaverő festéket..

Addig is, íme az eddigi csapágy. Majdnem menetet vágott (ilyen rövid idő alatt) a fémbe: