Algoritma dan Kita

Algoritma mungkin terdengar seperti monopoli orang-orang IT, dalam artikel ini saya sedikit bercerita tentang algoritma ini, sejarahnya dan bagaimana algoritma ini mengubah dunia dan kita, sejak ribuan tahun yang lalu. Dan bagaimana kita sehari-hari telah menggunakan algoritma secara tidak sadar.

Saat ini hampir seluruh system menggunakan komputer, dari handphone, mobil, mesin cuci, bahkan sentral komunikasi. Komputer sendiri kalau di bongkar isinya tidak macam-macam, umumnya CPU, memory, storage dan I/O. Yang membuat komputer dapat melakukan bermacam-macam hal tentu semua juga tahu yaitu software-nya. Seringkali hardware yang sama dapat melakukan hal yang berbeda apabila memiliki software yang berbeda. Contohnya laptop kita walaupun hardware nya sama, bisa jadi sebagai mesin windows ataupun mesin Linux. Bahkan saat ini muncul teknologi software defined radio, software defined network, dll.

Jika kita korek lebih dalam lagi, umumnya software ini dibagun dari blok-blok yang kita sebut dengan algoritma. Apakah itu algoritma? Algoritma adalah suatu spesifikasi pasti untuk menyelesaikan suatu tipe masalah. Contohnya yang sering dipelajari orang di bidang komputer adalah algoritma sorting, atau mengurutkan. Dengan mengikuti langkah-langkah pasti dalam algoritma, komputer dapat mengurutkan suatu bilangan, tentu dengan kecepatan komputer, yang artinya cepat sekali.

Algoritma ini menyentuh sisi-sisi kehidupan kita paling dalam. Misalnya Google membangun algoritma PageRank untuk memberikan peringkat terhadap berbagai website yang kita cari melalui google. Kemudian algoritma MapReduce yang digunakan untuk mengelola data dalam ukuran besar yang disebut BigData, sehingga memungkinkan ribuan komputer bekerja secara parallel. Dan masih banyak lagi algoritma yang sudah dibuat untuk menyelesaikan berbagai masalah di dunia ini.

Algoritma ini menarik, karena ini adalah tools yang membantu kita dalam memecahkan masalah. Kita cukup berikan data-data yang dibutuhkan, viola, hasilnya keluar dengan ajaib. Misalnya contoh algoritma pengurutan di atas, kita berikan sekumpulan angka-angka, viola, angka-angka tersebut keluar dalam bentuk sudah diurutkan. Suatu alat yang sangat luar biasa. Dan hebatnya lagi, komputer membuatnya ter-eksekusi dengan sangat cepat dan akurat.

Algoritma sendiri sebenarnya bukan ekslusif milik orang IT, bahkan ribuan tahun yang lalu, manusia sudah membuat algoritma. Salah satu algoritma yang tertua di dunia adalah algoritma untuk mencari bilangan prima oleh Erasthosthenes, seorang ahli matematika, yang berhasil memperkirakan diameter bumi dengan sangat akurat.

Kira-kira begini lah algoritma Erasthosthenes dalam mencari bilangan prima :

  1. Create a list of consecutive integers from 2 through n: (2, 3, 4, …, n).
  2. Initially, let pequal 2, the smallest prime number.
  3. Enumerate the multiples of pby counting to n from 2p in increments of p, and mark them in the list (these will be 2p, 3p, 4p, …; the p itself should not be marked).
  4. Find the first number greater than pin the list that is not marked. If there was no such number, stop. Otherwise, let pnow equal this new number (which is the next prime), and repeat from step 3.
  5. When the algorithm terminates, the numbers remaining not marked in the list are all the primes below n.

Tidak perlu di mengerti, algoritma diatas, karena saya juga pusing. Tetapi dengan mengikuti 5 langkah yang ditunjukkan oleh Erasthosthenes, seseorang dengan mudah menemukan bilangan prima dari 2 hingga bilangan yang diinginkan. Ajaib kan?

Algoritma sendiri namanya bisa dilacak dari buku dengan judul Algoritmi de numero Indorum suatu buku terjemahan bahasa latin, yang apabila diartikan adalah Algoritmi, tentang angka India. Algoritmi adalah seorang ahli matematika, geografi dan astronomi dari Persia. Algoritmi sendiri di tempat aslinya dikenal dengan nama Al-Khwarizmi. Dalam buku itu ia menjelaskan cara menggunakan angka india, atau angka yang kita kenal saat ini, yang memang berasal dari India, walaupun lebih kita kenal sebagai angka Arab.

Buku Algoritmi de numero Indorum ini sangat berpengaruh di akhir jaman pertengahan di eropa, menjadi buku matematika yang paling banyak di baca pada saat itu. Buku ini merupakan revolusi di eropa, dan saya menyakini hal ini pula-lah yang mendorong budaya arab maju dengan sangat pesat. Buku ini mengajarkan suatu system bilangan, dimana posisi bilangan tersebut berada menentukan nilainya.

Misalkan angka 1 di angka 100 dan 1000 memiliki nilai yang berbeda. Mungkin sangat sulit bagi kita untuk menghargai system ini, karena sejak saya lahir, angka memang begitu. Tetapi di jaman dahulu hal ini merupakan terobosan, karena memungkinkan angka yang berjumlah 10, 0 – 9 dapat di re-use untuk menuliskan berapapun. Bandingkan dengan tulisan romawi kuno, yang memiliki notasi yang berbeda untuk angka 100 C dan angka 1000 M. Pengguna dari system bilangan ini dikenal dengan nama algorism.

