Deadline tubes pertama IB (Intelegensia Buatan) sudah lama lewat. Yang berlalu biarlah berlalu, kata pepatah yang saya sendiri tidak tahu dari mana asal-muasalnya. Mengapa tubes IB ini begitu berkesan setelah deadline lewat? Karena bagi saya, inilah tubes yang paling mencengkeram yang pernah saya hadapi selama paruh pertama semester ini – meskipun selanjutnya, sudah terbukti, lebih banyak tugas, dan lebih menambah tekanan tentunya. Namun itu semua merupakan tantangan yang menyenangkan sekaligus mencerdaskan.
Pertanyaan berikutnya: mengapa menulis artikel ini? Berkeluh kesah? Jelas tidak, jika mengeluhkan tugas tersebut. Tugasnya adalah membuat permainan berbasis turn-based strategy, dengan modul utama/platform yang diimplementasikan oleh perwakilan dari seluruh peserta kuliah, dan pemain-pemainnya yang merupakan bot/agent (komputer) rancangan tiap-tiap kelompok. Bot/agent bekerja dengan berbagai algoritma pencarian: BFS, DFS, UCS, Greedy, A*, dan CSP. Secara lojik, algoritma pencarian memanfaatkan struktur pohon, terdiri dari simpul dan sisi, yang simpul-simpulnya ditelusuri menurut algoritma pencariannya. Tugas ini sebenarnya cukup mengasyikkan, hanya saja sangat menyita waktu, tenaga, dan pikiran (yang ini berlebihan). Akibatnya, setiap mendengarkan dan melihat sesuatu, langsung terkait-kait dengan tubes ini, termasuk ketika sedang mendengarkan kuliah lain (termasuk kuliah bukan informatika), juga ketika sedang melamun. Dari lamunan saya berkaitan dengan peristiwa-peristiwa masa lalu dan hasil mengait-ngaitkan dengan algoritma pencarian, saya pun mendapatkan pemikiran yang saya ingin ceritakan dalam tulisan ini.
Sekilas mengenai Algoritma Pencarian SolusiAda dua algoritma dasar dalam pencarian solusi: Breadth First Search (BFS) dan Depth First Search (DFS). Algoritma-algoritma lain merupakan pengembangan dari kedua algoritma ini. Kedua algoritma ini memiliki persamaan dalam hal pohon ruang status yang digunakan untuk melakukan pencarian solusi. Masing-masing simpul ditelusuri; ketika penelusuran tiba pada suatu simpul, simpul tersebut diperluas dengan pembangkitan simpul-simpul baru. Pembangkitan simpul dilakukan secara berulang hingga tiba di simpul solusi. Inilah perbedaannya: pada algoritma BFS, urutan penelusuran simpul mengikuti urutan pembangkitannya, simpul yang dibangkitkan lebih dahulu ditelusuri lebih dahulu juga, sementara pada algoritma DFS, setelah memperluas simpul dan membangkitkan simpul-simpul turunannya, salah satu simpul turunan tersebut langsung ditelusuri. Sebagai ilustrasi, simpul 1 diperluas menghasilkan simpul 2, 3, dan 4. Pada algoritma BFS, simpul 2 diperluas membentuk simpul 5 dan 6, kemudian simpul 3 diperluas membentuk simpul 7 dan 8, dan simpul 4 diperluas membentuk simpul 9 dan 10. Sementara itu, pada algoritma DFS, setelah simpul 2, 3, dan 4 dibangkitkan, simpul 2 diperluas membentuk simpul 5 dan 6, kemudian alih-alih simpul 3 diperluas, simpul 5 terlebih dahulu diperluas.
Kaitan dengan Kehidupan NyataDalam hidup, banyak momen pengambilan keputusan, baik dalam hal yang kecil maupun besar. Keputusan terkait dengan pilihan-pilihan, dengan memilih yang satu berarti juga mengorbankan yang lain. Ini dapat dibandingkan dengan simpul pada pohon pencarian; dari suatu simpul dapat dibangkitkan simpul-simpul turunan yang terhubung dengan simpul tersebut. Simpul yang ditelusuri melambangkan persimpangan (saat kita dihadapkan pada pilihan), sementara itu simpul-simpul yang dibangkitkan merupakan pilihan-pilihannya. Jika menetapkan pilihan (memilih satu simpul), berarti kita sudah meninggalkan kemungkinan untuk memilih simpul-simpul lainnya yang dibangkitkan bersamaan dengan simpul tersebut. Ketika menetapkan pilihan (memilih simpul), kita juga akan menghadapi konsekuensi dari pilihan yang ditetapkan tersebut. Simpul-simpul baru (pilihan-pilihan baru) yang dibangkitkan dari simpul yang telah kita pilih tersebut dipengaruhi konsekuensi pilihan kita sebelumnya. Proses tersebut terjadi secara berulang; setiap memilih simpul, pada posisi mana pun dalam pohon, kita tidak dapat lagi kembali dan memilih simpul lainnya, sehingga karakteristiknya mirip algoritma DFS.
Kita sering menyesali apa yang sudah terjadi di masa lalu. Misalnya saja, ketika saya tidak belajar dengan baik selama satu semester dan kemudian mendapatkan hasil yang kurang memuaskan ketika UAS, saya akan mengatakan, "Coba dulu saya belajar sungguh-sungguh, pasti bisa A."
Pada algoritma pencarian dengan DFS, memang dimungkinkan melakukan runut balik (backtrack) manakala simpul tidak mengarah ke solusi dan tidak dapat diperluas lagi. Akan tetapi, dalam kehidupan nyata, hal tersebut tidak dimungkinkan. Suka ataupun tidak, hal tersebut sudah terjadi, tidak dapat melakukan runut balik dalam kehidupan nyata. Untungnya, selama kita masih hidup, semua simpul dalam pohon pencarian kita masih dapat diperluas, sehingga masih ada kesempatan untuk mengubah kebiasaan dan menjadi lebih baik.
Persoalan berikutnya adalah bagaimana menetapkan simpul yang dipilih untuk diperluas. Dalam strategi algoritma, dapat digunakan perhitungan ongkos dari simpul yang sudah dilalui dan/atau fungsi heuristik tertentu untuk memperkirakan simpul mana yang akan memberikan solusi optimum. Dalam kehidupan nyata, ongkos jelas tidak dapat digunakan karena kita tidak dapat kembali ke masa lalu dengan runut balik. Kita hanya dapat meperkirakan dampak dari pilihan yang kita ambil (seperti halnya memperhitungkan heuristik dari simpul yang dibangkitkan). Fungsi heuristik yang kita tetapkan dalam kehidupan ini tidak sesederhana dalam program, ada berbagai aspek yang memengaruhi pengambilan keputusan kita. Ini bergantung pada prinsip dan nilai-nilai yang dianut oleh orang tersebut.
Apakah algoritma yang ditetapkan dapat selalu menghasilkan solusi optimum? Ya, dengan fungsi heuristik yang baik namun hanya pada persoalan tertentu. Mendapatkan solusi optimum menjadi lebih mudah jika lingkungan bersifat statis – dalam konteks artificial intelligence (AI), agent mempunyai tugas tertentu, berinteraksi dengan lingkungannya dengan menerima percept dari lingkungan dan melakukan aksi yang berpengaruh terhadap lingkungan, sehingga ada timbal balik antara agent dengan lingkungannya. Sementara itu, kehidupan ini merupakan lingkungan dinamis, sehingga tidak ada yang pasti di masa mendatang.
Tidak semua keadaan lingkungan dapat ditangkap oleh percept. Agent dikatakan rasional jika melakukan tindakan yang sesuai dengan percept yang ditangkapnya. Begitu pula manusia. Kita hanya dapat berpikir dan bertindak jika diberikan percept tertentu. Hanya dari yang kita dengar, kita lihat, dan kita rasakan yang dapat kita ketahui. Kita pun berpikir dan bertindak hanya berdasarkan fakta-fakta yang ada dan dipahami. Untungnya, kita manusia lebih dari sekadar agent AI; kita makhluk yang dinamis, sehingga kita dapat semakin baik dalam mengenali percept, menetapkan perhitungan pada setiap pengambilan keputusan, dan menambah pengetahuan dan pemahaman dengan pembelajaran sepanjang hidup (life-long learning).
Note ini merupakan repost dari Facebook note milik penulis, dengan perubahan secukupnya.
Comments