Jumat, 08 Mei 2020

Algorithma Path Finding #1: Pengenalan konsep dengan gambar sederhana

Tulisan ini akan membahas konsep algorithma path finding. Algorithma path-finding adalah algorithma untuk mencari jalan. 

Disini kita akan membahas algorithma path finding yang paling sederhana,  tidak memiliki fungsi yang bermacam-macam, yang penting bisa menemukan jalan. Jalan yang dihasilkan juga bukan jalan yang paling efisien, yang penting ketemu. 

Mari kita mulai pembahasannya dengan gambar berikut ini. Gambar ini menggambarkan permasalahan dasar dalam path-finding. Kita akan mencari jalur dari A ke B. Di tengah-tengah ada halangan, berupa kotak berwarna coklat. Kita tidak mungkin mengambil jalan lurus, karena pasti akan menabrak. Jadi kita harus jalan memutar. Suatu hal yang simple bagi kita, tapi sebenarnya sangat rumit apabila harus diimplementasikan dengan komputer.


Peta yang kita gunakan sebagai model berbentuk grid yang terdiri dari kotak-kotak yang akan kita namakan cell. Ini adalah permodelan yang paling sederhana. Algorithma path finding yang ada sekarang bisa memiliki peta berbentuk macam-macam, mulai dari vector sampai dengan mesh, dll. Namun intinya sama saja. Dasarnya sama, bila Anda bisa memahami dasarnya maka berikutnya akan lebih mudah untuk dipelajari.

Gambar berikut ini menunjukkan jalur yang dihasilkan dari algorithma ini. Jalur ini bisa menghubungkan titik A ke B.


Jalurnya tidak sempurna. Tidak ada pergerakan diagonal, padahal kalau kita bergerak diagonal tentu jalurnya akan semakin pendek. Kita akan membahas pergerakan diagonal di tulisan berikutnya. Seperti yang Saya bilang sebelumnya, algorithma yang dibahas disini adalah yang paling dasar. Mari kita mulai algorithma ini selangkah demi selangkah 🚢🏽‍♀️🚢🏽‍♀️🚢🏽‍♀️.

πŸ• Langkah 1:

Kita akan berjalan dari A ke B. Yang kita lakukan pertama adalah menentukan kemana akan melangkah selanjutnya. Kita punya 4 pilihan: atas, bawah, kiri dan kanan.Kita tidak membahas langkah diagonal ke kanan atas atau yang lainnya, terlalu rumit. Kita bahasnya yang dasar-dasar saja. 

Algorithma path finding bersifat heuristic, atau kira-kira. Mengiranya juga tidak terlalu jauh, hanya mengira selangkah kedepan saja. Walau cuman kira-kira, tapi kesempatan suksesnya besar. Seperti ketika kita ujian dulu, jawabnya kira-kira, tapi dapat 100 πŸ† 

Perhatikan gambar di bawah. Cell berwarna biru muda adalah cell kandidat kemana kita akan melangkah selanjutnya. Karena kita tidak tahu kemana harus melangkah, maka kita buat semua kemungkinan.


Cell berwana biru muda ini kita sebut cell terbuka. Kita sebut demikian karena cell ini adalah cell dimana terbuka kemungkinan untuk melangkah. 

Perhatikan angka-angka yang tertera di tiap cell ini. Angka itu menunjukkan perkiraan jauhnya jarak dari cell tersebut ke tujuan. Jaraknya dihitung dengan cara menghitung jarak vertikan dan horizontal.

Cell sebelah atas berjarak lima, karena untuk sampai ke B dibutuhkan 4 langkah ke kanan dan 1 langkah ke bawah. Jarak ini adalah jarak kira-kira, tanpa memperhatikan ada halangan atau tidak, benar atau tidak, akurat atau tidak. Yang penting adalah cara hitungnya konsisten.

Cell sebelah kiri juga berjarak lima, karena untuk sampai ke B dibutuhkan 4 langkah ke kanan. Perhatikan bahwa kita tidak mempedulikan ada halangan atau tidak. Kita hanya mengira-ngira saja.

Cell A berwarna hijau muda menunjukkan cell aktif saat ini yaitu dimana kita berada saat ini. 

Panah merah menunjukkan arah dari cell baru ke cell awal. Semua cell baru dibuat dari cell A sehingga arah panah menunjuk ke cell A. 

Dalam membuka cell baru ini ada beberapa hal yang perlu diperhatikan antara lain:

A. Cell baru tidak boleh keluar dari peta.
B. Cell baru tidak boleh bertumpuk dengan cell yang sudah ada.
C. Cell baru tidak boleh menempati cell yang sama dengan cell yang lain.
D. Cell baru tidak boleh menempati posisi yang diisi oleh element lain seperti halangan, dsb
πŸ” Langkah ke 2:

