Qibla Finder version 0.1

Minggu lalu saya tiba-tiba pengen belajar javascript + Google Maps API, sebagai bahan latihan saya buat project sendiri, yaitu membuat aplikasi untuk mencari arah kiblat. Akan ada project2 selanjutnya yang ingin saya buat yang sepertinya bagus jika saya bisa menggunakan Google Maps API, hehe…

Ini dia Qibla Finder ver 0.1, semoga berguna: ridlo.github.io/islamic

Momen yang pas karena minggu ini adalah minggu kiblat, dan besok Matahari tepat berada di atas Ka’aba, hampir separo Bumi bisa menentukan arah Ka’aba secara bersamaan dari bayangan/arah Matahari besok (28 Mei) pada pukul 16.18 WIB (setahun terjadi dua kali: akan ada lagi pertengahan bulan Juli).

Jika anda (yang melihatnya.. *terharu) merasa aplikasi ini bagus dan berguna, bisa kasih komentar, terutama untuk perbaikan di versi selanjutnya.. terima kasih. hehe.. :D

kalau lagi bosen, mau main PingPong jg bisa ridlo.github.io/fireball6 :v

Credit icon: Arif Ridwan :D

An attempt to create a wedding site

Sekitar 2 bulan sebelum hari N… saya mencoba membuat website untuk acara ‘itu’. Niatnya sekalian belajar website lagi karena sudah lama sekali tidak mengikuti perkembangannya.. :D

Sebuah website untuk acara seperti ‘itu’ tentunya sederhana, sehingga cocok untuk latihan membuat website… :D
Dibuatlah sebuah website dengan tujuan belajar beberapa hal, antara lain:
– Framework: Flask (pertama kali)
– Style: Bootstrap (pertama kali)
– Deploy: Heroku (pertama kali)
Sebenarnya sudah lumayan ‘bener’, tapi masalah content dan visual jadi kendala (bukan anak desain.. hadeeeuu..). Berikutnya masalah waktu yang mepet sehingga akhirny di cancel saja. Jadi kalau anda merasa mual-mual saat melihatnya maklumlah ya karena memang web belum jadi dan tidak dijadikan.. :v

Hasil (nggak jadi): http://sulisridlo.herokuapp.com/

Dari keisengan ini jadi sedikit tahu perkembangan dunia website sekarang.. (ceileh.. hahah, dulu saya tahunya web ya PhP HTML CSS Jquery SQL), ternyata sekarang banyak framework bertebaran dari python, ruby, bahkan javascript, lalu untuk styling baru kenal ada bootstrap, SASS, dkk, dan di github bertebaran static site generator cem Jekyll dkk.. Banyak pilihan kadang membuat jadi bingung.. haha (malah curhat :v )

Ular Tangga dan Markov Chain

ulartanggaLS

Contoh Ular Tangga. Sumber: Langit Selatan

Suatu hari, entah kenapa baca-baca Markov Chain lagi (lupa). Lalu terbersit keinginan untuk mencoba hal yang mungkin sudah banyak dilakukan orang lain, yakni analisis sederhana permainan Ular Tangga menggunakan metode ini.

Apa itu permainan Ular Tangga?  Kayaknya waktu kecil semua anak pernah mencobanya, (kecuali anak suku pedalaman mungkin, hehe.. sedih…). Game ini ternyata berasal dari India lho… yang menggambarkan perjalanan hidup manusia yang dipenuhi baik (tangga) dan buruk (ular) — sifat manusia atau nasib yang dialaminya. Permainan ini memiliki beberapa versi yang berbeda, misalnya:

  • Aturan mulai: dari 0 (luar kotak) atau 1.
  • Jumlah kotak (biasanya tidak lebih dari 100).
  • Jumlah ular dan tangga serta posisinya.
  • Aturan di akhir ketika nilai dadunya melebihi posisi akhir, bisa digenapkan atau balik arah (sepertinya kebanyakan balik arah).
  • Jika pemain berada pada kotak yang sama apakah akan nge’kick’ pemain sebelumnya.
  • Jika pemain memperoleh angka 6 maka ia dapat giliran tambahan. (*tambahan dari @Lorenz VG)