Sehingga jika kita berpikir bahwa algoritma adalah sesuatu yang wah, sebenarnya sehari-hari kita sudah menggunakan algoritma dalam memodelkan bilangan. Algoritma dalam pemodelan bilangan ini ternyata sangat efisien dalam membangun algoritma-algoritma yang lain, misalnya penambahan, pengurangan, perkalian dan pembagian, juga merupakan algoritma. Hal ini terasa sangat mudah untuk saat ini, cukup dengan pensil dan kertas, kita bisa menyelesaikannya. Tetapi coba bayangkan betapa sulitnya untuk melakukan perhitungan 43 + 23 apabila kita menggunakan angka romawi. Oleh karena itu pada jaman romawi dan cina kuno, orang-orang menggunakan abacus, atau yang dikenal juga dengan sipoa, kemudian mengkonversi kembali menjadi angka romawi. Ini juga yang menyebabkan aliran angka di eropa saat itu terpecah menjadi dua, aliran algoritmi yang dikenal dengan algorism dan aliran abacus yang dikenal dengan abacist.

abacus

Abacus, alat untuk membantu perhitungan

Menurut pendapat saya, matematika merupakan salah satu dari berbagai disiplin ilmu yang berisi berbagai algoritma. Algoritma untuk aritmatika, algoritma untuk menghitung probabilitas, algoritma menghitung statistic, algoritma untuk menghitung pertumbuhan, algoritma untuk menghitung multi variable.

Dari contoh-contoh diatas, tampak bagaimana algoritma ini membantu manusia menyelesaikan permasalahan-permasalahan pelik dan melelahkan menjadi masalah yang relatif lebih mudah. Algoritma sendiri terus berkembang, mulai dari cara mencari bilangan prima, pemodelan angka, aritmatika, pembukuan, hingga menghitung lintasan orbit planet, semua kehidupan kita sebenarnya dibantu, bahkan diatur oleh algoritma ini

Algoritma akan terus berkembang, dan dengan kreatifitas kita dapat memanfaatkan algoritma yang sudah tersedia untuk menyelesaikan masalah kita sehari-hari dengan efektif dan efisien. Seperti menghitung investasi, menentukan harga produk, memperkirakan ETA, mengelola projek, menghitung TCO, pengambilan keputusan, pembukuan dll.

Satu hal menurut saya yang menyebabkan kita tidak tertarik dengan algoritma, kita tidak melihat korelasinya dengan dunia nyata, kita melihatnya hanya sebagai latihan akademis. Padahal sedikit saja kreativitas, kita bisa mendapatkan tools yang berharga secara gratis.

Algoritma telah mengubah dunia, dan ke depannya akan terus mengubah dunia. Gojek, Google, Toko Online, Mobil Otonom, Bitcoin. Kita sebaiknya juga jangan ketinggalan untuk belajar berbagai Algoritma.

Advertisements

Bilangan Imajiner

euler-identity

euler identity

Bilangan imajiner ini melengkapai sistem bilangan yang kita miliki. Sedikit ajaib, tetapi penting untuk dunia. Sejarah bilangan dimulai dengan bilangan bulat positif, karena ini bilangan yang paling nyata. Kemudian muncul bilangan negatif, ini sudah lebih abstrak, tapi cukup masuk akal. Tetapi manusia masih kehilangan angka nol, karena cukup sulit juga mengerti angka yang artinya tidak ada. Tetapi akhirnya manusia memiliki angka nol. Banyak sekali permasalahan yang bisa di selesaikan oleh angka nol. Bayangkan hidup kita tanpa angka nol.

Sejarah terus bergulir, manusia pun mulai mengenal pecahan, 1/2, 1/3 dst. Ini pun sangat penting, kemudian ini pun belum cukup Hipasus menemukan bahwa akar 2 ini bukanlah bilangan pecahan atau bilangan rasional, maka munculah bilangan irasional. Peradaban manusia pun tumbuh dengan cepat dengan angka-angka ini, kita mlihat kebudayaan Yunani, Romawi, Arab, hingga renaisans yang tidak terlepas dari penggunaan angka-angka ini.

Dan seterusnya manusia hidup tanpa bilangan imajiner selama bertahun-tahun, tidak ada masalah yang berarti. Hidup pun terus berjalan

Kemudian di sekitar abad ke-16 ada seseorang yang memiliki ide bilangan imajiner dimana i2=1. Akan tetapi bilangan imajiner ini mendapatkan penolakan di masyarakan abad 18, seperti kita saat ini, menganggap bilangan imajiner ini bilangan yang tidak berguna dan hanya menyusahkan hidup kita dengan matematika. Ahli-ahli saat itu mengabaikan bilangan imajiner ini.

Perlu orang hebat seperti Euler untuk menyadari peran bilangan imajiner ini. Dengan formula Euler, beliau menemukan hubungan antara bilangan e (2.718..) dengan bilangan imajiner dan trigonometri. Salah satu formula paling penting di dunia matematika. Kira-kira bentuk formulanya seperti ini:

eix = cos(x) + i sin(x)

