RSS

Olasılık Çorapları – Mozart ve Oz Büyücüsü Üzerine Çeşitlemeler

20 Dec

Geçenlerde Bilgi Üniversitesi’nin Bilgisayar Bilimleri cs-discuss e-posta tartışma listesinde paylaştığım bir soruyu bloga da yazmak istedim. Soru bu aralar incelediğim bir kitaptan alınma [1] ve aynı zamanda bu aralar kurcaladığım Oz programlama dilini bir nebze tanıtma imkanı da suruyor:

“Bir çekmecede kırmızı çoraplar ve siyah çoraplar vardır. Gelişigüzel iki çorap çekildiğinde her ikisinin de kırmızı çıkma olasılığı 1/2’dir.

a- Çekmecede en az kaç çorap vardır?

b- Eğer siyah çorapların sayısı çift sayı ise o zaman toplamda en az kaç çorap olmalıdır?

c- Favori programlama dilinizi kullanarak yukarıdaki soruları cevaplayan kodu yazın ve paylaşın (programınız en az sayıdaki çorap çözümlerinin ötesinde genel olarak çözümleri de üretiyor olabilir bunları en küçükten başlayıp sıralayarak) [2].”

Kısıt koşul programlama (constraint programming) yapmamıza izin veren Oz programlama dili ile a şıkkını çözen kodu aşağıda görebilirsiniz [3]. Bu kodda çözümün açık olarak yazılmadığına, sadece ve sadece çözümün sağlaması gereken denklemin ifade edildiğine dikkat etmekte fayda var (söz konusu denklem: (Kırmızı / Toplam) * (Kırmızı – 1) / (Toplam – 1) = 1/2 denkleminin düzenlenmiş halidir). Kodun sonucunda ne cevap çıktığını yazmadım problem çözmeyi sevenlerin zevki kaçmasın diye (soru bir olasılık sorusu olarak çok zor bir soru değil).

//

declare
proc {SocksOfProbability Root}
  [Red Total] = Root
in
   Root ::: 1#100
   {FD.distinct Root}
   2 * Red * (Red - 1) =: Total * (Total - 1)
   {FD.distribute ff Root}
end
{Show {SearchAll SocksOfProbability}}

Şimdi ikinci koşulu da sağlayacak çözümlere bakalım, bunun için tek yapmamız gereken siyahları temsil eden Black değişkeninin Kırmızı çorapların ve Toplam çorapların sayısına nasıl bağlı olduğunu belirttikten sonra Siyah çorap sayısının çift olduğunu yani mod 2’ye göre 0 olduğunu sisteme söylemek:

declare
proc {SocksOfProbability Root}
  [Red Black Total] = Root
in
   Root ::: 1#100
   {FD.distinct Root}
   2 * Red * (Red - 1) =: Total * (Total - 1)
   Black =: Total - Red
   {FD.modI Black 2 0}
   {FD.distribute ff Root}
end
{Show {SearchAll SocksOfProbability}}

1- Fifty Challenging Problems in Probability

2- Tahmin edilebileceği gibi bu şık kitapta yok.

3- Oz programlama dilinin resmi web adresi: http://www.mozart-oz.org

Oz dilini ve Mozart programlama ortamını GNU/Linux, MS Windows ya da Solaris işletim sistemli makinanıza kolayca kurabilirsiniz. Mozart programlama ortamı, Oz dili ile zeki ve dağıtık uygulamalar geliştirmek için tasarlanmış ileri seviyeli bir yazılım geliştirme platformudur. Mozart Konsorsiyumu tarafından halen geliştirilmekte olan bu sistem şimdiye dek pek çok problemin çözümünde ve modelleme çalışmalarında kullanılmıştır.

Oz dili deklaratif, nesne yönelimli programlamayı desteklemenin yanı sıra kısıt koşul programlama ve eşzamanlı (concurrent) programlama imkanlarını da kolayca sunar. Karmaşık çıkarımlar veya optimizasyonlar yapmayı gerektiren dağıtık uygulamalar, network-şeffaf (network-transparent) sistemler geliştirmek için uygun bir programlama dilidir. Oz dili ile çok etmenli (multi-agent) sistemler, işbirliği araçları (collaborative tools), sayısal asistanlar, doğal dil işleme çözümleri, otomatik müzik besteleme sistemleri, bilgi temsil sistemleri, zaman tablolama ve yerleştirme (scheduling, time-tabling, in placement, configuration) sistemleri geliştirilmiştir.

Advertisements
 
1 Comment

Posted by on December 20, 2008 in General, Programlama

 

Tags:

One response to “Olasılık Çorapları – Mozart ve Oz Büyücüsü Üzerine Çeşitlemeler

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: