Pokazywanie postów oznaczonych etykietą prawie jak nauka. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą prawie jak nauka. Pokaż wszystkie posty

niedziela, października 15, 2023

Wybory i ordynacje

To mamy dziś w Polsce wybory do Sejmu i Senatu.

Wybory jako wybory są ciekawe, nawet jeśli pominąć na kogo się głosuje to ciekawe jest jak się głosuje i jak się interpretuje wyniki.

W Polsce wg art 96 punkt 2: "Wybory do Sejmu są powszechne, równe, bezpośrednie i proporcjonalne oraz odbywają się w głosowaniu tajnym."

Te do Senatu są de facto większościowe, chociaż Konstytucja nie określa jakie mają być ;-) bo artykuł 97, punkt 2 brzmi: "Wybory do Senatu są powszechne, bezpośrednie i odbywają się w głosowaniu tajnym."

Istotne są wszystkie te przymiotniki, acz my sobie spojrzymy tylko na ten kawałek proporcjonalne ;-) i może jego brak w przypadku Senatu.

Proporcjonalne, znaczy tyle, że od interpretacji wyników wyborów oczekujemy, że będą one proporcjonalne do wyników wyborów ;-)
Idealnie by liczba mandatów w Sejmie procentowo odpowiadała wynikom wyborów.

Tak jednak często nie jest ;-) 

I nie chodzi o spisek, czy nieudolność, a o to, że się po prostu nie da.... albo się da, ale głosowalibyśmy wtedy tylko na listę, teraz głosujemy na listę ze wskazaniem pierwszeństwa w przydziale mandatu...

Właśnie co się dzieje gdy skreślamy kogoś na liście wyborczej? Czy też dokładniej gdy stawiamy krzyżyk przy nazwisku tej osoby, tak by nie wychodził on poza kratkę?

W wyborach do Sejmu wcale nie głosujemy na tego kogoś ;-) Głosujemy na listę, dopiero jeśli się okaże, że ta lista załapie się do podziału mandatów nasz krzyżyk ma moc dodania +1 dla danej osoby.

Znaczy to tyle, że osoba z największą liczbą głosów wcale nie musi dostać mandatu. Zwykle dostanie, ale nie musi dostać ;-)

U nas istotne jest więc to która lista dostanie mandat i to załatwia słynna metoda D’Hondta i próg wyborczy.
Próg wyborczy w Polsce to 5% dla parti i 8% dla koalicji (albo 3% i 5% jakby się okazało, że tylko 1 lista się załapała).

Metoda D’Hondta ma konkurenta w metodzie Sainte–Laguë. Obie metody są prawie identyczne i różnią się tylko w pierwszym kroku tym jakich używa się dzielników. D'Hondt używa kolejnych liczb naturalnych, a Sainte–Laguë liczb nieparzystych.

Mając dzielniki w każdym okręgu bierzemy tylko liczbę głosów oddaną na listy, które przekroczyły w skali kraju progi (z wyjątkiem list, które zgłosiły mniejszości narodowe (oficjalnie uznane za mniejszości), bo wtedy muszą spełnić wymogi progów tylko w danym okręgu)) i dzielimy te liczby głosów przez kolejne dzielniki. N (gdzie N to liczba mandatów na dany okręg, w Polsce od 7 do chyba 21) największych liczb w danym okręgu oznacza mandat dla listy.

Jak już mamy liczbę mandatów dla danej listy to sortujemy kandydatów wg liczby otrzymanych głosów, a jeśli mają taką samą to wg kolejnego numerka na liście (im niższy tym ktoś wyżej), czyli jak więcej niż 1 kandydat dostał powiedzmy dokładnie 20123 głosy to w naszej posortowanej liście ten czy ta, którzy są na liście na karcie wyżej są wyżej w sortowaniu ;-)
I jak już mamy ich posortowanych to wybieramy z góry tyle osób ile mandatów dostała dana lista.
To są ci którzy dostaną mandaty... jak je przyjmą ;-) jeśli nie przyjmą to wypadają z posortowanej listy i ktoś niżej wchodzi do puli.
To ma ten magiczny efekt, że jeśli już po wyborach mandat wygaśnie (bo np. poseł czy posłanka zrezygnują, albo umrą co też się zdarza) to z automatu wpada kolejna osoba jako kwalifikująca się do mandatu. Dlatego partie dbają o to by na listach było wiele osób, coby w razie czego nie stracić mandatu. 
Szczerze nie wiem co by było gdyby kandydaci się skończyli.... czy spadają na inną listę, czy może organizuje się kolejne wybory. 

Dobra to było o naszej ordynacji. Można twierdzić, że jest niepotrzebnie skomplikowana, ale ma jeden ficzer, który jest ważny (przynajmniej wg naszej Konstytucji), jest proporcjonalna, czyli produkuje Sejm który w mniejszym lub większym stopniu odpowiada procentowo temu kogo Polacy wybrali.

Ale przy takim systemie czemu mamy tak, że później jednak Sejm nie ma dokładnie takiego samego podziału procentowego jak wyniki wyborów?

Powodów jest kilka, a to progi, a to fakt, że liczba głosów jest liczona w milionach, a mamy tylko 460 miejsc w Sejmie, a to że D'Hondt "promuje" większe partie (czyli jak się dzieli mandaty to więksi zyskują bardziej, w metodzie  Sainte–Laguë mniejsi by byli promowani, gdzie w obu przypadkach promowanie oznacza tylko, że jak nie da się proporcjonalnie podzielić skończonej liczby mandatów to jedna metoda woli dać ten mandat większym, a druga mniejszym (w końcu jak mamy 7 mandatów to 1 mandat to ~14.28% wszystkich głosów w danym okręgu, a przy 21 to ~4.76%)) ważnym powodem jest też to, że mamy okręgi wyborcze ;-)
A mamy bo chcemy by wyborcy mogli głosować jednak na nazwiska.

Moglibyśmy mieć 1 wielki okręg wyborczy w całym kraju. Wtedy wynik wyborów byłby bardzo dokładnie odzwierciedlony w podziale mandatów, w końcu 1 mandat byłby równy ~0.21% głosów więc dość dokładnie można by było podzielić mandaty i różnice byłyby liczone w pojedynczych sztukach.
Ale wtedy nie moglibyśmy zbytnio głosować na nazwiska.
Każda partia zakładałaby przecież, że może dostać pełna pulę, czyli 460 mandatów więc na każdej liście mielibyśmy 460 nazwisk... a pewnie więcej bo zawsze trzeba liczyć się z wygaśnięciem mandatów, więc pewnie każda lista miałaby 600 nazwisk ;-) 
Mając 6 list mielibyśmy 3600 nazwisk do wyboru, powiedzmy po 60 nazwisk na kartkę ;-) dałoby nam 60 stron ;-) 

Moglibyśmy głosować w takim 1 wielkim okręgu gdybyśmy głosowali na listy tylko bez wskazywania pierwszeństwa... co by znaczyło, że partie mogłyby wprowadzić do Sejmu kogo im się podoba bez żadnej kontroli wyborców. Teraz niby też mogą, ale to trudniejsze.

Chociaż są kraje gdzie jest takie głosowanie, np. w Niemczech każdy wyborca ma 2 głosy do Bundestagu, pierwszy podobny do naszego Sejmowego, gdzie głosuje się na kandydata na liście, a drugi gdzie głosuje się na listę. My też mieliśmy coś podobnego w postaci listy krajowej, to była lista 69 mandatów które były rozdzielane wśród list, które przekroczyły dodatkowe progi. Wtedy partie mogły wrzucić na listę krajową swoich kandydatów i działało to tak, że jak ktoś się dostał z listy krajowej to wypadał z listy okręgowej.
Przez to partie mogły "dbać" o to by do Sejmu dostali się ważni z punktu widzenia partii ludzie, nawet jeśli nie mieliby odpowiednio dużego poparcia w swoim okręgu, jednocześnie mogąc używać lokomotyw wyborczych...
Ale listy krajowej już nie mamy.

Jeśli więc chcemy wyborów proporcjonalnych do mamy nasz system... są też bardziej skomplikowane, ale "sprawiedliwsze".
No bo nasz system ma ten problem, że musimy wskazać 1 listę i 1 kandydata.

To jest taki system wszystko albo nic. Albo Twój kandydat czy chociaż lista się załapie, albo nie.
Więc to powoduje, że ludzie mogą głosować strategicznie wybierając "mniejsze zło".

Stąd powstały systemy wyborcze, które pozwalają głosować w spektrum ;-) od największego dobra do jeszcze akceptowalnego zła ;-)

Głosujący dostaje wtedy prawo "posortowania" list od najbardziej pożądanej do najmniej wśród akceptowanych.
Zwykle dostaje prawo do oddaniu kilku głosów w których zaznacza kolejność swoich preferencji.
System jest na tyle skomplikowany, że jest używany tylko w paru miejscach na świecie.

Są jeszcze inne systemy, np. nieproporcjonalne czyli większościowe.
Np. w UK mają coś co zowie się okręgami jednomandatowymi.
Podobny system jest w wielu miejscach w USA i w Polsce do Senatu.

W okręgu jednomandatowym wygrywa kandydat z największą ilością głosów.
Niby fajnie, bo prosto, ale oznacza to, że jak jest np. 10 kandydatów i powiedzmy 10001 głosów do podziału i wszyscy kandydaci poza jednym dostaną po 1000 głosów, a ten jeden dostanie 10001 głosów, czyli prawie tyle samo to ten kandydat wygrywa mandat.
Czyli mamy grubo ponad 89.99% wyborców w danym okręgu bez reprezentanta.
W takich systemach dochodzi do naturalnego podziału sceny politycznej na 2, czasem 3 partie.
W UK prowadzi też do nadreprezentacji członków SNP w Parlamencie, bo siłą rzeczy wygrywają w Szkocji i chociaż w skali kraju mają dość niewiele głosów to akurat w Szkocji to ich niewiele jest na tyle duże, że jest zwykle większe od każdej innej parti.

Są systemy zabawniejsze ;-)

Jeden, który mnie przekonał do tego wpisu to system który był w mojej szkole podstawowej w trakcie wyborów do samorządu klasowego ;-)