Jika melihat bentuknya kita akan tercengang, bagaimana mungkin 5 notasi aneh, cos, sin, x, e dan i berada pada satu persamaan. Dan bagaimana membuktikannya?

Jika anda merasa aneh, jangan kuatir kami di Teknik Elektro jiwa, raga dan harga diri kami habis akibat persamaan ini. Putera-puteri terbaik bangsa dengan jiwa yang murni di hantam oleh turunan persamaan ini melalui kuliah medan dan sistem kendali. Beberapa dari kami tidak bertahan, dan mayoritas dari kami masih bersyukur bisa melewati cobaan ini, dan sampai sekarang masih tidak percaya bisa melaluinya. Mungkin ini juga penyebab lulusan Elektro banyak yang masuk ke IT, walaupun sulit masih lebih manusiawi, seperti oase di padang pasir. Atau bahkan ke perbankan dan keuangan, seperti di taman firdaus.

Tetapi sisi positifnya, dunia matematika dan ilmu pengetahuan pun memiliki amunisi baru. Formula Euler ini menjadi rantai yang hilang antara kalkulus, aljabar dan trigonometri, menjadi jembatan antara berbagai kekuatan besar matematika. Bilangan Imajiner ini melengkapi himpunan bilangan yang dimiliki matematika. Bilangan imajiner ini seperti sejarah planet uranus, dicurigai dahulu keberadaanya karena ada anomaly orbit planet, baru kemudian ditemukan.

Bilangan ini ditemukan tidak seperti bilangan lainnya, dia ditemukan secara tidak langsung, melalui pendekatan teori limit. Sehingga kita akan selalu terheran-heran dengan relasi ini. Tetapi itulah hebatnya formula Euler, meskipun ditemukan dengan teori limit, tetapi hasil yang konsisten di dapatkan melalui teori deret dan teori yang lainnya. Ahli matematika yang biasanya tidak mudah percaya, bahkan meminta bukti terhadap sesuatu yang sudah jelas pun menerimanya. Seolah mengukuhkan formula Euler pada tempat khusus di dunia matematika, suatu kebenaran layaknya hukum Phythagoras.

Dunia tidak pernah sama lagi sejak kemunculan bilangan imajiner dan Formula Euler. Muncullah Teori gelombang, untuk mempelajari getaran dawai musik, yang ternyata menjadi landasan penjelasan fenomena gelombang dan getaran. Fourier Transform yang menjebatani antara domain waktu dan domain frekuensi, yang memungkinkan manusia untuk melihat dunia dengan cara yang sama sekali baru, manifestasinya adalah kompresi JPEG yang sering kita gunakan. Maxwell dengan teori gelombang elektromagnetik yang merevolusi dunia komunikasi, Sistem kendali yang memungkinkan pembuatan mesin yang lebih akurat dan efisien dan masih banyak lagi di era fisika modern.

Sulit sekali membayangkan peradaban modern tanpa kehadiran angka i, tanpaknya lanskap dunia akan berbeda sangat jauh.

Mungkin inilah mengapa ia disebut bilangan imajiner, bilangan yang dihasilkan oleh imajinasi dan digunakan untuk memfasilitasi imajinasi kita yang seringkali sangat terbatas terhadap angka.

Jadi ketika seseorang yang lebih muda, bertanya, kita bisa menjelaskan bahwa bilangan imajiner ini nyata.

Bilangan Perubahan

Perubahan adalah fenomena sehari-hari yang kita hadapi. Bahkan ada yang mengatakan bahwa sesuatu yang tetap adalah perubahan itu sendiri. Sehingga sangat menarik jika kita bisa sedikit memahami karakteristik perubahan itu, apalagi jika sudah dalam bentuk angka, kita bahkan dapat mengendalikan perubahan.

Pembahasan ini akan mempertemukan kita pada salah satu bilangan ajaib, yang mistik yang dalam matematika sering disebut dengan bilangan transedental. Trasedental sendiri dalam arti umumnya adalah bersifat spiritual atau non fisik. Bilangan tersebut adalah bilangan mistis untuk kita kaum awam yaitu e. Benar bilangan e yang kita tidak tahu gunanya dan selalu ada di kakulator scientific, yang kalau di pencet muncul angka 2.718….

Oke, segala sesuatu adalah perubahan, apakah bisa diberi satu contoh saja yang riil? Kita beri satu contoh ya. Misalnya kita ber-investasi pada suatu perangkat investasi, yang memberikan imbal balik 100% selama setahun, dari 1 jt menjadi 2 jt dalam setahun. Tapi bagaimana jika kita minta bagi hasilnya setiap 6 bulan masing-masing 50%, ternyata di 6 bulan pertama kita mendapatkan 500k dan di 6 bulan kedua kita medapatkan 750k. Secara total kita mendapatkan 2.25x dari investasi yang sama. Wah bagaimana kalau demikian kita bagi per 3 bulan saja, atau 1 bulan, atau tiap hari atau bahkan tiap detik? Bisa jadi investasi kita bernilai tak terhingga. Pertanyaan yang sama sudah menggelitik Bapak Jacob Bernoulli, ternyata imbal baliknya, bukan tak terhingga, tapi mendekati 2.718.. yang kita sebut dengan e yang mistis tadi.

Investasi adalah salah satu contoh perubahan, contoh lainnya adalah lift, KRL,pengalaman, tabungan emosi, wabah, kecepatan cpu, harga minyak, harga cabe. Terus apa hubungannya dengan bilangan e?

