Jump to page: 1 2 3
Thread overview
Büyük Sayılar Yasası mı?
Apr 10, 2012
Salih Dinçer
Apr 10, 2012
Salih Dinçer
Apr 10, 2012
Salih Dinçer
Apr 10, 2012
mert
Apr 10, 2012
mert
Apr 10, 2012
Salih Dinçer
Apr 10, 2012
Salih Dinçer
Apr 10, 2012
mert
Apr 10, 2012
Salih Dinçer
Apr 10, 2012
Salih Dinçer
Apr 10, 2012
mert
Apr 10, 2012
Salih Dinçer
Apr 10, 2012
Salih Dinçer
Apr 10, 2012
Salih Dinçer
Apr 19, 2012
Salih Dinçer
Apr 19, 2012
Salih Dinçer
Apr 19, 2012
Salih Dinçer
Apr 19, 2012
Salih Dinçer
Apr 19, 2012
Salih Dinçer
April 10, 2012

Law of Large Numbers, değil de bağlanım (Regression analysis) mı?

Çıktısı:
</forum/unb_lib/designs/modern/img/arrow_right.png>https://docs.google.com/spreadsheet/ccc?key=0AhfRt7N5jeLNdFM2V2gyc0V5Zkl2c3FLdW94ejNDR0E

Yukarıdaki çıktıları iki ayrı bilgisayarda, rasgele değişken (toplamları 45 sn. olan dizi) yerine uniform(1, 9) ile şurada tartıştığımız kod (http://ddili.org/forum/thread/772,2) üzerinde denedim. Sonuç bana şaşırtıcı geldi çünkü yazılımlar çok az bir farkla (CTRL+C yapış zamanından anlayabilirsiniz) eş zamanlı gidiyordu! Bu nasıl bir rasgelelik veya eş zamanlı çalışmadır anlamadım... :nuts:

Bir anlayan çıkar elbet... :-D

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 10, 2012

Anlaşılır olsun diye bir çizelge hazırladım. Dikey doğru toplam geçen zamanı temsil ediyor...

http://img846.imageshack.us/img846/7919/spawntest.png

Bir de şu kodu denemelisiniz...

/*
   spawnTest.d (10.04.2012)
*/
import core.thread, std.concurrency, std.random;
import std.stdio: writef;
import std.string: format;

   void birinci (Tid anaKimlik, shared(Say)* xSay)
   {
       receive ((int xBekle)
       {
           send(anaKimlik, format(xBekle, " ms "));/*"Ben (1.) birinciyim ve ",
                                  "%d saniye beklemeliyim!", xBekle));*/
           Thread.sleep(dur!"msecs"(xBekle));
       });
       scope(exit)
       {
           writef("- birinci() x %d kez girdi/çıktı!\n", ++xSay.birinciyi);
           send(anaKimlik, 1);
       }
   }

   void ikinci (Tid anaKimlik, shared(Say)* xSay)
   {
       receive ((int xBekle)
       {
           send(anaKimlik, format(xBekle, " ms "));/*"Ben (2.) ikinciyim ve ",
                                  "%d saniye beklemeliyim!", xBekle));*/
           Thread.sleep(dur!"msecs"(xBekle));
       });
       scope (exit)
       {
           writef("- ikinci() x %d kez girdi/çıktı!\n", ++xSay.ikinciyi);
           send(anaKimlik, 2);
       }
   }

   shared struct Say { int birinciyi, ikinciyi; }

void main() {
   shared auto say_da_Bakam = Say(); // sayıyorrrr bakam...:)

   auto birinciTid = spawn(&birinci, thisTid, &say_da_Bakam);
   auto ikinciTid = spawn(&ikinci, thisTid, &say_da_Bakam);

   bool flipFlop = true;

   int[] rakamlar = [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ];
   auto rasgeleOlsun = Random(unpredictableSeed);

   while (true)
   {/*
       foreach (rasgele; randomCover(rakamlar, rasgeleOlsun))
       {*/
           if(flipFlop)
           {
               send(birinciTid, uniform(1, 1000)); //rasgele);
               receive ((string xDurum)
               {
                   writef(xDurum);
               });

               flipFlop = false;
           } else {
               flipFlop = true;

               send(ikinciTid, uniform(1, 1000)); //rasgele);
               receive ((string xDurum)
               {
                   writef(xDurum);
               });
           }
           final switch (receiveOnly!int())
           {
               case 1: birinciTid = spawn(&birinci, thisTid, &say_da_Bakam);
               break;
               case 2: ikinciTid = spawn(&ikinci, thisTid, &say_da_Bakam);
           }
       //}
   }
}

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 10, 2012

Önce kısa bir not:

Yukarıda naklettiğim kod Linux'da kararsız çalışıyor ve 255. girip/çıkma eyleminde program göçüyor ama Windows'da tık yok. Windows'da ise writef'de bir sıkıntı oluyor ve ekrana nedense hiç bir şey yazmıyor. O yüzden tekrar writeln'ye çevirdim kod ise şurada (http://codepad.org/JDXC3rLr).

Aslında şaşırdığım şey çok ama bu konuda ilgimi çeken: "rasgele sayılar üreten aynı yazılım dahi olsa koşut (parallel) çalışması" ki belki Mert bu konuya bir açıklık getirebilir.

Bu arada, dur!"msecs" ve uniform(1, 1000) kullandığımda, her iki eğri (Win7 CMD1, Win7 CMD2) 1000 girip/çıkmaya kadar aynı yönde ilerlediler. Ancak sonra 5, 10 derken 3000'lerde 15 fark vardı. Şimdi ise 10 binlerde ve aradaki fark 75 ki bana bu ilginç geliyor.

Kodu donanımsal olarak PIC'de denemeyi düşünüyorum...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 10, 2012

Merhaba salih,
Uniform işlevinden aldığın ve rasgele olduğunu düşündüğümüz sayıları üreten bir algoritma. Ve o algoritmanın tasarımına bağımlı olmak zorundalar.
Buna düzenek veya tasarım diyebilirsek bu tasarımın çok sayıda tekrarında üretilen veriler kendi tasarım/düzenek durumlarından bağımsız olarak toplam değerlerin ortalamalarına doğru yaklaşırlar. yani milyonlarca tekrarlar söz konusu olduğunda aralarındaki farklar hissedilemeyecek derecede azalır.
Alıntı:

>

Bu arada, dur!"msecs" ve uniform(1, 1000) kullandığımda, her iki eğri (Win7 CMD1, Win7 CMD2) 1000 girip/çıkmaya kadar aynı yönde ilerlediler. Ancak sonra 5, 10 derken 3000'lerde 15 fark vardı. Şimdi ise 10 binlerde ve aradaki fark 75 ki bana bu ilginç geliyor.

Bahsettiğin verileri onu sağlayan algoritmayı görmezden geldiğimizde büyük sayılar yasasıyla bağdaştırabiliriz.
Regresyon ise bu örneklere bakarak yeniden tasarlayacağın kodun, buna benzer davranacağını söylemekle ilgilidir.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 10, 2012

Aslında bu bir dalga hareketi sanıyorum. Program tekrarlandığında başka bir sayı aralığında tekrar gözlemleniyor olabilirler. Eğer öyleyse sizin programınızın davranış izi olarak düşünebiliriz bu durumu.
Alıntı:

>

15/3000 = Binde 5
75/10000 = Binde 7.5

Hata payı olarak değerlendirmek de mümkün. Deneyler arttıkça daha daha sağlıklı karar verilebilir sanıyorum, hata payı ise ve bu hata payı sizin beklentilerinizi aşıyorsa bunu da gidermenin yöntemleri bulunabilir.

Benim projemde beşbinde 0,5 sapma bile istenmeyen olarak kabul edildiğinden...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 10, 2012

Teşekkürler Mert,

Alıntı (acehreli):

>

İstatistiksel hata payı sayılır onlar. Zaten her an için eşit olsalardı da rasgele diyemezdik. :)
Aksine bu fark (hata payı değil) çok küçük! Şöyle ki;

  • Bilgisayardan 1 ila 1000 arasında sayı tutması isteniyor. (aslında iki çünkü her programda iki işlev var)
  • Kuramsal olarak birinci bilgisayar en küçük 1'i seçebilirken,
  • İkinci bilgisayar en büyüğünü de seçebilir...