Wszyscy głosowali, z tych na których oddano głosy brano 3 osoby z największą liczbą głosów.
Ta z największą liczbą głosów zostawała przewodniczącym lub przewodniczącą, ta z drugą zastępcą, a ta trzecia skarbnikiem ;-)

Ciekawy był też system głosowania w PRLu, niby podobny do tego, który teraz mamy, z tym, że dziwnym trafem zawsze była 1 lista i wrzucenie pustego głosu było ważnym głosem, który akceptował to co było na karcie do głosowania. Głosowanie było też obowiązkowe, a komisjom zależało na tym by mieć jak najmniej kart ze skreśleniami bo to źle wyglądało w statystykach.



Podobne postybeta
Ważne kto i jak liczy głosy....
Jak można przegrać wybory gdy się je wygrywa?
1 na 9 głosów
I po wyborach :-)
Demokracja 3.3 ;-)

niedziela, listopada 26, 2017

Średnia vs. mediana

Często gdy gdzieś podawane są dane o zarobkach pojawia się informacja o medianie i o tym, że mediana lepiej opisuje rzeczywistość od średniej...

Nie, wcale nie. Albo bardziej precyzyjnie, nie do końca i zależnie od tego co oznacza "opisywanie" rzeczywistości ;-)

Mediana to liczba, czy w przypadku zarobków kwota powyżej której znajdują się zarobki 50% badanych i poniżej niej znajdują się zarobki drugich 50% badanych.
W rzeczywistości mogą być 2 mediany, jeśli jest parzysta liczba próbek, ale to szczegół.

Średnia to suma wszystkich próbek, podzielona przez liczbę próbek.

Mediana dobrze opisuje rozkład z punktu widzenia pojedynczej próbki, średnia z punktu widzenia całej populacji.

Jeśli wiemy, że średnia pensja to powiedzmy 4600 PLN, to możemy w miarę łatwo znając rozmiar populacji policzyć ile pieniędzy mają wszyscy członkowie tej populacji.
Bo średnia to wartość dla której sumaryczny błąd (czyli zsumowana różnica między wartością dla pojedynczej próbki, a średnią, dla wszystkich próbek) będzie równa 0.
Do tego jeśli wyciągniemy 100 losowych ludzi to średnia z ich pensji będzie bliska średniej całej populacji (to jest akurat twierdzenie graniczne statystyki ;-)).
Średnia opisuje więc najlepiej rozkład "globalnie". Gdy interesuje nas 1 liczba, która najlepiej opisze całą populację to średnia jest tym co nas interesuje.
Z punktu widzenia badania "siły gospodarki" średnia się świetnie sprawdza.

Mediana działa bardziej lokalnie.
Wiedza, że mediana zarobków to 3510 PLN nie mówi nam wiele o całej populacji.
Mówi nam za to duże o najbardziej typowym przedstawicielu populacji.

Jeśli moglibyśmy udać się tylko na 1 polowanie na jednego przedstawiciela populacji to najpewniej złowilibyśmy takiego, którego pensja byłaby dość bliska mediany.

Mediana i średnia mogą znaczyć to samo, jak rozkład jest normalny.
Ale pensje nie podlegają rozkładowi normalnemu.

Jak już podlegają jakiemuś rozkładowi to bardziej rozkładowi potęgowemu (też nie do końca, ale wykres jest bardziej podobny, bo niemal blisko początku rozkładu mamy szczyt, a później bardzo długi ogon w kierunku wyższych liczb z gwałtownie malejącym prawdopodobieństwem)

Dlatego jeśli podajemy informacje o wynagrodzeniach gdy chodzi o opisanie całej populacji to średnia jest najlepszym sposobem na opisanie, bo mówi o całej populacji.
Gdy chcemy podać informacje o wynagrodzeniach tak by przeciętny człowiek mógł ją porównać ze swoimi zarobkami to powinniśmy używać mediany bo ona lepiej oddaje zarobki takiego pojedynczego ludzia.

Podobne postybeta
Android Marketowi odbiło
Pensje programistów
Język a postrzeganie rzeczywistości
Przewidujemy wyniki wyborów ;-) - wyniki
My = Bogacze.

niedziela, października 01, 2017

"Skoro ludzie wyewoluowali z małp to czemu małpy nadal istnieją?"

Kilka dni temu usłyszałem od koleżanki w pracy, że "ta cała ewolucja jej nie przekonuje, bo skoro niby jest ewolucja i ludzie wyewoluowali z małp to czemu nada istnieją małpy?".

Mój wbudowany ewolucjonista się oburzył na to pytanie, ale nie do końca wiedział jak to wyjaśnić bo odpowiedź jest prosta na pewnym poziomie i bardzo skomplikowana na innym.
Przez kilka dni się zastanawiałem i chyba wiem jak to opowiedzieć i jak odpowiedzieć na to pytanie.
I to będzie taka próba.

Zacznijmy od przewrotnego pogłębienia tego pytania, skoro zakładamy, że ludzie "pochodzą od małpy"* to pójdźmy dalej. Gdzieś w pomrokach dziejów przodkiem większości życia na ziemi były jakieś organizmy jednokomórkowe.
Skoro więc istnieją organizmy wielokomórkowe, które wyewoluowały z jednokomórkowych to czemu jednokomórkowe jeszcze istnieją?

Żeby móc odpowiedzieć na to pytanie zadajmy inne. Co robią żywe organizmy?
Co jest taką rzeczą, która łączy je wszystkie?

Bez wyliczania całej litanii możemy stwierdzić, że najbardziej uniwersalne jest przerabianie substancji w okolicy w której organizm przebywa na jego własne kopie.

Tu się chyba wszyscy zgadzamy.

Jeśli zaś to jest główną funkcją całego życia, to zadajmy pytanie, czy człowiek, jako "korona stworzenia" jest bardziej skuteczny w tym od np. pantofelka?

Współczynnik dzietności na Ziemi teraz waha się między 0.82 w Singapurze, a 6.62 w Nigerii.

Przy założeniu, że jedna kobieta ma dzieci zawsze z jednym i tym samym mężczyzną**, do tego pojedyncze dziecko ma tylko połowę genów rodzica, stąd wychodzi nam to, że w Singapurze człowiek stworzy 0.41 kopii swoich genów, a w Nigerii między 0.875 a 0.937 kopii (które to kopie będą rozłożone między 3.31 dzieci).

Czyli szczerze nie jest znów taka duża skuteczność kopiowania.
Szympansy mają podobną, jednokomórkowe mogą mieć dużo wyższą skuteczność.
Myszy są lepsze.

Ogólnie im organizmy "głupsze" tym skuteczniejsze w tworzeniu swoich kopii.

Żeby pantofelek zrobił swoją kopię muszą zajść tylko odpowiednie warunki, które są jakąś prostą funkcją dostępności pokarmu i stanu środowiska.

Żeby ludzie zrobili swoją kopię jest to o wiele bardziej skomplikowane.
Muszą się poznać, w miarę polubić, zbliżyć do siebie, stworzyć parę, zwykle wiele razy uprawiać seks, później przez wiele miesięcy trwa ciąża i dopiero wtedy mają kopię.

Żaden interes w byciu człowiekiem z punktu widzenia tworzenia kopii.

To czemu wszyscy nie jesteśmy bardziej jak pantofelek?

Tu znów mamy 2 czynniki.

Pierwszy to samo kopiowanie.

Kopiowanie odbywa się z błędami.

Mało ich jest, ale są.

Czasem któraś z liter kodu genetycznego się źle skopiuje, czasem któryś kawałek zostanie "zgubiony", czasem któryś kawałek zostanie powtórzony raz czy wiele razy, czasem 2 kawałki zamienią się miejscami i tak dalej.
W końcu całe to kopiowanie to nic innego jak przyłączanie się odpowiednich cegiełek chemicznych do "matrycy" a to przyłączanie opiera się o siłę elektrostatyczną i zwykle się udaje, ale czasem jakieś drgania czy coś podobnego mogą to utrudnić.

Do tego czasem jakieś czynniki zewnętrzne się pojawiają. A to promieniowanie kosmiczne uderzy w nośnik genów i rozerwie połączenie, które się źle naprawi, albo wyrzuci którąś z liter i na jej miejsce włączy się inna, nie taka jak wcześniej. Albo zrobi to jakaś substancja chemiczna.

Ogólnie gdy jest kopiowanie to zdarzają się błędy.

A to co jest kopiowane opisuje cały organizm i to jak go zbudować.
Opisuje całą maszynerię wewnątrz komórki, to jak budować białka, to czym je budować, całe układy genów opisują sekwencje włączania i wyłączanie różnych innych genów, opisują reakcje na czynniki zewnętrzne i wewnętrzne i tak dalej.
Każdy błąd trochę ten zapis zmienia.

Raz bardziej, raz mniej.
To bardziej i mniej zależą głównie od tego co zmieniły.
Jeśli kawałek który opisuje białko, które jest niezbędne i nie da się go zbudować po tej zmianie to jest źle, ale czasem taka zmiana jest nieistotna dla funkcji, białko nadal ma mniej więcej taki kształt jak powinno, a może nawet ciut lepszy, albo po prostu taka zmiana jest neutralna.
Albo zmianie ulega kawałek opisujący warunki włączenia innego genu.

W końcu jednak te zmiany jakoś przekładają się na cały organizm.

No i ten nowy organizm z nowymi genami robi swoje kopie.

Może być trochę lepszy w robieniu kopii od swojego "rodzica", może być gorszy, może być tak samo skuteczny.

Wszystkie one jednak przebywają w środowisku, które się zmienia. Zmienia się z przyczyn geologicznych, ale i dlatego, że same organizmy je zmieniają.

Niektóre z nich trafiają w miejsca gdzie jest więcej jakiejś substancji, a mniej innej. Niektóre są lepsze w robieniu swoich kopii w nowych warunkach, inne radzą sobie gorzej.

To prowadzi do tego, że powstaje coraz więcej rodzajów kopii.

I tu pojawia się drugi czynnik.
Zrobienie kopii to jedno, to czy ta kopia będzie skuteczna w robieniu swoich kopii to coś innego.