Dalam matematika perubahan ini dimodelkan (asal tahu saja) oleh dy/dt artinya perubahan y terhadap waktu. Contoh klasik adalah kecepatan adalah perubahan posisi(s) terhadap waktu atau ds/dt. Contoh lain yang sering digunakan oleh manajemen adalah akselerasi, dalam matematika akselerasi adalah perubahan kecepatan terhadap waktu, atau dv/dt. Jadi akselerasi adalah turunan kedua dari s, a = d²s/dt². Jangan stress dulu ini bukan kuliah kalkulus kok, Jadi ini tidak wajib. Jadi apa hubungannya dengan harga cabe? Atau investasi saya? Kita mulai dengan yang sederhana dulu seperti investasi.

Menariknya, persamaan diferensial yang merupakan model dinamis seperti contoh diatas, solusi homogennya selalu kombinasi est dimana s ini dapat berupa bilangan riil maupun imajiner. misalnya e 0.5t . Artinya segala hal yang bersifat perubahan sifatnya selalu eksponensial, entah itu eksponesial naik, eksponensial menurun atau exponensial dengan umpan balik, hanya berbeda pada kecepatan perubahannya, atau istilah kerennya konstanta waktu. Tentu angkanya bisa bermacam-macam dan turunannya bisa sampai orde 3 atau orde 4 atau lebih. Tapi untuk pembahasan kita, kita sederhanakan.

Berikut ini adalah contoh-contoh kurva kombinasi berbagai eksponen. Eksponen naik, eksponen turun dan eksponen dengan feedback (sumber wikipedia)

Contohnya kalau kita naik KRL kecepatannya naik eksponensial hingga steady state, begitu pula sebaliknya. Kipas angin, lift, epidemi, viral, ayunan, gelombang radio, pergerakan planet, kenaikan suhu kamar, peredaran narkoba, pembelahan bakteri dan segala sesuatu yang menyimpan energi dan informasi berubah secara exponensial, dengan model seperti gambar di atas.

Dan dari karakteristik inilah para insinyur merancang sistem yang lebih akurat, seperti lift, frekuensi radio, KRL perlambatannya lebih nyaman melalu mekanisme umpan balik.

Kemudian apakah yang bisa kita pelajari dari persamaan diferensial dan solusinya yang bersifat eksponensial?

  1. Bilangan e di kalkulator ini ternyata ada gunanya, inti dari perubahan, perannya seperti angka 1 dalam aljabar.
  2. Kita harus sabar, karena namanya perubahan tidak bisa instan, bahkan pertumbuhan eksponensial pun awalnya perlahan.
  3. Easy come easy go, karena eksponensial naik kemungkinan besar sistem yang sama, eksponensial turun.
  4. Kalau kita tidak membaik artinya kita memburuk dan itu secara eksponensial.
  5. Kalau kadang-kadang mengalami kemunduran atau kemacetan tidak apa-apa, yang penting sehari-hari kita konsisten membaik.

Pemodelan Lengan Robot

Weekend Project kali ini membuat lengan robot. Dari sejak kecil, robot selalu menyenangkan. Tetapi karena membuat secara fisik sulit dan mahal, saya buat modelnya saja pakai angka-angka saja. Ternyata cukup menantang, seru dan gratis. Ga gratis-gratis banget sih, mikirin matrix nya di cafe, jadi habis kopi dan tape keju. Robot yang akan di modelkan juga bukan utuh, tp lengannya saja, tp walaupun lengannya saja, ukurannya bisa segede manusia dewasa 😁

Supaya mudah, saya cari saja dimensi nya di internet, cukup menarik welding robot Panasonic VR006. Saat robot ini beraksi, bisa di lihat di link video tadi. Dimensinya cukup lengkap, bisa di lihat di gambar di bawah ini.

Dengan pemodelan ini, kita bisa mengetahui posisi tepat masing-masing lengan robot, jika kita memberikan sudut pada masing-masing persendian. Dengan mengetahui posisi tepat masing-masing persendian, kita bisa melakukan visualisasi posisi lengan robot ini.

Pemodelan ini menggunakan konvensi dari Denavit-Hartenberg, agar pemodelan lengan robot menjadi mudah. Yang kira-kira setiap sendi dan lengan robot di modelkan menjadi matrix transformasi 4×4. Yang sebenarnya berisi 3 x 3 matrix Rotasional dan 1 x 3 matrix translasi atau pergeseran, sisanya padding saja. Ini contoh transformation matrix untuk 4 Persendian.

transformation-matrix

Memang sedikit challenging ketika melakukan pemodelannya, tetapi saat matrix modelnya jadi, keajaiban terjadi, untuk “menggerakkan” robot ini jadi mudah. kita cukup memasukkan parameter-parameter sudut, angka-angka ini bekerjasama untuk menentukan posisi-posisi yang tepat. Bahasa kerennya kinematika.

Hal seru berikutnya adalah dengan model matematika, ukuran robot yang besar juga tidak masalah, cukup masukkan saja angka-angkanya.

Untuk pemodelan kali ini saya gunakan bahasa pemrograman Python, karena library plotting 3D dan matematikanya cukup sederhana.

Kira-kira begini lah hasil plotting berbagai posisi robot ini secara 3 dimensi.