Bu şu demek: Başlangıçta aralarındaki fark çok büyük olmalı...

Ancaaaak, bu spawnTest örneğinde neredeyse başa baş gidiyorlar ve sonra doğal olarak araları açılıyor...:)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 10, 2012

Salih,
Beklenen, farkların büyük olması ama aslında küçük değil mi?. Aslında Ali hocam da hata payı olarak görülebilecek kadar küçük demek istemiş gibi anladım ben ki ikinizin de hakkı var. Rasgelelik üreteci kendinden bağımsız olarak (ondan kuramsal olarak beklenenden) Çok yakın değerler seçiliyor hep. Bazen istisna olarak ilk başlarda farklar büyük olabiliyor. Bunun düzeneğin tasarımı ile yakından ilgisi var. Örneğin 1- 1000 arasında bir değer ile 1-6 arasında seçilmesi istenen rasgele değerlerde sonuçlar başlangıç aşamasında kaotik olabiliyor. Ancak tekrarlayan modelde ilerlendikçe ardaki fark oldukça küçülüyor, çoğu zaman başlangıç verilerini bile dengeleyecek kadar normalleşebiliyor.

Hangi ortamda çalıştırırsan çalıştır aşağı yukarı bu biçimde sonuçlar alman kaçınılmaz. Elbette burada tek bağımlılık rasgeleliği üreten ortam ki bu durumda bir bilgisayar programı. O bile bu yasanın kapsamı içinde kalmak zorunda.