Może się więc okazać, że jedna z kopii jest wolniejsza w budowaniu swoich kopii bo budując je wkłada więcej energii w budowanie ich otoczki.
Miej energii przeznaczonej na budowanie kopii oznacza mniej kopii, ale mocniejsza otoczka oznacza większe szanse na to, że kopia zbuduje swoje kopie bo środowisko jej krzywdy nie zrobi.

Okazuje się, że "skuteczność" nie jest prostą funkcją ilości kopii. Jest raczej funkcją ilości kopii, które robią kopie, które robią kopie, które robią kopie, które robią kopie i tak dalej.

Ta skuteczność nie jest też wcale przywiązana do tego co robi kopie, a bardziej do tego co jest kopiowane.

Z jednej strony fizyka, z drugiej przypadek sprawiają, że dany fragment który jest kopiowany będzie za jakiś czas występował w większej lub mniejszej ilości kopii.

Jak to jest kawałek który pomaga w kopiowaniu to ma duże szanse występować częściej, to samo gdy pomaga w przetrwaniu kopii.

Prawdopodobieństwo przetrwania danego kawałka jest funkcją jego "skuteczności" i "szczęścia".

Skuteczność to wielowymiarowa funkcja tego jak szybko się kopiuje, jakie szanse ma kopia na stworzenie kopii, jak wykorzystuje środowisko i tak dalej.

Szczęście to po prostu przypadek. Nawet najbardziej wypasiony "kawałek" który znajdzie się w kopi, która ulegnie zniszczeniu bo uderzy w nią meteor nie przetrwa (albo nawet nie musi trafić w kapię meteor, po prostu ten "kawałek" może opisywać przerabianie na kolejne kopie substancji, która właśnie znikła).

Tę funkcję opisującą skuteczność nazywamy doborem naturalnym, tą związaną ze szczęściem dryfem genetycznym.

Dobór genetyczny jest ślepy, głuchy i głupi.
To tak naprawdę takie połączenie zasady zachowania energii i zasady minimum energii potencjalnej na sterydach.

Nie patrzy on na to czy to co otacza kopie tworzy dzieła sztuki, naukę czy myśli.
To są "sztuczki", których pewne otoczki dla kopii stosują by zwiększyć skuteczność kopiowania.
Ale inne otoczki radzą sobie w tym kopiowaniu bez stosowania takich sztuczek.

Końcowo liczy się tylko ta skuteczność kopiowania.

A do niedawna (powiedzmy z 30-50 tysięcy lat temu) małpy były tak samo skuteczne jak my.
Przez to istnieją małpy.

Wcale nie "mimo tego, że istnieje człowiek".
Istnieją bo ich sposób życia jest mniej więcej tak samo skuteczny w przekazywaniu genów jak sposób człowieka.

Wszystkie obecnie żyjące organizmy należą do grup/gatunków które mają mniej więcej taką samą skuteczność.
"Prymitywność" czy "zaawansowanie" niektórych z nich wynika tylko z naszej oceny. Z punktu widzenia skuteczności kopiowania nie jest istotna.

Pytanie tylko czy będę umiał to opowiedzieć w czasie herbaty w kuchni? ;-)

Nie ma bibliografii bo pisałem z głowy (i jednego skryptu w Pythonie, który napisałem by policzyć skuteczność kopiowania genów dla ludzi ;-)), ale to co mam w głowie wynika z takich lektur jak:
"Samolubny Gen" - Richard Dawkins
"Najwspanialsze Widowisko Świata - Świadectwa Ewolucji" - Richard Dawkinsa
"Ewolucja jest faktem" - Jerry A. Coyne
"The Epigenetics Revolution" - Nessa Carey

* - tak naprawdę ludzie i takie szympansy czy bonobo mieli wspólnego przodka.
** - tylko dla łatwości liczenia tak zakładamy.


Podobne postybeta
Teoria ewolucji vs hipoteza kosmicznych siewców życia vs hipoteza kreatora vs hipoteza kreatora na młodej Ziemi - mecz przy pomocy Bayesa :-)
Dobór naturalny, albo my
Seks w ujęciu informatycznym ;-) - rozmnażanie ;-)
Kopernik i zasada kopernikańska, później Darwin i Teoria Ewolucji... co będzie kolejne? Silne AI czy synetyczne życie?
Zarodek to nie dziecko

poniedziałek, września 19, 2016

Czemu małe pieski noszą ubranka, a duże psy nie?

Pieseła można zamodelować jako cylinder.

Cylinder ten ma promień r i długość l.

Objętość takiego piesocylindra to:

V=π*r2*l

Powierzchnia zaś:

S=2*π*r2+2*π*r*l

gdzie r - to promień psocylindra, a l - długość.

Powierzchnia to to przez co ucieka z psa ciepło.
Jak wiemy już z innych postów na blogu strumień ciepła to zgodnie z prawem Stefana-Boltzmanna:


Gdzie jednostką są W/m2.

Mnożąc powierzchnię psa przez strumień mocy, który z niego wypływa przez promieniowanie cieplne dowiemy się ile energii jest wypromieniowywane w ciągu 1 sekundy.

Dla prostoty modelu przyjmiemy, że pies ma ciepło właściwe (można zgadywać, że podobne do wody, ważne, że dla wszystkich psów jest podobne).


Co znaczy, że spadek temperatury psa zależy od ilości ciepła, które z niego wyleci i masy psa.

Ciepło które wyleci z psa to nic innego jak powierzchnia * strumień, a masa to objętość * gęstość.

Czyli pies traci temperaturę wg wzoru:

ΔT=S*σ*T4/(V*ρ*cpsa)

gdzie S - to powierzchnia, V - objętość, ρ - gęstość psa, cpsa - ciepło właściwe psa.

Co pozwala stwierdzić, że spadek temperatury ciała psa zależy od stosunku powierzchni jego ciała do objętości.

ΔT∝S/V

Dla małych piesków ich powierzchnia jest dużo większa w stosunku do ich objętości.

Tak pi razy oko ;-) na każde 2 krotne zwiększenie rozmiarów psa stosunek powierzchni do objętości spada też 2 krotnie, czyli 2 razy większy pies traci 2 razy mniej ciepła.

Przez to małe pieski potrzebują ubranek gdy jest zimno, bo po prostu marzną o wiele szybciej od dużych psów i człowieków.

Można też zgadywać, że na Grenlandii i na Antarktydzie powinny żyć głównie większe zwierzęta, chociaż nie największe, bo im zwierze większe tym więcej musi jeść. 

Idę spać ;-)



Podobne postybeta
Upał promuje mniejszych?
Czy psy lubią gdy zwraca się na nie uwagę?
Odsłaniać okna na noc w gorące noce, czy nie odsłaniać? Oto jest pytanie....
A mnie tam jednak prosty model klimatyczny przekonuje do twierdzenia, że mamy wpływ na zmiany klimatyczne i że globalne ocieplenie może być faktem
Święty Garnek Chłodniczy

sobota, stycznia 10, 2015

Czy jest dziś sobota? ;-)

Sobie narzędzie napisałem do wnioskowania Bayesowskiego ;-) [mam hobby ostatnio jak widać ;-)]

Przetestujmy więc nim hipotezę, że dziś jest sobota ;-)

Na początku podajemy ile hipotez będziemy rozważać:

Później podajemy te hipotezy:

Następnie zaczynamy podawać dowody i ich prawdopodobieństwo w razie prawdziwości hipotezy:


Rezultaty odczytujemy u dołu ekranu ;-)

Jak ktoś się chce pobawić moim genialnym narzędziem to znajdzie je tutaj, a jego źródła można sobie obejrzeć na moim GitHubie.

Jak widać na podstawie tych dwóch dowodów, czyli tego, że nie byłem dziś w pracy i że długo spałem można wnosić, że na ~82% jest dziś sobota ;-)

Podobne postybeta
Bayesian Inference Tool jako Chrome App ;-)
clickBaitDetector - wiem czemu nie działa ;-)
Sobota
Clickbait detector ;-) - czyli próbujemy użyć naiwnego klasyfikatora Bayesowskiego do rozpoznawania clickbaitów ;-)
Ku pamięci - iteracyjna wersja twierdzenia Bayesa ;-)

wtorek, stycznia 06, 2015

Teoria ewolucji vs hipoteza kosmicznych siewców życia vs hipoteza kreatora vs hipoteza kreatora na młodej Ziemi - mecz przy pomocy Bayesa :-)

Ostatnio pod filmikiem WC odbyła się dyskusja o ewolucji.
Podejrzanie wiele osób uważa ewolucję za nieprawdziwą, chociaż jedynie kreacjoniści podają jakąś alternatywną "teorię".

Mam swoje poglądy (znaczy jestem ewolucjonistą :-)), ale spróbujmy spojrzeć na pewne obserwacje dotyczące istniejącego świata i spróbujmy użyć twierdzenia Bayesa (a jakże ;-)) do sprawdzenia kilku teorii.

Teorie te to:
- ewolucja (życie pochodzi od jednego praprzodka)
- kosmici jako "siewcy życia"
- kreator (który stworzył życie u początków życia na Ziemi)
- kreator "młodej Ziemi" (kreator jakieś 6 tysięcy lat temu stworzył Ziemię i wszystkie życie tutaj)

Rozpatrzymy 4 różnych obserwacji:
- wspólny kod genetyczny u różnych organizmów
- podobieństwo genetyczne
- materiał kopalny w którym znajdowane skamieliny są bardziej skomplikowane im młodsze osady
- istnienie "nieredukowalnych" organów, czyli takich które gdyby z nich wyjąć choć 1 część, czy choć 1 gen je kodujący to by po prostu przestały działać (nie działałyby gorzej, po prostu przestałyby działać)

Jak mówiłem użyjemy twierdzenia Bayesa i będziemy dla każdej z hipotez starali się ocenić jak prawdopodobna jest dana obserwacja jeśli dana hipoteza jest prawdziwa.

Na początek przyjmijmy, że każda z tych hipotez jest równie prawdopodobna i że na samym początku każda z nich ma 25% bycia prawdziwą.

Zacznijmy więc :-)