Rencananya “robot” ini akan di jalankan untuk berbagai sudut sendi yang mungkin, untuk melihat jangkauan robot ini. Harapannya dengan mengetahui mapping ini, sang robot bisa lebih cerdas, tidak perlu lagi diatur sudutnya, tapi diberi tahu saja posisi yang kita inginkan, dia yang mengatur sendiri sudut yang diinginkan.

Tetapi tentu challenge nya lebih banyak, karena mappingnya bisa jadi lebih dari satu. Tapi cukup menarik untuk di coba.

Pertanyaan standar apa gunanya lengan robot? Kalau ini mestinya banyak ya untuk di industri biasanya proses manufaktur dan mangangkat barang.

Tapi kalau cukup murah, mungkin bisa digunakan untuk memasak, cuci mobil, jemur baju dll. Sehingga kita bisa lebih santai nyruput kopi dan bikin robot yang lain.

Mata Digital

Saya ingin mengajak bertualang dengan mata digital, kita akan mencoba seru-seruan dengan kamera hand-phone. Contohnya ini, Tapi akan kita runut satu-satu. Kita deteksi batu yang kecil itu dengan lingkaran merah, kelihatan kan.

Teman-teman pernah makan batu? Saya yakin pernah, tentu tidak sengaja terselip diantara nasi. Rasanya sebal banget-nget. Nah kita akan mencoba mendeteksi batu di dalam beras.

Kalau di cari di youtube Rice How it’s made di 3:15 – 3:30 menggunakan laser scanner untuk memfilter, beras yang berwarna cokelat. Kita gunakan prinsip yang mirip untuk mencari batu, tapi pakai kamera saja. Coba bayangkan kalau berasnya banyak, bisa jereng kan kalau pakai mata.

Tentu namanya seru-seruan ini tidak production ready, dan belum real-time.

Software yang kita gunakan adalah OpenCV, platform Computer Vision gratis dari Intel. Dan programming menggunakan python. Sederhana Setup nya, dan sangat cepat.

Fitur yang kita gunakan adalah Blob Detection. Karena saya masih belajar, saya buatkan saja blob pakai ms-paint, kira-kira begini:

Gambar 1

Kemudian browsing sebentar, copy-paste effortless langsung ke detect:

wah jadi pede nih detect batu pasti bisa, ini gambar aslinya:

small-rock

Gambar 2

Ternyata kontrasnya beda, dan akibat kompresi warna tidak rata, percobaan pertama tidak terdeteksi apa-apa, kemudian semua filter di off kan, ke deteksi banyakk banget, gambar 3 sebelah kiri. Akhirnya ada settingan yang lumayan pas, tp masih banyak false detection, gambar 3 sebelah kanan, titik merah kecil ada beberapa, tidak terlalu kelihatan.

Gambar 3

Wah tampaknya gambarnya harus di haluskan dahulu. Tapi itulah nikmatnya opencv, sudah tersedia semua. Gunakan gaussian filter.

Voila, hasilnya si batu terdeteksi seperti di atas:

Gambar 5

Lumayan lah untuk percobaan beberapa jam. Beberapa yang mejadi catatan saya tentang computer vision:

  • Mata digital apabila dapat dikondisikan, proses deteksi jadi mudah dan efisien. Semisal diatas kita gunakan background warna putih dengan pencahayaan cukup
  • Menggunakan modul opencv, development menjadi cepat, prosesing juga cepat
  • Mata Digital bisa dikembangkan untuk berbagai keperluan sederhana : Menghitung orang, deteksi kebakaran, mencari batu, dll

Dan ini source-code nya sangat sederhana, yang mana 95% nya saya copas dari Internet, supaya teman-teman tidak terintimidasi dengan hasilnya.