Untuk menganalisis permainan ini tentu kita dapat melakukan penyederhanaan, misalnya menghilangkan dua aturan terakhir di atas sehingga kita cukup menggunakan SATU pemain dalam percobaan. Dalam permainan lebih dari satu orang tentu dua aturan terakhir berpengaruh pada rata-rata lama permainan.

Objectivist vs Bayesian pergi ke tukang urut (eh salah, ke bar maksudnya..)
Setiap analisis dari sebuah proses stochastic (bahasa keren dari sebuah proses yang melibatkan variabel random.. muhaha) terdapat dua pandangan besar, yakni: (1) Objective approach (2) Subjective approach.

1. Objective approach (Experimentation)
Bahasanya sok keren tapi sebenarnya sederhana, penyelesaian dengan pendekatan ini artinya kita mencoba mengulangi proses berkali-kali (sebanyak mungkin) sehingga akan kita peroleh distribusi probabilitas yang kita cari (montecarlo). Contoh dalam kasus permainan ular tangga, untuk mendapatkan lama rata-rata sebuah permainan kita coba saja jutaan kali sehingga kita peroleh berapa peluang menyelesaikan permainan sebagai fungsi dari jumlah lemparan. :D

Berikut saya coba mainkan ular tangga di atas (1 pemain, mulai dari kotak 1) dan memperoleh hasil sebagai berikut:
dist_cdf_monteDari survei terbesar (1 juta kali permainan) menghasilkan:
Rekor permainan terlama: 221 kali lempar dadu.
Permainan tercepat: 7 kali lempar dadu.
Mode: 28 kali lempar dadu — kejadian paling banyak 1 pemain menyelesaikan permainan
Median: 34 kali lempar dadu — jumlah kemenangan dengan 34 kali lempar dadu.
(arithmatic) Mean: 37.78 kali lempar dadu — terjadi 37786740 kali lempar dadu dalam 1 juta permainan.

Simulasi monte carlo ini memiliki kelemahan apabila kita tidak hati-hati, (1) terdapat kemungkinan iterasi yang tidak berhenti atau sangat lama berhentinya, walaupun kemungkinan nya sangat kecil, jadi tetap berilah batasan maksimum iterasi (jumlah lemparan dadu), (2) mungkin generator randomnya tidak ada yang benar-benar random.

2. Subjective approach (Formal modelling) – Markov Chain
Berikutnya kita akan menggunakan Markov Chain untuk menganalisis berapa rata-rata lama sebuah permainan Ular Tangga seperti di atas. Permainan Ular Tangga adalah contoh kasus sederhana dari Markov Chain, sebuah proses dimana state selanjutnya hanya ditentukan oleh state saat itu dan sebuah probabilitas.

Seperti contoh kasus sederhana tentang langit hujan dan cerah

Peluang besok cerah jika hari ini cerah = 0.9
Peluang besok hujan jika hari ini cerah = 0.1
Peluang besok cerah jika hari ini hujan = 0.5
Peluang besok hujan jika hari ini hujan = 0.5
Sistem di atas dapat dituliskan dalam sebuah matriks transisi (transition matrix):

Prediksi cuaca: Jika diketahui hari ini cerah, maka kita bisa menghitung berapa peluang cuaca untuk besok, lusa dan seterusnya:
Hari ini cerah:

Prediksi untuk besok:

Prediksi untuk lusa:

General rule:
  atau 

Steady state:
 Prediksi cuaca untuk hari (state) yang lebih jauh tentu akan semakin tidak akurat, dan cenderung menuju ke steady state vector. Vektor ini menggambarkan probabilitas cerah atau hujan untuk setiap hari, bebas dari cuaca awal yang diberikan.

Permasalahannya akan berubah menjadi permasalahan eigenvector dari matriks transisi. Untuk kasus di atas akan kita peroleh:

artinya, untuk jangka panjang, diberikan sistem seperti di atas, dapat disimpulkan probabilitas cerah adalah 0.833 dan probabilitas hujan adalah 0.167.