Jak prawdopodobne jest to, że wszystkie organizmy na Ziemi mają wspólny kod DNA (zbudowany z tych samych zasad i który można skopiować z jednego organizmu do drugiego) jeśli prawdziwa jest teoria ewolucji?
Wg. teorii ewolucji całe obecne na Ziemi życie pochodzi od jednego praprzodka, przy takim założeniu możemy przypuszczać, że potomkowie tego praprzodka powinni mieć bardzo podobny, jeśli nie identyczny mechanizm kodowania.
Możemy więc przyjąć, że prawdopodobieństwo zaobserwowania wspólnego dla wszystkich organizmów kodu genetycznego pod warunkiem, że teoria ewolucji jest prawdziwa wynosi 1.

W przypadku hipotezy z "siewcami życia" z kosmosu, wspólny genotyp jest możliwy, ale nie jest konieczny. Takie życie byłoby produktem "inżynieryjnym", może mieć więc części wspólne, ale nie musi, chociaż możemy przyjąć, że kosmitom byłoby tak łatwiej, gdy teraz ludzie próbują budować życie to też starają się stosować jeden wspólny "kod genetyczny", stąd zakładamy, że prawdopodobieństwo zaobserwowania identycznego kodu genetycznego u wszystkich organizmów pod warunkiem, że są one produktem "siewców życia" wynosi 0.9.

W przypadku hipotezy kreatora, który stworzył wszystkie organizmy mógł użyć wspólnego kodu genetycznego, ale nie musiał. Nic go do tego nie zmuszało, ale też nic tego nie zabraniało.
Możemy szacować, że wspólny kod genetyczny moglibyśmy zaobserwować u wszystkich organizmów żywych pod warunkiem, że zostały stworzone przez nadnaturalnego kreatora z prawdopodobieństwem 0.5. To 0.5 oznacza, że kreator mógł skorzystać ze wspólnego kodu genetycznego, ale nie musiał.

Jeśli te liczby powyżej wrzucimy do twierdzenia Bayesa, a początkowe prawdopodobieństwa 0.25 wrzucimy jako prawdopodobieństwa prior, to po wzięciu pod uwagę naszych szacunków co do prawdopodobieństwa danego dowodu przy założeniu prawdziwości danej tezy mamy szacowane prawdopodobieństwo dla poszczególnych hipotez:
- teoria ewolucji ~0.345,
- hipoteza z kosmitami jako "siewcami życia" ~0.31,
- hipoteza z nadnaturalnym kreatorem, który stworzył wszystkie organizmy żywe na Ziemi ~0.173,
- hipoteza nadnaturalnego kreatora przy założeniu "młodej Ziemi" ~0.173.

To spójrzmy na kolejne obserwacje.
Tym razem na podobieństwo genetyczne.

Jak prawdopodobne jest by istniało podobieństwo genetyczne między różnymi organizmami na Ziemi, jeśli prawdziwa jest teoria ewolucji?
Wg. teorii ewolucji nowe gatunki "wyrastały" ze starych gatunków, czyli podobieństwo między gatunkami powinno występować, ba nawet się go oczekuje.
Czyli prawdopodobieństwo występowania podobieństwa genetycznego między organizmami różnych gatunków pod warunkiem, że teoria ewolucji jest prawdziwa wynosi 1.

Dla kosmitów jest tak, że może istnieć podobieństwo genetyczne między różnymi organizmami, możemy założyć, że tacy "inżynierowie" używaliby jakichś frameworków na których budowaliby organizmy, czyli mogliby użyć tego samego wzorca przy małpach i ludziach i wprowadzaliby tylko pewne zmiany dotyczące istotnych funkcji specyficznych dla danego gatunku. Nie byliby jednak do tego zmuszeni aż tak bardzo, czasem mogliby pójść na skróty.
Możemy szacować, że prawdopodobieństwo obserwacji podobieństwa genetycznego między różnymi gatunkami przy założeniu prawdziwości hipotezy o kosmicznych "siewcach życia" wynosi jakieś 0.75.

W przypadku nadnaturalnego kreatora podobieństwo może, ale nie musi występować. Nie znamy mechanizmów kreacji, bo z jednej strony kreator mógłby jak inżynier budować wszystko z klocków, ale mógłby też nadnaturalnie wszystko od razu zbudować.
Możemy szacować więc, że prawdopodobieństwo podobieństwa genetycznego między gatunkami przy złożeniu, że hipoteza z kreatorem jest prawdziwa wynosi 0.5.

Po wrzuceniu wszystkiego do wzorów i potraktowaniu poprzednich wyników jako priorów dla tej serii mamy prawdopodobieństwa poszczególnych hipotez:
- teoria ewolucji ~0.459,
- hipoteza kosmicznych "siewców życia" ~0.31,
- hipoteza kreatora ~0.115,
- hipoteza kreatora na młodej Ziemi ~0.115.

Przejdźmy do kolejnej obserwacji, czyli tego, że w materiale kopalnym widzimy iż bardziej skomplikowane formy są widoczne w młodszych osadach.

Wg. teorii ewolucji organizmy w ramach doboru naturalnego nabywały nowych cech (albo je traciły jak nie były przydatne), bardziej skomplikowane organizmy mogły powstać wg. teorii ewolucji tylko z mniej skomplikowanych, stąd prawdopodobieństwo tego, że zobaczymy taki obraz w materiale kopalnym pod warunkiem, że teoria ewolucji jest prawdziwa wynosi 1.

W przypadku kosmitów siewców życia jest inaczej. Tutaj organizmy zostały skonstruowane przez inżynierów, powinno być więc widać albo małą komplikację, później skok i już ciągle taką samą komplikację. Stąd możemy szacować, że prawdopodobieństwo obserwacji stopniowej komplikacji w materiale kopalnym przy założeniu prawdziwości hipotezy o kosmicznych siewcach życia wynosi 0.1.

W przypadku kreatora gdy stworzył on wszystkie gatunki wtedy gdy żyły jest taka obserwacja możliwa, ale jest mało prawdopodobna, w końcu nic go do tego nie zmuszało, a jeśli stworzył tak skomplikowane jak i proste organizmy to w podobnych ilościach powinny być widoczne w starym i nowym materiale kopalnym. Szacujemy więc, że dla kreatora, który stworzył wszystkie organizmy (ale nie na młodej Ziemi) prawdopodobieństwo obserwacji stopniowej komplikacji organizmów w materiale kopalnym pod warunkiem, że hipoteza kreatora jest prawdziwa wynosi 0.1.
W przypadku kreatora na młodej Ziemi większość skamielin musiałaby zostać tam włożona przez kreatora od razu w postaci skamielin. Jest to możliwe, ale dużo mniej.
Stąd szacujemy, że prawdopodobieństwo zaobserwowania stopniowej komplikacji organizmów w materiale kopalnym przy kreatorze na młodej Ziemi wynosi 0.01.

Po wrzuceniu tego do wzorów i wzięciu poprzednich prawdopodobieństw jako priorów mamy prawdopodobieństwo dla poszczególnych hipotez:
- teoria ewolucji ~0.91,
- hipoteza kosmicznych siewców życia ~0.06,
- hipoteza nadnaturalnego kreatora ~0.023,
- hipoteza nadnaturalnego kreatora na młodej Ziemi ~0.0023.

Przejdźmy teraz do tego, że znaleziono organy (u bakterii), które wydają się być tak zoptymalizowane, że gdyby zniknął choć jeden ich element, choć jeden gen, który je koduje to cały organ do niczego by się nie nadawał.

W przypadku teorii ewolucji naturalnym kierunkiem jest rośnięcie złożoności, jednak złożoność jest kosztowna i dobór naturalny może promować "tańsze" sposoby na osiągnięcie tego samego.
Tutaj może być tak, że kiedyś, u przodków bakterii które maja takie "nieredukowalne" organelle istniały ich bardziej skomplikowane wersje, które powstały na drodze doboru naturalnego przez powstanie pierw paranarządu, który jeśli był przydatny to przechodził do kolejnych pokoleń, w których czasem mutacje sprawiały, że stawał się lepszy, a czasem gorszy, te lepsze dawały większą szansę na przetrwanie stąd kolejne pokolenia je miały. W pewnym jednak momencie pojawiła się mutacja, która upraszczała budowę narządu, nie upośledzając jego funkcji, a zmniejszając ilość energii potrzebnej do jego budowy. Tu dobór naturalny też to promował, choć wystąpienie takiej mutacji jest trudniejsze.
Stąd szacujemy, że prawdopodobieństwo zaobserwowania kilku takich organów przy założeniu, że teoria ewolucji jest prawdziwa wynosi 0.5. Są one możliwe przy prawdziwości teorii ewolucji, ale teoria ewolucji uznała by je raczej za rzadkie.

W przypadku hipotezy kosmicznych siewców życia możemy przyjąć, że to byli inżynierowie, więc byli spokojnie w stanie zaprojektować takie rzeczy.
Stąd szacujemy, że prawdopodobieństwo istnienia takich organów przy założeniu hipotezy kosmicznych siewców życia wynosi jakieś 0.9.

W przypadku kreatora trudno to ocenić, powinniśmy przyjąć więc 0.5, ale przyjmijmy 1, bo kreator mógł tak zrobić.

Stąd mamy prawdopodobieństwa hipotez:
- teoria ewolucji ~0.85,
- hipoteza kosmicznych siewców życia ~0.10
- hipoteza kreatora ~0.042,
- hipoteza kreatora na młodej Ziemi ~0.0042.

Jakie z tego wnioski?

Na podstawie tylko 4 obserwacji możemy szacować, że teoria ewolucji jest najbardziej prawdopodobna z tych 4 hipotez, kolejna jest teoria kosmicznych siewców, która teraz jest jednak ponad 8 razy mniej prawdopodobna od teorii ewolucji, hipoteza kreatora jest ponad 20 razy mniej prawdopodobna od teorii ewolucji, a hipoteza kreatora na młodej Ziemi jest ponad 200 razy mniej prawdopodobna.
Co ważne w przypadku prawdopodobieństwa dla 4 obserwacji przyjąłem bardzo niekorzystną dla teorii ewolucji wartość prawdopodobieństwa takiej obserwacji przy prawdziwości teorii ewolucji i najbardziej korzystną dla kreatora.
Zrobiłem tak by uniknąć oskarżeń o faworyzowanie teorii ewolucji.