Langkah berikutnya adalah mengumpulkan semua cell yang terbuka kemudian kita tentukan cell yang paling dekat ke target. Saat ini baru ada 4 cell yang terbuka, karena kita baru melangkah. Bila kita sudah melangkah jauh, maka jumlahnya akan semakin banyak. Kemungkinannya jadi banyak dan kita harus memilih salah satu.

Bila diperhatikan dari cell-cell tersebut, maka cell di kanan memiliki jarak terdekat, yaitu 3. Kita akan melangkah kesini. Saat ini kita hanya tahu bahwa cell ini yang paling dekat ke tujuan. Jadi ya, kita melangkah ke sini aja. 

Perhatikan bahwa saat kita memilih cell, yang kita pilih adalah cell yang jaraknya paling kecil. Cell tersebut tidak harus berada di sebelah cell yang aktif.  Yang terpenting jaraknya paling kecil, dan statusnya masih terbuka, masih ada kesempatan, masih jomblo :D. Disinilah anak panah akan memiliki peran yang sangat penting. Karena panah ini menunjukkan arah kembali ke titik awal.

🍝 Langkah ke 2a:

Setelah memilih cell baru, ada hal yang harus kita lakukan, yaitu menutup cell yang sekarang sedang aktif. Perhatikan gambar dibawah. cell A sekarang berwarna abu-abu. Cell ini kita sebut cell tertutup. Kita menutup kemungkinan untuk melangkah kembali ke sini. Sekali melangkah pantang mundur ke belakang. 



🍠 Langkah ke 2b:
Setelah menutup cell yang sedang aktif, kita pindah ke kanan, yaitu ke tempat cell yang telah kita pilih tadi. Cell sebelah kanan sekarang berubah warnanya menjadi hijau.


🍟 Langkah 3:

Langkah ini adalah perulangan dari langkah 1. Kita membuka cell baru, menghitung jarak dan menambahkan arah panah kembali ke cell sekarang. Kita tidak membuka cell baru di arah kanan karena cell tersebut berupa cell halangan yang tidak bisa dilewati.


🌭 Langkah 4:

Mulai sekarang, maka proses akan berulang terus sampai akhir. Langkah 4,6,8 dst, atau langkah genap akan sama dengan langkah 2. Sedangkan langkah 5, 7, 9 dst akan sama dengan langkah 1. Saya tidak akan menjelaskan panjang lebar lagi karena isinya bakal mirip.

Kita berpindah ke cell baru, dan menutup cell yang sekarang. Cell baru yang kita pilih adalah cell bawah, karena nilainya paling kecil. Sebenarnya ada dua cell terbuka yang nilainya paling kecil. Satu berada di atas, dan satu lagi berada di bawah. Kita boleh memilih yang mana saja. Namanya juga mengira-ngira. Yang penting jalan dulu, gak usah ragu-ragu, gak usah bingung, jalan terus. 🚧🚧🚧



🍿 Langkah 5:

Langkah ini mirip dengan langkah 1. Bedanya kali ini kita akan membuka langkah ke kanan. Karena dikiri sudah ditempati, sudah ada yang punya, di atas juga. Yang ada di syukuri, 


πŸ₯“ Langkah 6:

Kita pindah ke kanan. 


πŸ₯š Langkah 7:

Kita membuka kotak yang dikanan.


πŸ₯ž Langkah 8:
.
Kita pindah ke kanan


🍳 Langkah 9:

Kita buka cell baru. Tinggal sedikit lagi.


🍞 Langkah 10:

Kita melangkah ke kanan. Perhatikan bahwa kita memilih kotak di kanan bukan di atas. Hal ini sama saja. Yang penting adalah kita tetap memilih, tidak golput.


πŸ₯ Langkah 11:

Kita membuka kotak baru dan ternyata sudah sampai, sehingga kita tidak perlu membuka kotak sebelah kanan lagi.


πŸ₯– Langkah 12

Kita melangkah terakhir dan akhirnya sampai ke tempat tujuan.


Padah langkah terakhir ini, kita sudah berhasil sampai tujuan. Tugas selanjutnya adalah menarik jalur dari B ke A dengan mengikuti anak panah. Jalur yang dihasilkan adalah jalur yang terbalik karena mengikuti anak panah. Namun tidak masalah karena kita tinggal membaliknya lagi. 



Sekarang kita sudah punya jalur dari A ke B. Algorithma ini telah selesai dan bisa dipakai untuk masalah-masalah yang lain yang berhubungan dengan pencarian jalan. Anda bisa mengubah struktur peta dengan memindahkan halangan, atau membuat petanya semakin kompleks. 

Algorithma yang dijelaskan disini sangat banyak kekurangannya, karena hanya membahas hal yang pokok saja. Algorithma path-finding jenis ini juga sering disebut dengan speed path-finding, karena bisa menemukan jalur dengan cepat namun hasilnya tidak maksimal.