Evrendeki her düzen buna uyarken senin düzeneğinin uymaması anomali olarak değerlendirilmeli bence. Hatta daha da garibi ne kadar gözlem altında tutulursa verilerdeki anomaliler de artma eğilimi gözleniyor benim çalışmamda. Mesela bin tekrar boyunca olmayan bir sınır bir anlığına zorlanıyor. Ardından yine buna benzer bir aralıkta bu sefer ters yönünde. İşte burada tekrarlanan anomalinin bile ters yönde olması anlamlıdır.
Bu düzenekler/ tasarımlar bu derece beklenen kararlılıkta olmasalardı elektrik motorlarından bile söz edemezdik. Düşünsenize senkron motorların bazen 750 dev/dak bazen 500 dev/dak döndüğünü, ve beklenen devrin dakikada 2500 olması gerekliliğini :-)
Gibi gibi. Benim şaşırma evresini geçeli 2 yılı aşkın bir süre oldu sanırım ))

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 10, 2012

Alıntı (mert):

>

Aslında bu bir dalga hareketi sanıyorum. Program tekrarlandığında başka bir sayı aralığında tekrar gözlemleniyor olabilirler. Eğer öyleyse sizin programınızın davranış izi olarak düşünebiliriz bu durumu.
İşte bu, yani bu bir desen...

Basit manada ürettiğmiz rasgele sayılar aslında kendi aralarında rasgeleler. Yani rasgele kümesi içinde tıpkı insan kişilikleri gibi başka kümeler var. Sizin rasgele algoritmanız ne kadar başarılı olduğu bu sonsuz alt kümelerin her birinin içinde ne kadar kısılı kaldığını gösteriyor.

Dip Not: Unutmadan vurgulamalıyım; pizzaDlang örneğinde dizi kullanmıştım. Orada bir desen olması çok doğaldı. Çünkü dizi elemanları bitene kadar her seferinde benzersiz (unique) bir değeri kendi desen kümemden seçip çıkarıyordu. Örneğin dizide 1 ila 9 sayı varsa, her foreach() döngüsünde toplamları 45 edeceği (-bkz. Gauss Denklemi: [n²+n]/2) için standart sapma aralığını hesapladım (-bknz. Sheet3 (https://docs.google.com/spreadsheet/ccc?key=0AhfRt7N5jeLNdFM2V2gyc0V5Zkl2c3FLdW94ejNDR0E)), -3 ile 3 arasında dalgalanmalı.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 10, 2012

Alıntı (acehreli):

>

Şimdi aklıma bir şey geliyor: Acaba writefln() kullanmadığın için standart çıkış "flush edilmiyor" da sen iş parçacıklarının aynı anda gidiyorlar mı diye gözlemliyorsun?
Yok, önbellekte bekleyen veriler değil bunlar. Sonuna "\n" geldiği için çıkarken anında ekrana yapışıyor veriler.

Veriler ise saniye ve mili saniye cinsinden. Örneğin son test ekranımı 'while('loop')' ile aldım ve sınırlama değişkenini 200'e eşitledim. Son bir kaç satır ise uyku zamanına uygun bir şekilde çıkmakta:
': : :
812 ms - birinci() x 97 kez girdi/çıktı!
98 ms - ikinci() x 97 kez girdi/çıktı!
846 ms - birinci() x 98 kez girdi/çıktı!
553 ms - ikinci() x 98 kez girdi/çıktı!
799 ms - birinci() x 99 kez girdi/çıktı!
915 ms - ikinci() x 99 kez girdi/çıktı!
555 ms - birinci() x 100 kez girdi/çıktı!
736 ms - ikinci() x 100 kez girdi/çıktı!'

Bu vesileyle sormak isterim; 'main()''deki döngü sonsuza kadar saydığında neden 100 'spawn()' için 200 kere döner? Aslında iki işlev olduğu için diye cevap verilebilir. Ama işlemci çok hızlı bir şekilde 'while('true')' kümesini işletmesi gerekmez miydi? Sonuçta uyutulan aslında 'spawn()' vasıtasıyla açılan Thread'lar değil mi?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 10, 2012

Alıntı (acehreli):

>

Alıntı:

>

işlemci çok hızlı bir şekilde 'while('true')' kümesini işletmesi gerekmez miydi?
main() her bir receive()'de mesaj bekliyor onun için o da adım adım işliyor.
Teşekkürler bir şey daha öğrendim...

Burada sorundan çok, iki farklı bilgisayarda başlardaki rasgele farkları (dalgalanmaları) büyük olması gerekirken her iki ekranda birbirine çok yakın seyrediyor. Sonra tabi doğal olarak araları açılıyor. Aynı anda iki bilgisayarın enter tuşuna basabilecek imkanınız varsa deneyin çünkü benim bilgisayarlarda böyle oluyor.

Neyse çok uzatmayayım, herhalde randomize factorünü hala kavrayamadım...:)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

« First   ‹ Prev
1 2 3