Jeśli uważacie, że moje szacunki prawdopodobieństwa różnych obserwacji pod warunkiem prawdziwości danej hipotezy są nieprawidłowe to zapraszam do zabawy w swoje ustalenia :-)
W tym arkuszu (trzeba zrobić kopię) są moje wyniki.
Bawiąc się trzeba zmieniać wartości w likelihood i wartości te to prawdopodobieństwo dokonania danej obserwacji przy prawdziwości danej hipotezy. Ponieważ to prawdopodobieństwa to muszą być między 0 a 1.
Nic nie stoi na przeszkodzie dodania sobie własnych obserwacji, w tym celu najlepiej skopiować ostatnią linijkę, zmienić jej opis i powpisywać likelihood dla tej nowej obserwacji dla każdej hipotezy.


Podobne postybeta
Kopernik i zasada kopernikańska, później Darwin i Teoria Ewolucji... co będzie kolejne? Silne AI czy synetyczne życie?
Ku pamięci - iteracyjna wersja twierdzenia Bayesa ;-)
"Skoro ludzie wyewoluowali z małp to czemu małpy nadal istnieją?"
Dobór naturalny, albo my
Nieuki

piątek, stycznia 02, 2015

Randki w ujęciu Bayesowskim ;-)

Po co się randkuje?

Odpowiedzi może być wiele i różnych. Można powiedzieć, że się randkuje bo to fajne, można powiedzieć, że to przez to, że inni to robią, można też robić to po to by znaleźć tą jedyną/tego jedynego.

Jeśli przyjmiemy, że chodzi o to ostatnie to możemy zadać sobie pytanie "ale o co chodzi?", lub je rozwijając "czemu niby randki mają w tym pomóc?".

Tu pomocne okaże się twierdzenie Bayesa i prawdopodobieństwo a posteriori.

Bez zanurzania się w teorię możemy powiedzieć, że prawdopodobieństwo czegoś "pod wpływem dowodów" jest opisane przez zależność:

prawdopodobieństwo czegoś "pod wpływem dowodów" ∝ nasza wiara co do prawdziwości czegoś na podstawie obecnej wiedzy * prawdopodobieństwo wystąpienia dowodu jeśli coś jest prawdziwe

Do tego dochodzi jeszcze to, że proporcjonalność fajnie by było przerobić w końcu na równość, wtedy się wynik mnożenia dzieli przez ogóle prawdopodobieństwo czegoś, ten moment nazywamy normalizacją.

Jeśli przyjmiemy, że tym czymś jest "to jest ta jedyna" (lub jak kto woli "ten jedyny") to możemy się zacząć zastanawiać do czego służą randki ;-)

Np. pierwsze pytanie może być takie, skoro ktoś poszedł z nami na randkę to jaka jest szansa, że to jest "ta jedyna"?

Mamy 2 możliwe hipotezy:
A - to jest ta jedyna
B - to nie jest ta jedyna

Najpierw nasza wiara co do tego, że to jest ta jedyna, albo nie jest ta jedyna.
Coś o świecie wiemy i możemy powiedzieć, że "ta jedyna" jest raczej rzadkim zjawiskiem. Powiedzmy, prawdopodobieństwo tego, że to jest ta jedyna "na wiarę" wynosi 1%.
Mamy więc:
P(to jest ta jedyna) = 0.01
P(to nie jest ta jedyna) = 0.99

Na początek nie wygląda to zbyt dobrze.

Teraz pytanie, jakie jest prawdopodobieństwo tego, że ktoś z nami poszedł na randkę gdy jest "tą jedyną", a jakie gdy nie jest?
Możemy przyjąć, że jeśli to jest ta jedyna to raczej na pewno z nami pójdzie na randkę, czyli niech to będzie 1.
Nie jesteśmy też tak znów straszni, można więc powiedzieć, że możemy być w typie powiedzmy 20% kobiet w odpowiednim wieku, czyli prawdopodobieństwo, że ktoś z nami pójdzie na randkę nawet jak nie jest "tą jedyną" wynosi te 0.2.

Stąd:

P(to jest ta jedyna)*P(poszła z nami na randkę|to jest ta jedyna) = 0.01 * 1 = 0.01
P(to nie jest ta jedyna)*P(poszła z nami na randkę|to nie jest ta jedyna) = 0.99 * 0.2 = 0.198

Teraz użyjemy sztuczki ;-) i znormalizujemy nasze wyniki, czyli zsumujemy wyniki tych mnożeń i podzielimy je przez sumę, wtedy mamy:

P(to jest ta jedyna|poszła z nami na randkę) = 0.048
P(to nie jest ta jedyna|poszła z nami na randkę) = 0.95

Niby wiele z tego nie wiemy, ale jakbyśmy tak "na wyrost" stwierdzili, że nadal "ta jedyna" zawsze z nami na randkę pójdzie (już drugą), a nie ta jedyna pójdzie z nami z prawdopodobieństwem 0.2 to możemy trochę więcej policzyć.
Po pierwsze nasze prawdopodobieństwo a priori się zmieniło, teraz nasza randka jest tą jedyną już z prawdopodobieństwem 0.048, a nie jest już tylko z prawdopodobieństwem 0.95.
Dlatego teraz mamy takie wyniki:

P(to jest ta jedyna)*P(poszła z nami na randkę|to jest ta jedyna) = 0.048 * 1 = 0.048
P(to nie jest ta jedyna)*P(poszła z nami na randkę|to nie jest ta jedyna) = 0.95 * 0.2 = 0.190

Po znormalizowaniu:
P(to jest ta jedyna|poszła z nami na randkę) = 0.2
P(to nie jest ta jedyna|poszła z nami na randkę) = 0.8

No jest lepiej  ;-)

Jeśli przy trzeciej randce przyjmiemy, że nadal "ta jedyna" umówi się z nami na 3 randkę z prawdopodobieństwem 1, a nie "ta jedyna" z prawdopodobieństwem 0.2 to mamy na początku:

P(to jest ta jedyna) = 0.2
P(to nie jest ta jedyna) = 0.8

Stąd:

P(to jest ta jedyna)*P(poszła z nami na randkę|to jest ta jedyna) = 0.2 * 1 = 0.2
P(to nie jest ta jedyna)*P(poszła z nami na randkę|to nie jest ta jedyna) = 0.8 * 0.2 = 0.16

Po znormalizowaniu:

P(to jest ta jedyna|poszła z nami na randkę) = 0.56
P(to nie jest ta jedyna|poszła z nami na randkę) = 0.44

No proszę! :-)

Już po 3 randce mamy już większe szanse, że to ta jedyna niż taką, że to nie ona.

Oczywiście to przy założeniu, że nasze liczby mają jakiś sens. Jeśli "nie te jedyne" umówią się z nami na kolejną randkę nie z prawdopodobieństwem 0.2, ale 0.3 to trzeba 4 randek.
Jeśli to prawdopodobieństwo wynosi 0.5 to trzeba 7 randek.

Ale OK, teraz jakieś wnioski z tego.

Widzimy, że pewność co do tego, że to "ta jedyna" rośnie wraz z liczbą randek...
Widzimy też, że liczba randek nie jest jedyną ważną wielkością, ważna jest też liczba opisująca jak wiele kobiet, które "nie są tą jedyną" pójdzie z nami na randkę...
Widzimy też, że w moich obliczeniach założyłem, że "ta jedyna" zawsze pójdzie z nami na randkę... co nie musi być prawdą.

No to wyciągajmy z tego powyżej wnioski.
Wiemy, że liczba randek jest ważna. Im ich więcej tym prawdopodobieństwo tego, że to jest "ta jedyna" rośnie.
Ale to mało, możemy też stwierdzić, że proces szukania tej jedynej możemy skrócić tak by wybierać "tematy" randek tak by "ta jedyna" chętnie w nich brała udział, a inne kobiety by odpadały.
Nie można tu jednak przesadzić ;-)

Można by było przyjąć, że powiedzmy 98% kobiet nie będzie z nami uprawiało seksu jeśli nie są tą jedyną, można by więc próbować po prostu proponować wszystkim kobietom seks i problem z głowy... ale "ta jedyna" też prowadzi swoje badania i na początku jej chęć uprawiania z nami seksu jest mniej więcej taka sama jak dla całej populacji, nie jest to więc dobry pomysł na pierwszą randkę bo mamy zbyt dużą szansę na stracenie "tej jedynej" już na początku.

Czyli dobrą strategią będzie taka, która będzie "stopniowała" randki.
Na początku powinny być takie, które zainteresują wiele kobiet i co ważne, nie mogą odrzucić "tej jedynej".
Później należy stopniowo wybierać coraz bardziej "selektywne" tematy randek.

Jak się okazuje, podejście zdroworozsądkowe ma sens ;-)

A ja mam pierwszy post na blogu w tym roku ;-)



Podobne postybeta
"Promocja homoseksualizmu" co to niby ma być?
Symulacja zamiast kartki i ołówka ;-)
Ku pamięci - iteracyjna wersja twierdzenia Bayesa ;-)
Szybki hack dla podejmowania decyzji
Dziwne wykorzystanie twierdzenia Bayesa :-)

sobota, września 24, 2011

Wybory wygra PO... z prawdopodobieństwem 67.4% ;-)

Jeżeli dobrze liczę to na podstawie zakładów w całym kraju wyboru wygra PO z prawdopodobieństwem 67.4%.
Prawdopodobieństwo wygranej dla 5 partii o największym poparciu to:


Partia Prawdopodobieństwo wygranej
PO 67,4%
PiS 25,7%
SLD 4,8%
PSL 1,6%
Ruch Poparcia Palikota 0,4%



Nie mam zbytnio jednak pomysły czy dałoby się (i w razie czego jak to zrobić ;-)) przeliczyć to na wyniki wyborów.
Danymi wejściowymi było to co przeczytałem dziś na WP o tym ile można wygrać za postawienie na kogo 100 PLN ;-)

Trochę przerażające jest to, że PiS ma blisko 26% szans na wygraną......


Podobne postybeta
Przewidujemy wyniki wyborów ;-) - wyniki
Złe wieści
O Ruchu Poparcia Palikota, czyli RPP ;-)
Coś się chyba system zacina
Czemu Google Play nie sprzedaje u nas urządzeń, filmów, książek i reszty?

piątek, września 09, 2011

Przesyłanie "obcych" na odległość, albo uniwersalny format danych ;-)

Czytam sobie "2001 Odyseja kosmiczna" i jestem w okolicach gdy HAL9000 głupieje.
To spowodowało, że przypomniałem sobie inną AI z książek Arthura C. Clarke'a, czyli Atenę z "Burzy Słonecznej".
Atena z 2 innymi AI wysyła się w kosmos i po jakimś czasie trafia do odbiorników jakiejś obcej cywilizacji gdzie zaczyna znów działać w jakimś rodzaju sandboxu.

I tak się zacząłem zastanawiać czy można przesłać program komputerowy tak by można go było zawsze uruchomić?
Albo jeszcze prościej, czy można stworzyć format, który komputer "binarny" byłby w stanie zawsze zrozumieć? [gdzie zawsze oznacza po odpowiednio wielkiej ilości prób].

Wydaje mi się, że tak, choć nie mam pewności :-)

Wyobrażam sobie to w taki sposób.

Najpierw mamy liczbę n bitową [np. 32 bitową], powiedzmy 1024 [zapisaną na 32 bitach].
Później mamy 1024 liczby od 0 do 1024.

Ten fragment "załatwia" nam definicję liczb "dodatnich".

Później mamy kolejną liczbę 1024 i następnie liczby od -1023 do 0.

To definicja liczb ujemnych.

I pokazujemy, że potrafimy zakodować liczby ujemne i dodatnie... może nawet powinno być tak, że najpierw napisalibyśmy 2048, później zaś dali liczby od -1023 do 1024?

Teraz "nauka" bardziej skomplikowanych "formatów".

Tu nie mam jeszcze pomysłu :-) Ale idea jest taka by "nauczyć", że najpierw jest np. długość w "słowach", później ilość powtórzeń "bloku", a później bloki [i każdy ma swoją długość].

Teraz dobrze by było przedstawić "opcody".

Niechby to był "język" podobny do assemblera x86.
Byłoby kilka rejestrów, np. 6 + 1 do licznika instrukcji.

Zacząłbym od ADD.
długość ramki,opcode (np. 0xADD :-)),teraz rejestry czyli najpierw 7 razy 0, później 6 zer i 1.
po tym znów:
długość ramki,opcode (np. 0xADD :-)),teraz rejestry czyli najpierw 0, później 1, dalej 5 razy 0, później 1,0,0,0,0,0,1.
Liczę, że to by już pokazywało, że ADD działa na 2 pierwszych rejestrach i że ten ostatni może mieć coś wspólnego z licznikiem rozkazów.
Później:
długość ramki,0xADD,1,1,0,0,0,0,0 a za tym 2,0,0,0,0,0,1

To samo dla kolejnych paru liczb.
W końcu dla -1 i 1, -2 i 2 i -1023 i 1023.

Później by "pokazać", do czego służy licznik instrukcji walnąłbym coś w stylu:
ADD 10,10,0,0,0,0,0 -> 20,0,0,0,0,0,0,1
ADD 20,10,0,0,0,0,1 -> 30,0,0,0,0,0,0,2
i tak dalej.

W końcu prosty program w stylu:
ADD 1
ADD 20
ADD 30
ADD 10

i wynik w pierwszym rejestrze jest 61.
Najpierw program zapisany tak, że byłyby zapisane stany rejestrów, czyli
ADD,0,1,[zera],0
ADD,1,20,[zera],1
ADD,21,30,[zera],2
ADD,51,10,[zera],3

i wynik, następnie program tak jak powinien wyglądać, czyli to co było wyżej (ADD i liczba jako 1 linia) i znów wynik jako stan rejestrów. Później serię takich programów.

Następnie MOV, i programy używające MOV i ADD i wyniki ich działania.

Dalej reszta rozkazów.

Widzę tu masę problemów ;-) ale zakładam, że przy takim przekazie "odbiorca" mógłby podchodzić wiele razy do przekazu, tak by w końcu dostawać wyniki zgodne z "przekazem".

Na końcu takiego "pakietu" można by było umieścić właściwy program.

Ale gdyby się to udało to można by było załatwić resztę przekazu też. Najpierw przesłać program, później za nim dane dla tego programu :-) i moglibyśmy tak wysyłać dowolny format danych, bo zawsze miałby w sobie odtwarzacz :-)

Co najlepsze, taki "odtwarzacz" uniwersalny do takich danych nie byłby chyba znów tak skomplikowany, bo musiałby "tylko" odpowiednio wiele razy próbować uporządkować format tak by mu wszystko działało.

Pewnie zbytnio upraszczam, ale wydaje mi się, że takie coś by mogło działać :-)

Może więc 1 wiadomość jaką dostaniemy od obcych będzie w takim formacie? ;-)


Podobne postybeta
Celeron M353 900MHz vs. Intel Atom 1.6GHz, czyli o tym czemu jest remis? ;-)
Lubię bity, czyli jak dodawać, odejmować, mnożyć i dzielić na bitach ;-)
Algorytm ;-)
Komputery są naprawdę stare ;-)
Hackowanie odczytu danych Exif ;-)

wtorek, sierpnia 30, 2011

Przewidujemy wyniki wyborów ;-) - wyniki

OK, są wyniki mojego sondażu dotyczącego wyniku wyborów :-)

Było 13 "głosów", ale 2 zostały zdyskwalifikowane z racji tego, że ktoś sabotował zabawę, przez wstawienie liczb w stylu 30 procent dla Polskiej Partii Pracy i np. 2 procent dla PO. Dodatkowo ten ktoś swój formularz zasubmitował 2 razy w odstępie 1 sekundy. Miał też rozdzielone łącznie 197% głosów ;-)
Kolejna osoba obdzieliła 109%

Przyjmijmy 2% jako wynik kwalifikujący do umieszczenia wyniku:
Nowa Prawica - 3.67% i odchylenie standardowe 3.67, rozpiętość od 1 do 10% (6 próbek)
Platforma Obywatelska - 37.2% i odchylenie standardowe 4.96, rozpiętość od 32 do 43% (11 próbek)
Polska Jest Najważniejsza - 2.78% i odchylenie standardowe 1.39, rozpiętość od 0 do 4% (11 próbek), jeżeli usunąć próbkę z 0 to wynik to 3.13% i odchylenie to 1.
Polskie Stronnictwo Ludowe - 9.64% i odchylenie standardowe 4.03, rozpiętość od 6% do 20% (11 próbek)
Prawo i Sprawiedliwość - 24.7% i odchylenie standardowe 4.56, rozpiętość od 17% do 30% (11 próbek)
Ruch Poparcia Palikota - 4.25% i odchylenie standardowe 3.41, rozpiętość od 1% do 10% (8 próbek)
Sojusz Lewicy Demokratycznej - 12.36% i odchylenie standardowe 6.05, rozpiętość od 3% do 25% (11 próbek)

W Sejmie znalazłyby się wg. tego PO, PSL, PiS i SLD.

Osobiście liczę, że Nowa Prawica będzie miała poniżej 3% :-) ale wydaje mi się, że odchylenie standardowe jakie ma pokazuje, że mało kto wie co o tym tworze myśleć, podobnie jest z Ruchem Poparcia Palikota, ale zważyć trzeba, że jednak uczestnicy zabawy byli prawdopodobnie bardziej lewicowi niż prawicowi, więc bardziej mogli przeszacować RPP.
Mogę zgadywać, że PJN przegra wybory, nawet nie uzyskawszy 3% (a chyba tyle trzeba mieć by dostawać pieniądze) i niskie odchylenie standardowe sugeruje, że i zabawowicze tak myślą.
SLD może się przejechać, ja na nich będę głosował, ale Grzegorz Napieralski robi wiele by innych zniechęcić ;-)
PSL ma Sejm pewny i możliwy jest układ w którym to on będzie 3 partią w Sejmie, przed SLD.
Nie ma za to prawie szans by PiS przegoniło PO, ale też prawie na pewno będzie miało wyniki powyżej 20%, choć tu wygląda jakby nie mieli szans przekroczyć 30% (ja bym tu głowy nie dał znów z racji jednak lewicowo-centrowych ciągotek zabawowiczów).


Podobne postybeta
Czemu mam żal do Razem
O Ruchu Poparcia Palikota, czyli RPP ;-)
Średnia vs. mediana
Złe wieści
Jak można przegrać wybory gdy się je wygrywa?

środa, lipca 13, 2011

Symulacja zamiast kartki i ołówka ;-)

Podobno w Google potrafią zadać pytanie w stylu "Jeśli prawdopodobieństwo tego, że w ciągu godziny obserwacji drogi zobaczymy samochód wynosi 0.95, to ile wynosi prawdopodobieństwo zobaczenia samochodu w ciągu 30 minut?".

Umiałem sobie ten wzorek wyprowadzić "od tyłu", zakładając że skoro P(dla 1 godziny)=0.95 to P(dla 2 godzin)=P(dla 1 godziny)+(1-P(dla 1 godziny))*P(dla 1 godziny). Ale nigdy nie byłem go pewien ;-)
Powiedzmy, że doszedłem do tego intuicyjnie ;-) a tak naprawdę wg. takiego schematu, to że auto zauważymy w ciągu pierwszej godziny wynosi 0.95, czyli z prawdopodobieństwem 0.5 nie zauważymy auta, w takim przypadku drugą godzinę będziemy ślepić na tą drogę i wtedy to prawdopodobieństwo znów będzie wynosiło 0.95.
Sprawdziłem to też w głowie ;-) Dla prostszego przypadku gdy to prawdopodobieństwo wynosi 0.5, wtedy możemy przez 2 godziny nic nie zobaczyć, co będzie 1 przypadkiem, możemy zobaczyć coś w godzinie 1 lub w godzinie 2, to są 2 przypadki i w końcu możemy zobaczyć coś 2 razy w ciągu 2 godzin. Czyli mamy 3 sytuacje gdy coś widzimy na 4 możliwe, czyli prawdopodobieństwo wynosi 0.75. Co się zgadza ze wzorkiem.

Ale z matematyką to ja zawsze tak na bakier byłem, nie mam tego talentu, który mają niektórzy i nie widzę czy wynik ma sens czy nie ma (zwykle z tego powodu, że nie umiem używać kartki i ołówka więc liczę to w głowie i się gubię).
To napisałem program do testowania ;-)