Kembali ke papan ”Roket dan Meteor”, seorang pemain bisa berada di kotak mana saja, kita tidak peduli bagaimana ia sampai di sana, namun untuk pindah ke kotak selanjutnya ia hanya perlu melempar dadu dan berpindah sesuai nilai dadu yang ia dapat. Misal ia di kotak X, maka peluang selanjutnya ia berada di kotak X+1, X+2, X+3, X+4, X+5, X+6 masing-masing adalah 1/6. Jika ada tangga di kotak X+2 menuju X+20, maka peluang ke kotak X+2 adalah 0 dan peluang ke kotak X+20 menjadi 1/6.

awal_transitionM

akhir_transitionM

Kita bisa membangun matriks transisi dengan cara seperti ini sehingga akan kita peroleh matriks dengan ukuran 100 x 100. Kerumitan dan hal menarik terjadi karena ada ular-tangga dan bagian akhir dari papan (6 kotak terakhir). Untuk mempercepat komputasi kita dapat mengurangi ukuran matriks transisi dengan mengabaikan kotak “bawah tangga” dan kotak “kepala ular”, sehingga dalam kasus ini matriks transisinya menjadi berukuran 88 x 88.

Setelah memperoleh matriks transisi — markov chain, kita dapat membuat vektor state awal, dalam hal ini berupa vektor baris (1 x 88), berisi “1” pada kolom pertama dan “0” pada kolom yang lain (pada saat mulai, semua ada di kotak 1). Kita dapat langsung menghitung probabilitas menyelesaikan permainan pada setiap lemparan dadu dengan melihat nilai terakhir pada state vector (– kotak terakhir: 100). Probabilitas tidak nol muncul pertama setelah lemparan ke-7 (Coba cari contohny!).

Hasil yang sangat mirip antara Monte Carlo dan Markov Chain dapat dilihat pada gambar di bawah. Hasil dari dua cara yang sangat berbeda ini juga menunjukkan bahwa program yang dibuat berjalan dengan benar.. :P (semoga, haha)
dist_cdf_markov_monte
Sebaran probabilitas setiap lemparan dari metode Markov Chain dapat dilihat kembali dengan mengubah vector state menjadi papan permainan. Berikut hasil animasinya untuk probabilitas relatif tiap lemparan (tidak ternormalisasi).
outplot

-_-

Referensi:
http://en.wikipedia.org/wiki/Markov_chain
http://en.wikipedia.org/wiki/Examples_of_Markov_chains
http://www.datagenetics.com/blog/november12011/

Mandelbrot set (fractal) in python

Iseng ngerjain exercise, he..

Mandelbrot set itu apa? Set dari bilangan kompleks c yang kalau diurutkan menjadi (c, c^2 + c, (c^2+c)^2 + c, ((c^2 + c)^2 + c)^2 + c, \ldots ) tidak akan mencapai infinit. :D

Dalam perhitungan dapat di tulis: z_{n} = z_{n}^2 + c .

import numpy as np
import matplotlib.pyplot as plt

def mandelbrot(N_max, threshold, nx, ny):
    # a grid of c-values
    x = np.linspace(-4, 4, nx)
    y = np.linspace(-4, 4, ny)

    c = x[:,np.newaxis] + 1j*y[np.newaxis,:] # Initial complex set

    # iteration
    z = c
    for j in xrange(N_max):
        z = z**2 + c

    mandelbrot_set = (abs(z) < threshold)

    return mandelbrot_set

# let's iterate over N_max
for i in xrange(30):
    mandelbrot_set = mandelbrot(i, 50., 401, 401)
    plt.imshow(mandelbrot_set.T, extent=[-4, 4, -4, 4])
    plt.gray()
    plt.savefig('mandelbrot_'+str(i)+'.png')

N_max = 6
mandelbrot_6

N_max = 25
mandelbrot_25

Ayo ubah jadi gif, hehe

 convert -delay 10 $(ls -v mandelbrot_*.png) output.gif 

output

Python for Scientist (mathematics, science, and engineering)

Learning Resources

Tutorial

Book

  • Python Scripting for Computational Science – Hans Petter Langtangen

Ipython notebook

of course by default: Google and Stackoverflow

Important Packages

Intergrated python packages

Specific Fields
Astronomy & Astrophysics

  • Astropy –  a community python library for astronomy
  • Ureka – a collection of useful astronomy software that is generally centered around Python and IRAF

 Please add more in comment!