Pada tulisan berikutnya Saya akan membahas penerapan algorithma path-finding ini dalam bentuk kode pemrograman.

Terima kasih telah datang dan membaca. Silahkan ambil pisangnya satu-satu 🍌🍌🍌.



Sabtu, 04 April 2020

Membuat mainan burung dari sedotan

Ebook bisa di download disini;
https://drive.google.com/open?id=10fEnv6IPcGZ2g99RWCLfgu5yuaeSXufY

Ebook ini mengajarkan bagaimana membuat mainan burung dari sedotan. Silahkan download ebooknya dari link yang sudah disediakan.

    

Hasilnya bisa dibuat macam-macam mulai dari mainan hingga hiasan gantung.

Terima kasih telah mengunjungi blog ini.



Minggu, 15 Desember 2019

Aplikasi untuk Belajar Matematika Dasar secara daring

Link Bermain:
https://hagarden.netlify.com/belajarmtk

Kode Sumber:
https://github.com/forkHub/proto/tree/master/ulangan/banyakan

    

Aplikasi daring sederhana untuk belajar matematika dasar. Ada lebih dari 40 macam latihan matematika yang berbeda dan tiap latihan yang disusun secara bertahap dari yang paling mudah ke yang paling sulit.

Kedepannya Insya Allah akan ditambahi materinya. Semua materi diusahakan untuk mengikuti kurikulum yang diajarkan di sekolah. Walau tidak bisa sama persis.

Aplikasi ini diharapkan bisa untuk membantu siswa untuk belajar matematika secara mandiri, khususnya untuk home-schooling. 

Tujuan utama aplikasi ini memang dipakai untuk anak-anak yang sekolah mandiri atau home-schooling. Walaupun untuk mengarah kesana masih sangat jauh sekali, karena banyak sekali yang harus diselesaikan.

Terima kasih sudah mencoba aplikasinya. Bila ada masukan atau feedback silahkan disampaikan lewat kolom komentar. 

Sabtu, 26 Oktober 2019

Kumpulan seamless tileset (rumput-rumputan dan bebatuan)

Berikut ini adalah kumpulan tileset yang bisa dibuat untuk game RPG atau sejenisnya. Anda bisa menggunakan tileset ini di game Anda. Tileset ini bisa dipakai secara bebas untuk game pribadi atau komersial. Anda tidak perlu memberi link pada blog ini. Tinggal pakai saja sesuka hati. Asal tidak digunakan untuk hal-hal yang berbau negatif:


Rumput:



Rumput alang-alang:



Bebatuan/jalan berbatu:



Contoh pemakaiannya bisa dilihat di gambar berikut.








Aplikasi untuk mencatat pengeluaran anda sehari-hari [draft]

Link aplikasi:
https://haakun.netlify.com/

Link ulasan di karya-karsa:
https://karyakarsa.com/post/388


Saya adalah orang yang cukup bingung dalam mengelola pengeluaran. Sering kali Saya lupa berapa uang yang telah Saya belanjakan hari ini. Tiba-tiba saja uang di saku sudah tinggal sedikit, padahal Saya merasa hari ini tidak beli apa-apa.

Untuk membantu mengingat belanja apa saja hari ini, Saya membuat aplikasi kecil yang bisa Saya akses di handphone setiap waktu. Sehingga setiap Saya beli sesuatu, Saya bisa langsung mencatatnya, dan Saya bisa tahu berapa total uang yang telah Saya belanjakan selama ini.

Aplikasi ini tidak perlu di download, ataupun diinstall karena aplikasi ini adalah aplikasi berbasis web yang bisa dibuka di handphone.

Applikasi ini bisa diakses pada halaman ini:
https://haakun.netlify.com/



Cara penggunaan applikasi ini cukup mudah. Setiap kali Anda belanja sesuatu, Anda bisa langsung menginput ke applikasi. Total pengeluaran Anda akan terlihat di layar.

Saat ini total pengeluaran hanya menampilkan total pengeluaran mulai dari awal hingga akhir, dan belum dibagi berdasarkan minggu, bulan, ataupun tahun. Saya masih mengerjakan bagian laporan yang dibagi berdasarkan minggu, bulan ataupun tahun, dan berharap bisa menyelesaikannya di bulan depan.

Aplikasi ini tidak mencatat data Anda di server. Anda tidak perlu signup ataupun login. Semua data akan disimpan di handphone masing-masing. Untuk berpindah handphone anda perlu membackup data Anda di handphone sekarang dan merestore data Anda di handphone target.

Anda tidak perlu kuatir dengan pencurian data, karena applikasi ini tidak mengirim apa-apa ke server selain request untuk memulai applikasi ini.