# Standard imports
import cv2
import numpy as np;
# Read image
img = cv2.imread("small-rock.jpg", cv2.IMREAD_GRAYSCALE)
im = cv2.GaussianBlur(img,(5,5),0)
# Setup SimpleBlobDetector parameters.
params = cv2.SimpleBlobDetector_Params()
# Change thresholds
params.minThreshold = 0;
params.maxThreshold = 150;
# Filter by Area.
params.filterByArea = False
params.minArea = 1500
# Filter by Circularity
params.filterByCircularity = False
# Filter by Convexity
params.filterByConvexity = False
# Filter by Inertia
params.filterByInertia = False
# Set up the detector with default parameters.
detector = cv2.SimpleBlobDetector_create(params)
# Detect blobs.
keypoints = detector.detect(im)
# Draw detected blobs as red circles.
# cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS ensures the size of the circle corresponds to the size of blob
im_with_keypoints = cv2.drawKeypoints(im, keypoints, np.array([]), (0,0,255), cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

# Show keypoints
cv2.imshow("Keypoints", im_with_keypoints)
cv2.waitKey(0)

Terimakasih sudah mampir, next percobaan kita test pakai realtime capture yaa, kalau sempat.

Matematika Pemindai Laser

Pasti dong pernah lihat alat untuk mengukur jarak dengan laser. Menurut saya alat ini keren sekali, walaupun belum pernah pegang, karena bisa mengukur jarak tanpa penggaris, tali ataupun kilan. Mengukur tanpa menyentuh, tp dengan perhitungan matematis.
Teori yang mendasari adalah triangulasi, dimana kamera dan sinar laser membentuk sudut terhadap jarak benda yang di ukur. Akibatnya posisi titik laser pada gambar yang dihasilkan kamera, akan berkorelasi dengan jarak benda, walaupun tidak linear. Set up nya cukup sederhana, seperti Gambar 1. Kalau dari teori nya, akurasinya bisa tinggi sekali.
Laser Ranging
Pada blog ini kita dengan modal laser seharga Rp 12.000 dan Kamera Handphone, akan mencoba melakukan triangulasi. Tentu dengan akurasi yang rendah, tp sebagai proof of concept, perhitungan matematis walaupun virtual, fungsinya nyata.
Pada percobaan ini, dengan alat seadanya, laser diletakkan berjarak 70 cm dari dinding. kamera di letakkan sekitar 35 cm di samping kiri laser, sehingga membentuk sudut sekitar 30 derajat. Kamera di cepit buku, supaya bisa berdiri, dudukan laser menggunakan boneka teddy bear. Penghalangnya digunakan koper kosong.

Untuk menggambil gambar digunakan mode video fullHD dan jarak koper dibuat 30cm, kemudian 50 cm. Terakhir koper ditarik, jadi langsung ke tembok.

snapshot gambarnya kira-kira seperti ini:

Dari gambarnya tampak jelas, bahwa perubahan posisi koper mempengaruhi posisi horisontal titik laser, vertikal kita abaikan dulu :).
Tadinya mau cari rumus matematikanya, tp ribet ah, pakai look up table saja.
Menggunakan software octav kita bisa mencari posisi dot ini dengan algoritma yang sederhana. Cari saja posisi pixel yangbpaling terang, artinya nilainya yang paling besar, kemudian tandai dengan garis putih.
Hasilnya diperoleh posisi pixel masing-masing dot, garis putih hanya untuk membantu kita saja, komputer sih nggak butuh.
Berikut ini posisi pixel nya dan gambar hasil ditandai.
Gambarnya hilang satu, lupa di upload
Supaya lebih mudah, kita sudah konsolidasikan posisi titik-titik ini dalam satu gambar.
Konsolidated-Dot
Posisi Pixel nya sebagai berikut:

x1 =  1631 (30 cm)

x2 =  1273 (50 cm)

x2 =  1071 (70 cm gambar tembok)

Saat ini sudah tersedia laser yang bentuknya bukan titik, tp garis, yang memungkinkan scanning lebih efisien.
Laser tampaknya ke depannya bisa membantu mata kita melakukan pemetaan lingkungan kita.
Amazing kan, dengan matematika kita bisa membuat hal-hal yang abstrak jadi nyata.

Pemodelan Galton Board dengan Matrix

Long Weekend ini punya ide untuk memodelkan Galton Board dengan Matrix. Pastinya sudah ada yang melakukan pemodelan. Tetapi memodelkan sendiri itu sesuatu banget, apalagi Galton Board ini punya kesan tersendiri buat saya.

Insightnya

Untuk yang belum pernah Galton Board,  bisa lihat videonya di link ini Galton-Board.

Galton Board ini secara pribadi menggelitik saya, bagaimana biji-bijian yang dijatuhkan secara acak, walaupun kita tidak tahu ke mana biji-biji ini jatuh, tetapi secara keseluruhan kita bisa melihat distribusinya. Dan hal ini, sudah memberikan inspirasi cukup lama kepada saya, banyak hal tidak bisa kita kendalikan, tetapi secara garis besar bisa kita perkirakan hasilnya.

Tetapi belajar Matrix, memberikan saya insight lebih dalam lagi, saya bisa memperkirakan lebih akurat distribusinya, bahkan mensimulasikannya hanya dengan angka-angka saja, ini membuat saya semakin yakin matrix ini dapat membantu kita jauh lebih produktif. Misalkan memperkirakan impact incident, sales forecast, pemilihan lokasi toko, dll.

Tidak perlu lama berbasa-basi, yuk kita mulai saja pemodelannya.

Galton

Gambar 1.

Kita asumsikan kita hendak  membuat Galton Board dengan lebar 11 kolom. Bola-bola warna putih, adalah biji-bijian yang akan kita jatuhkan dalam Galton Board. Sedangkan bola berwarna hitam solid adalah pin-pin. Jika biji ini membentur pin ini, pilihannya jatuh ke kanan atau ke kiri, dengan kemungkinan sama besar. Sel yang ditempati pin tidak bisa di tempati oleh bola.

Dari model ini kita bisa membuat markov chain untuk masing-masing kolom ini.

Galton-markov

Jangan Ter-intimidasi dahulu, ini sederhana kok, kita coba sel 1 dan sel 2:

Sel 1: Bola berada di sel 1(Gambar 1, baris 2, kolom 1), state berikutnya dia hanya bisa di sel 2, karena dia berada di ujung kiri. Sedangkan di bawah sel 1 adalah pin, sehingga ia tidak bisa ke sel 1. Kemungkinannya adalah ke sel 2 adalah 1.

Sel 2 : Ketika bola berada di sel 2 (Gambar 1, baris 1, kolom 2), state berikutnya dia hanya bisa ke sel 1 atau sel 3, sel 2 ditempatin pin, sedangkan sel lain terlalu jauh. Kemungkinan ke sel 1 adalah 0.5 dan ke sel 3 adalah 0.5.