Program przeprowadza 10000 razy symulację naszego zjawiska.
I wyniki wychodzą sensowne.
OK, to wiemy, że mój pomysł ma ręce i nogi, teraz trzeba w drugą stronę.
Ale jak nasz wzór działa to mamy, że:
P(dla 2 godzin)=P(dla 1 godziny)+(1-P(dla 1 godziny))*P(dla 1 godziny)
P(dla 2 godzin)=2*P(dla 1 godziny)-P(dla 1 godziny)2
P(dla 1 godziny)2-2*P(dla 1 godziny)+P(dla 2 godzin)=0

 W końcu mamy (i tu się trochę gubię ;-)), że:
P(dla 1 godziny)=(2-sqrt(4-4*P(dla 2 godzin)))/2 lub P(dla 1 godziny)=(2+sqrt(4-4*P(dla 2 godzin)))/2

Jak sobie zmienimy pytanie Google tak by czasy były o 2 większe (żeby skorzystać z wzorów u góry) to odpowiedź wychodzi 0.776 ;-)
Jak ją podstawić do symulacji to wynik wychodzi 0.95, czyli tyle ile powinno.

I teraz jest tak, że zapewne to wszystko u góry można znając matematykę powiedzieć z głowy, a ja głupi muszę to liczyć i sobie symulatory pisać ;-)
Plus jest taki, że mój sposób jest zabawniejszy :-)


Podobne postybeta
JavaScript wygrywa z Pythonem w symulacji ;-)
Ku pamięci - iteracyjna wersja twierdzenia Bayesa ;-)
Dziwne wykorzystanie twierdzenia Bayesa :-)
Randki w ujęciu Bayesowskim ;-)
Kartka i ołówek

wtorek, marca 15, 2011

Cena benzyny w górę, wydatki na paliwo w dół ;-)

Trochę cyniczny będę...

Wielu płacze, że ceny benzyny idą w górę i że to zbrodnia....

A ja na to mówię "i co z tego?".

Paliwo zdrożało w ciągu ostatniego czasu o jakieś 10%, a mnie koszt paliwa spadł o jakieś 4%... jak to możliwe?

Bo przebiegle zmniejszyłem średnią prędkość jazdy. Po podwyższeniu limitu na autostradach zacząłem jeździć 140 km/h przez co moja średnia prędkość w trakcie jazdy do domu wynosiła około 102 km/h. Teraz staram się nie przekraczać 130 km/h, a moja średnia prędkość to jakieś 93 km/h i wychodzi na to, że spalam o 10-14% mniej paliwa.

To by się nawet zgadzało z teoretycznymi przewidywaniami ;-) Bo tak pi razy oko opór powietrza zależy od kwadratu prędkości, zmniejszenie więc prędkości o 9 km na godzinę ze 102 do 93 powinno spowodować spadek oporu powietrza o jakieś 17%, jak weźmiemy pod uwagę jeszcze inne opory to te 10-14% jest jak najbardziej prawdopodobne. Zważywszy jeszcze, że gros czasu jeździłem z prędkością 140 km/h, a teraz jeżdżę 130 km/h to różnica tutaj to tak mniej więcej te 14% ;-)
Zmniejszenie prędkości do 120 km/h powinno dać jeszcze większe oszczędności, bliskie 20-25%.
Czas przejazdu wzrósł mi z godziny i 30 minut do godziny i 40 minut czyli też znośnie [o 10%], ale prawdopodobnie bezpieczeństwo jazdy wzrosło mi więcej niż 10%. Cały samochód też się powinien mniej zużywać.

Dlatego może zamiast płakać nad cenami benzyny lepiej zdjąć nogę z gazu? ;-)

Podobne postybeta
"Arystokraci" od siedmiu boleści
120 km/h, czyżby nowe 140 km/h? ;-)
My Tracks mówi "budujmy więcej autostrad" ;-) albo jakoś tak ;-)
Atom
800+

poniedziałek, marca 14, 2011

Sudoku solver - film ;-)

W trakcie zabaw z pisaniem mojego Sudoku Solvera dodałem sobie do niego opcję debuga, dzięki której mogłem zobaczyć jak solver zabiera się do rozwiązania Sudoku ;-)
Dzięki temu mogłem np. stwierdzić, że mój pomysł z głupim połączeniem DFS i BFS się nie sprawdza ;-)

Np. dobre rozwiązanie Sudoku wygląda w taki sposób:



Widać, że dość szybko wypełniane są pola i linie w których istnieje mała ilość możliwych "wypełnień", po czym algorytm stara się wypełnić kolejne pola. Widać też cofanie się ze złych rozwiązań ;-)
Widać też to, że to co normalnie na moim laptopie zajmuje około 100 ms w trybie w którym pokazywane są wszystkie stany pośrednie zajmuje ponad 11 sekund ;-)


Podobne postybeta
Sudoku - rozwiązanie doskonałe ;p
Sudoku - wstyd mi ;-)
Przyśpieszanie backtrackingu
Sudoku - atak pierwszy ;-)
Mroczne Materie - polecam, gorąco polecam :-)

niedziela, marca 13, 2011

Sudoku - rozwiązanie doskonałe ;p

WildWezyr na Google Buzz zażyczył sobie bym dostarczył godnego przeciwnika dla jego Sudoku Solvera ;-)

Oto i on - Sudoku Solver 2011 XXX.YYY.ZŹĆ [buńczuczna nazwa to ważny element marketingu ;-)].



[tutaj link dla osób, które czytają to np. w Google Buzz :-)]

Pozbył się on dziedzictwa poprzednich rozwiązań i nie generuje już za każdym razem listy wszystkich możliwych kandydatów [OK, w rzeczywistości nadal to robi bo inaczej się raczej nie da, w końcu trzeba mieć jakieś sensowne kryterium wyboru pola, które się będzie rozpatrywać ;-)]. Dzięki temu odpadło mu sortowanie [i znów jeśli zagłębić się w szczegóły to fakt sortowania nie ma, ale w poprzedniej wersji było ono tylko dlatego, że format przechowywania informacji o polach był taki, że sortowanie było jedynym w miarę szybkim sposobem wyciągnięcia informacji o polu, które jest najbardziej "ograniczone"].

Ta wersja dorobiła się też guziczka Clear, a kopiowanie z formatu przechowującego Sudoku zostało zmienione tak by nie obracało planszy o 90 stopni :-)

Te drobne zmiany spowodowały, że trudne Sudoku są rozwiązywane w 200-300 krokach, a nie w 4000-5000 ;-)

Podobne postybeta
Sudoku - atak pierwszy ;-)
Sudoku solver - film ;-)
Sudoku - wstyd mi ;-)
Sudoku - przyśpieszamy, ale jeszcze nie za bardzo ;-)
Święta wojna...

czwartek, marca 10, 2011

Sudoku - wstyd mi ;-)

[Updata: mam już lepsze rozwiązanie, które radzi sobie jak mi się wydaje ze wszystkimi Sudoku i to w bardzo krótkim czasie :-)]

Już wiem czemu moje poprzednie rozwiązania były takie sobie...

Za sprytny chciałem być ;-)

Przy każdym kroku generowałem listę wszystkich możliwych w danym momencie "zajętości" pól i dla każdego z takich kandydatów robiłem kolejny krok...... to oznaczało, że przytłaczająca większość "kroków" była powtarzana po wielokroć.

A wystarczy nie kombinować i w każdym kroku zajmować się tylko 1 polem... I wtedy wszystko działa :-)



Ta wersja wzbogaciła się o "moduł" importu, dzięki niemu można do rozwiązywarki wrzucać różne przygotowane wcześniej przykłady. Pomysł jest od WildWezyra z jego Sudoku Solvera, z tym, że u mnie działa na odwrót :-)

Nie jest to jeszcze demon prędkości, ale to tylko dlatego, że korzystam nadal z kodu, który generuje listę kandydatów dla wszystkich pól i dopiero na końcu po posortowaniu ich wg. tego, które jest najbardziej "unikatowe" odrzucam z rozważań wszystkich kandydatów, którzy nie dotyczą tego pola, które jest najbardziej unikatowe.

Kolejny raz mam lekcję, że nie należy kombinować ;-)


Podobne postybeta
Sudoku - atak pierwszy wersja 2 ;-)
Sudoku - przyśpieszamy, ale jeszcze nie za bardzo ;-)
Sudoku - rozwiązanie doskonałe ;p
Sudoku - atak pierwszy ;-)
Sudoku solver - dalsza walka ;-)

poniedziałek, marca 07, 2011

Sudoku - atak pierwszy wersja 2 ;-)

[Updata: mam już lepsze rozwiązanie, które radzi sobie jak mi się wydaje ze wszystkimi Sudoku i to w bardzo krótkim czasie :-)]

Lekko zmodyfikowana wersja, która wydaje się poprawiać pewne błędy poprzedniej (np. to, że tamta wcale nie sortowała elementów tak jak myślałem, że sortowała ;-)).



Czym się różni od poprzedniej wersji?

Po pierwsze dobrze sortuje rozwiązania, czyli najpierw przygląda się najbardziej "unikatowym" polom, a jeśli jakieś pola są podobnie "unikatowe" to najpierw uderza w te pola, które są zajęte przez bardziej popularne liczby (np. jeśli mamy już 8 dziewiątek na planszy to raczej taki kandydat jest bardziej sensowny do rozpatrzenia jako pierwszy).
Po drugie gdy już stworzona jest lista kandydatów, ale jeszcze przed sortowaniem, sprawdzane jest czy liczba kandydatów wystarczyłaby do zapełnienia planszy do pełna, jeśli nie to rozwiązanie jest porzucane.

Nadal jest to dość naiwny algorytm, ale wydaje się działać lepiej.


Podobne postybeta
Sudoku - wstyd mi ;-)
Sudoku - przyśpieszamy, ale jeszcze nie za bardzo ;-)
Sudoku - atak pierwszy ;-)
Sudoku - rozwiązanie doskonałe ;p
Sudoku solver - dalsza walka ;-)

niedziela, marca 06, 2011

Sudoku - atak pierwszy ;-)

[Updata: mam już lepsze rozwiązanie, które radzi sobie jak mi się wydaje ze wszystkimi Sudoku i to w bardzo krótkim czasie :-)]