Sisanya sama saja, tinggal mengulang-ulang saja, sederhana kan. Tahap berikutnya adalah memodelkannya menjadi matrix dari Markov Chain di atas.

Sel 1 : Sel 1 hanya bisa di capai dari Sel 2 dengan kemungkinan 0.5, sehingga pada baris satu dan kolom 2 kita bubuhkan 0.5

Sel 2 : Sel 2 hanya bisa di capai dari Sel 1 dengan kemungkinan 1 dan dari sel 3 dengan kemungkinan 0.5. Sehingga pada baris 2 kolom 1 kita bubuhkan 1 dan pada kolom 3 kita bubuhkan 0.5

Sel 3 : Sel 3 hanya bisa di capai dari sel 2 dengan kemungkinan 0.5 dan dari sel 4 dengan kemungkinan 0.5. Sehingga pada baris 3 dan kolom 2 dan 4 kita bubuhkan 0.5.

Demikian seterusnya, sehingga kita memiliki matriks transisi sebagai berikut.

Matrix-galton

Gambar 3, Matrix Transisi Galton Board.

Kita Asumsikan bola-bola ini kita masukkan ke dalam Galton board pada kolom 6 sebanyak 1000 bola. sehingga kita modelkan sebagai vektor:

input kolom

Operasi berikutnya cukup Perkalian Matrix dengan Vektor yang sederhana, untuk perhitungan ini saya gunakan tools octave, seperti matlab tapi gratis.

Berikut ini adalah formula persebaran galton board dari baris 1 ke baris 2.

Galton-board-2ndstep

Mungkin ada yang bertanya-tanya, kenapa di tengah justru kosong, saya juga bingung awalnya. Tetapi itulah ajaibnya matematika, dia tetap konsisten. Di tengah adalah posisi pin, yang tidak mungkin di tempati oleh bola-bola.

Jika kita memiliki galton board yang memiliki 6 step, formulanya juga sederhana, kita kuadratkan saja 6x Transition Matrix.

six-step-galton

Mulai kelihatan kan persebarannya.

Agar lebih seru, saya coba matrixnya saya perbesar menjadi 51 kolom, dan operasinya 50x (50 baris Galton Board), karena kan komputer yang mengerjakan. Saya coba hapus juga hasil kolom yang berisikan pin.  Hasilnya distribusinya mirip dengan hasil di video.

galton-distribution

Matrix memungkinkan kita bekerja secara holistik, bekerja secara keseluruhan, dengan tentunya lebih mudah.

Have a nice weekend.

 

 

 

 

Vektor dan Kita

Vektor menurut saya adalah representasi natural dunia nyata, yang bisa membantu menjelaskan fenomena kehidupan yang kita rasakan fuzzy.

Seringkali konsepnya yang abstrak, dan kita beranggapan ini adalah mainan para ahli matematika. Saya pun merasakan hal yang sama, tetapi ada sesuatu, sesuatu yang spesial dari vektor ini.
Image result for vector math 2d

Dan di tulisan ini saya akan sedikit berbicara mengenai orthogonal dan dot produk, yang kelihatannya rumit tapi sangat aplikatif.

Saat SMA kita pernah belajar vektor [2 1] yang kira-kira artinya 2 unit ke sumbu X dan 1 unit ke sumbu Y. Dimana X dan Y ini tegak lurus atau orthogonal.

Tapi Boleh dong, sumbu X dan sumbu Y ini kita ganti jadi jeruk dan apel. Jadi vektor [ 2 1 ] merepresentasikan 2 buah jeruk dan 1 buah apel, dan keduanya orthogonal, karena apel tidak pernah menjadi jeruk dan begitu pula jeruk tidak pernah menjadi apel. Ketika kita menambahkan Jeruk, apel tidak akan bertambah, begitu pula sebaliknya.

Oleh karena itu bila Tono punya 5 jeruk dan 2 apel sedangkan Tini punya 1 jeruk dan 4 apel, penjumlahan kedua buah2an mereka adalah 6 jeruk dan 6 apel. Bukan 12 jeruk, 12 apel ataupun kemungkinan lainnya. Karena prinsip yang di atas tadi. apel selalu menjadi apel.

Dan menariknya lagi dimensi vektor ini dipanjangin sampai berapa dimensi pun juga tidak masalah, misalnya vektor buah2an bisa sampai 1000 juga oke. Cuma gambarnya ajah agak susah kalau suruh bikin grafik seperti di atas.

Konsep berikutnya kita coba ingat-ingat sedikitt pelajaran fisika, ini cuma visualisasi nanti kita bahas Jeruk lagi 😅 .

Image result for work F cos theta
Anggap tidak ada gesekan, kerja kita yang di hitung cuma W = F. S. cos θ Padahal Kerja kita ini F lebih besar. Komponen F sin θ nya nggak di anggap, diabaikan, hikss. semakin mendekati 0 theta nya semakin efisien karena mendekati 1 atau 100%. Semakin mendekati 90 derajat semakin tidak efisien, usaha kita tidak ada yang menjadi kerja.

Rumus F.S. cos θ ini bisa di buktikan secara matematis sama dengan dot produk vektor F dan S, dan rumus nya sangat sederhana, misalkan untuk kasus kita : Jeruk x Jeruk + Apel x apel. Untuk kasus Tono dan Tini Dot product nya adalah 5 × 1 + 2 x 4= 13. Nah 13 ini scalar ya bukan jeruk ataupun apel. Bahkan ini bisa jadi satuan yang lain, contoh gambar tadi, gaya dot jarak jadi usaha. Dari dot product ini kita bisa menghitung, cos θ efisiensi usaha kita menjadi hasil, contohnya :