Zaatakowałem sobie Sudoku ;-)
Czyli napisałem coś co powinno być zdolne do rozwiązywania Sudoku... i jest, ale w rozsądnym czasie rozwiązuje tylko te prostsze ;-)

Przykładowe Sudoku wrzuciłem do środka, dzięki czemu można zobaczyć działanie mojej "rozwiązywarki" ;-)



Jak to działa?

Prosto i naiwnie. Atak odbywa się przy pomocy backtrackingu (czyli tak samo jak atakowałem problem 8 królowych :-)).
Pozycje do rozważenia dobierane są w taki sposób, że najpierw skanujemy jakie liczby zostały użyte w poszczególnych liniach (poziomych i pionowych), oraz "sekcjach" (czyli kwadratach 3x3). Następnie iterujemy po liczbach od 1 do 9 i dla każdej z tych liczb iterujemy po możliwych pozycjach sprawdzając czy w danym momencie takowa pozycja może zostać zajęta przez daną liczbę, jeśli może to zapamiętujemy sobie daną liczbę na danej pozycji jako kandydata. Następnie sortujemy kandydatów tak by najpierw rozpatrywać tych, którzy są "najbardziej unikatowi" ;-) Idealnie takim kandydatem będzie 1 liczba, która może być na danej pozycji.

Przy bardziej skomplikowanych Sudoku dobrze to odpalać pod Chrome lub Firefoksem (4.0), i nie chodzi o wydajność JavaScriptu, a bardziej o to, że ta wersja co przeszukanie 1000 rozwiązań wyświetla alert ;-) a w Chrome i Firefoksie można po prostu zaznaczyć przy drugim alercie, że nie chcemy go już widzieć.... (przy okazji wydaje się, że obie przeglądarki dodają tą opcję tylko gdy alerty pojawiają się w odstępie góra 1 sekundy ;-)).

Teraz trzeba by się za to zabrać od poważniejszej strony i spróbować wymyślić lepszy algorytm :-)


Podobne postybeta
Sudoku - przyśpieszamy, ale jeszcze nie za bardzo ;-)
Sudoku - rozwiązanie doskonałe ;p
Sudoku - wstyd mi ;-)
Przyśpieszanie backtrackingu
Sudoku - atak pierwszy wersja 2 ;-)

sobota, lipca 31, 2010

A może jutro?

Kiedyś sprzedałem wam tutaj sposób [nie mój :-)] pozwalający na wykorzystanie "zasady kopernikańskiej" do wyznaczenia z pewnym prawdopodobieństwem tego ile coś jeszcze będzie trwało.
W skrócie idzie to tak, że jeżeli wiemy, że coś już trwa L to w 60% przypadków będzie trwało jeszcze od L/4 do L*4. Mówiąc inaczej, jeżeli weźmiecie pod uwagę wszystkie zjawiska, które trwają już L, to 60% z nich będzie trwała jeszcze od L/4 do L*4.

Bierze to się stąd, że nasze L znajduje się najprawdopodobniej w "nieszczególnym" momencie czasu trwania zjawiska, gdzieś bliżej środka niż początku lub końca, dla 60% oznacza to, że nasza chwila znajduje się, w odległości od -30% do 30% od środka jakiegoś rzeczywistego czasu trwania zjawiska, czyli że w najkrótszym przypadku jeszcze 20% czasu jest przed nami, a w najdłuższym 20% jest dopiero za nami.

Tyle tytułem wstępu.

Dziś inne wykorzystanie tego niecnego tricku ;-)
Jak już tu [i w innych miejscach ;-)] pisałem, czekam na zaproszenie do Google AppInventor for Android. Nie wiem ile trwa zwykle oczekiwanie.

Chciałbym więc wiedzieć jaka jest szansa, że to będzie jutro :-)

Opisuje to zależność P(L,A)=(1+L/A)-1=A/(A+L), gdzie L to czas trwania zjawiska do chwili obecnej, a A to czas "do zakończenia". P(L,A) to zaś prawdopodobieństwo tego, że zjawisko trwające L zakończy się w czasie nie dłuższym niż A.

Ja czekam 18.5 dnia, a chciałbym poznać szanse na to, że moje oczekiwanie skończy się w ciągu najbliższego dnia.

Podstawiamy i dostajemy wynik, którym jest P(18.5,1)=5.128% :-)
Mam więc trochę ponad 5% szans na to, że jutro przyjdzie zaproszenie.
Jeszcze inaczej to przedstawiając, z 20 osób które już czekają 18.5 dnia, 1 powinna dostać zaproszenie ;-)

Chcę być tą jedną osobą ;-)

[To liczenie to pewne nadużycie ;-), bo w rzeczywistości moje wyliczenie mówi tylko tyle, że 5.128% ze wszystkich zjawisk we wszechświecie trwających już 18.5 dnia skończy się w ciągu następnego dnia. Jednak można pewnie przyjąć, że te obliczenia mają sens o tyle, że Google prawdopodobnie losuje osoby do zaproszenia, jeśli jest to losowanie, w którym ciągle są zapisy to zawsze zostanie ktoś w ogonie ;-)]
Tu zastrzeżenie jeszcze, jest 3 w nocy i mogłem coś źle policzyć czy samemu sobie wyobrazić ;-)

A tutaj "narzędzie" do liczenia ;-)


Podobne postybeta
Sztuczka - ile to jeszcze potrwa?
Reality Check
OAuth mnie denerwuje ;-)
Modale nie takie dobre dla Androida ;-)
Be human for engineers: Instrukcja obsługi człowieka - marzy mi się coś takiego ;-)

Paradoks Java'y - domyślny poziom widoczności jest stosowany najrzadziej ;-)

Nie mam twardych danych, ale już trochę kodu w Java'ie widziałem i ciekawa sprawa, najrzadziej używanym zakresem widoczności stosowanym w kodzie Java'owym wydaje się być default :-)
Najpowszechniej używane są public i private, z czego większość metod jest zwykle public, a większość pól w klasach jest private. Bardziej wysublimowani programiści używają jeszcze protected, ale default wydaje się być stosowane najrzadziej ;-)

To chyba świadczy o tym, że idea by przy pomocy pakietów i widoczności budować API jest zbyt mało oczywista.

Ok, jednak podam trochę liczb bo w tzw. międzyczasie zajrzałem do Google Code Search i "pomierzyłem" trochę ;-) i okazuje się, że wygląda to tak [hostowanie w Google Docs, eksport z OpenOffice.org przy pomocy OOo2GD]:


Czyli byłem bliski w moich przewidywaniach, okazuje się, że default jest używany jako modyfikator dostępu tylko dla 11.5% metod ze zwracanym wynikiem jako void, int, String czy boolean, rzadziej używany jest tylko protected, bo w 7.6% przypadków :-).
Blisko 70% wszystkich metod w Java'ie jest publiczna i dostępna dla wszystkich, a 75% kodu dostępne jest poza pakietem pochodzenia.

Nie świadczy to o nas programistach za dobrze ;-)

Twórcy języka tworząc defaulta dali nam sygnał, że jest to najbardziej pożądany poziom widoczności, a my to olewamy ;-)

W klasach wygląda to ciut lepiej, bo aż 18.7% klas ma dostęp domyślny, 77.18% jest publicznych, 3.66% jest prywatna i tylko niecałe 0.5% klas jest protected [czyli są to też klasy wewnętrzne bo tylko one mogą mieć widoczność protected].

Cała ta enkapsulacja, ukrywanie implementacji i podobne są chyba zbyt trudne do stosowania w normalnym życiu ;-)

A, i to może być dyskusyjne, wydaje mi się, że kod, który można przeglądać w Google Code Search jest kodem pisanym przez statystycznie lepszych programistów niż normalny kod produkcyjny.

Potwierdza się moje twierdzenie, że jako programiści niedouczeni jesteśmy ;-)

W ramach sprzedaży metodologii "badania", np. tak szukamy klas protected, a tak metod publicznych zwracających String.

Podobne postybeta
Klasa statyczna - ki diabeł?;-)
Przeszacowany Linux, Niedoszacowany Windows i Ukryty MacOS ;-) czyli o tym na jakich systemach używa się głównie OOo2GD
protected - powinni tego zakazać...
Electron + Airly = wskaźnik jakości powietrza w pasku ;-) - part 2, źródła ;-)
Refleksje i serializacja w Java'ie - podstawy i obalanie mitów ;-)

niedziela, maja 30, 2010

Jak szybciej znaleźć mniejszą i większą wartość? [opisowy tytuł, który niewiele mówi ;-)]

Optymalizacja to zło, ale jakbyście czasem musieli ;-) to dziś porada dotycząca szukania mniejszej i większej liczby. Na wejściu dostajemy 2 liczby typu double, na wyjściu chcemy dostać te same liczby, ale tak by były ustawione wg. wielkości. wejście: a, b wyjście: min(a,b), max(a,b) Pierwsze co przychodzi do głowy to:

 double c = Math.min(a, b); 
double d = Math.max(a, b);
a = c; b = d;
Jednak szybsze jest użycie takiego kodu:

 double c = a+b;
b = (a<b)?b:a;
a = c - b;
Ten drugi kod na wykonanie zużywa tylko 74% czasu potrzebnego na wykonanie pierwszego kodu. Zawsze to coś, jeżeli Twój kod spędza 100 sekund w ustalaniu która liczba z 2 jest większa, a która mniejsza to zawsze te 26 sekund można spożytkować na coś innego ;-) Oczywiście trzeba sprawdzić wszystko w swoich warunkach, mnie to pozwoliło na przyśpieszenie programu o jakieś 4-5% bez wyraźnego spadku jakości obliczeń. [Co nie ma do końca sensu, bo wystarczy małe "zachwianie" procesora, spowodowane włączeniem się innego procesu i cały zysk się w moim przypadku traci, ale to przez to, że najbardziej procesożerna część programu trwa około 22 sekund ;-)]

Podobne postybeta
Plus dla Scala, minus dla Groovy ;-)
OOo2GD 2.1.1 gotowe :-)
Architektura
OOo2GD w liczbach ;-)
Trick w Java&amp;amp;amp;amp;amp;amp;#39;ie ;-) czyli double brace initialization