Misalkan preferensi Tini lebih suka apel, dibandingkan Jeruk. Kalau di beri angka Tini ini lebih suka apel 4x dari jeruk, sehingga vektornya adalah [1 4]. Nah Tono tea, modalnya kan pas2an ga bisa beliin banyak2 untuk Tini. Bagaimana supaya Tini senang dengan modal minimal, caranya adalah dengan memaksimalkan cos theta. Kira-kira rumus cos θ

Image result for cos theta dot product

Anggap sebelumnya Tono belum melakukan evaluasi terhadap preferensi Tini, sehingga dia belikan saja 5 jeruk dan 2 apel. Sehingga cos theta pemberian Tono dan Preferensi Tini adalah :  58%.

Misalkan Tono sedikit kreatif melakukan pemodelan, dia coba bandingkan dengan Preferensi Tini . Tapi dia tidak boleh membeli 1 atau 4, kalau 1 dikira pelit, kalau 4 , gedung saja ga boleh apalagi apel. Dengan pemodelan dia mencoba beberapa hal :

  • Tini dibelikan 3 Jeruk dan 3 Apel, cos θ nya adalah 86%
  • Tini dibelikan 2 Jeruk dan 5 Apel, cos θ nya adalah 99%
  • Tini dibelikan 5 Jeruk dan 3 Apel, cos θ nya adalah 70%

Ternyata yang paling efisien adalah 2 Jeruk dan 5 Apel

Tetapi kehidupan kan jauh lebih rumit dari hanya buah, misalkan kita bikin restoran vektor kepuasan pelanggan lebih banyak isinya kenyamanan, kebersihan, rasa, harga, parkir dll. Andaikan kita bisa mengaplikasikan dot produk tentu sedikit hidup kita lebih terbantu seperti Tono menyenangkan Tini.

Contoh-contoh lain bisa untuk membantu menentukan luas ruangan dalam rumah, menentukan kegiatan anak, menyelesaikan pekerjaan, kombinasi produk, dll.

Makasih ya sudah mampir, moga-moga mau belajar vektor, atau mungkin kalau anaknya tanya apa guna vektor, bisa menjelaskan.

Kecanduan Belajar

dv1940061

Belajar ini mungkin salah satu momok yang saya hadapi saat ini, malas sekali kalau di suruh belajar. Dan lebih parahnya lagi kita selalu meng-encourage orang lain belajar pasangan, team, anak, asisten rumah tangga dan banyak lagi. Tentu semangat untuk belajar sangat tinggi, saya selalu bersemangat kalau sudah sampai toko buku gramedia, mau baca ini dan baca itu. Tapi begitu sampai di rumah, sampul plastik tidak pernah dibuka.

Padahal kalau kita lihat, pada dasarnya manusia itu rajin sekali belajar, bayi tidak diajarkan belajar dia pun akan selalu belajar berjalan, bicara dan semuanya di explore. Tetapi kenapa kita yang sudah berumur malas sekali belajar? Mungkin ada yang salah dengan mental model kita terkait belajar ini, karena kalau di eksplore, belajar ini adalah seharusnya pengalaman yang sangat adiktif.

Bagaimana tidak adiktif, ketika kita belajar sesuatu hal, kita akan mengerti suatu hal baru, tetapi sebaliknya kita akan setidaknya mengetahui terdapat 2 hal baru yang tidak kita ketahui. Dan setelah belajar untuk mengetahui 2 hal baru tersebut, setidaknya akan muncul 4 pertanyaan baru yang menggelitik rasa keingin-tahuan kita. Dan proses tersebut berjalan terus seperti reaksi berantai yang terjadi terus-menerus.

Setiap kita mengetahui hal yang baru, kita akan lebih kaya, kaya dalam berteman, kaya dalam bekerja, kaya dalam berkeluarga, kaya dalam nilai-nilai dan kaya dalam kehidupan religi kita. aktivitas ini sangat rewarding.

Akumulasi dari belajar ini akan terus menerus mewarnai kehidupan kita, dengan ledakan ilmu yang kita peroleh, dari munculnya pertanyaan baru yang melahirkan pengetahuan baru, tentu akan sangat berpengaruh pada kehidupan kita.

Dan luar biasanya lagi, semakin banyak kita belajar, seharusnya kita semakin rendah hati, bagaimana bisa?  Karena dengan semakin banyak kita belajar, semakin banyak kita tahu bahwa banyak hal yang tidak kita ketahui, semakin kita ketahui bahwa semakin lemah kita. Bagaimana mungkin kita menjadi sombong ketika kita mengetahui begitu banyak hal yang tidak kita ketahui.

Mungkin untuk mengurangi rasa malas kita terhadap belajar, kita harus coba belajar satu hal yang menggelitik pikiran kita, dari situ biarkan keingin-tahuan kita mengambil alih, dan biarkan dia kecanduan untuk belajar. Untuk anak-anak kita mari kita ajak mereka menikmati indahnya pengetahuan, sehingga mereka mau belajar tanpa perlu kita paksa.

Blog at WordPress.com.

Up ↑