BAB 2
LANDASAN TEORI
Pada bab ini akan diuraikan beberapa hal penting berkenaan dengan dasar
perancangan aplikasi penyelesaian permainan rubik’s cube dengan metode Kociemba
pada platform android . Landasan teori yang diuraikan meliputi dasar permainan
rubik’s cube , penjelasan metode Kociemba , pengembangan aplikasi ,dan platform Android.
Semua dasar teori tentang rubik’s cube , metode Kociemba , dan Android
diambil dari buku , jurnal, laporan dan internet..
2.1. Permainan Rubik’s Cube
Kubus Rubik adalah permainan puzzle kombinatorik 3 dimensi , kubus Rubik klasik
memiliki pengaturan warna sebagaimana ditunjukkan oleh gambar 2.1 :
2.1.1 Struktur Kubus
Struktur Kubus Rubik dapat dibagi menjadi tiga macam bagian yaitu :
1. Center (Pusat)
Terdapat 6 bagian center. Setiap kotak center memiliki satu warna
tertentu dan tidak dapat merubah posisinya relatif terhadap satu sama
lain , Karena itu mereka digunakan sebagai acuan dalam penyelesaian
kubus.
2. Corner(Ujung)
Terdapat 8 bagian corner yang memiliki kombinasi dari 3 warna.
3. Edges(Tepi)
Terdapat 12 bagian edges yang memiliki kombinasi 2 warna .
Pembagian Kubus ditunjukkan pada gambar berikut :
2.1.2 Notasi Singmaster
Kebanyakan pemain kubus rubik 3x3x3 menggunakan notasi gerakan yang
dikembangkan oleh David Singmaster untuk menotasi pengurutan gerakan kubus yang
disebut “Singmaster Notation” . Bentuk dasarnya mengijinkan algoritma untuk
dituliskan dalam sebuah cara dimana gerakan dapat dilakukan tanpa memperhatikan
sisi manapun yang diacukan menjadi sisi atas atau bagaimana warna disusun pada
kubus tertentu (Joyner,2002).
1. F (Front): Sisi yang langsung menghadap pengguna
2. B (Back): Sisi berlawanan dengan Front
3. U (Up): Sisi diatas Front
4. D (Down): Sisi berlawanan dengan Up, dasar kubus
5. L (Left): Sisi sebelah kiri dari Front
6. R (Right): Sisi sebelah kanan dari Front
7. ƒ (Front two layers): Sisi yang menghadap pengguna dan lapisan tengah yang
bersinggungan
8. b (Back two layers): Sisi yang berlawan dengan pengguna dan sisi tengah yang
bersinggungan
9. u (Up two layers) : Sisi atas dan lapisan tengah yang bersinggungan
10. d (Down two layers) : Sisi bawah dan lapisan tengah yang bersinggungan
11. l (Left two layers) : Sisi kiri dan lapisan tengah yang bersinggungan
12. r (Right two layers) : Sisi kanan dan lapisan tengah yang bersinggungan
13. x (rotate): Putaran kubus berporos pada R
14. y (rotate): Putaran kubus berporos pada U
Ketika sebuah simbol prime ( ′ ) mengikuti sebuah huruf maka itu berarti bahwa
putaran dilakukan berlawanan arah jarum jam , sementara jika tidak terdapat prime
maka putaran searah jarum jam. Sebuah huruf yang diikuti oleh angka 2 (atau
terkadang superscript2) menyatakan 2 kali gerakan atau putaran 180 derajat.
Pengubahan paling umum dari notasi Singmaster yang digunakan sebagai standar
resmi sekarang adalah penggunaan “w” , dari kata “wide” yang berarti lebar daripada penggunaan huruf kecil untuk menunjukkan gerakan 2 lapisan maka , notasi Rw
adalah samar dengar r .
Untuk metode menggunakan gerakan lapisan tengah (terutama metode corner first )
terdapat tambahan yang diterima secara umum yaitu “MES” dimana huruf M ,E , dan
S menyatakan pergerakan lapisan tengah . Ini di gunakan sebagai contoh dalam
Algoritma Marc Waterman .
M (Middle): lapisan antara L and R,
E (Equator): lapisan antara U and D
2.1.3 Kajian Matematis Permainan
Kajian Matematis terdapat Kubus rubik adalah sebagai berikut :
Rubik Cube memiliki delapan corner dan dua belas edge . Ada 8 ! ( 40.320 )
cara untuk mengatur corner kubus . Tujuh dapat berorientasi secara independen , dan
orientasi kedelapan tergantung pada tujuh sebelumnya , memberikan 37 ( 2.187 )
kemungkinan . Ada 12 ! / 2 ( 239500800 ) cara untuk mengatur edge , karena
permutasi genap dari corner menyiratkan permutasi edge juga. ( Ketika pengaturan
center juga diperkenankan , seperti yang dijelaskan di bawah ini , aturan adalah bahwa
pengaturan gabungan dari corner ,edge , dan center harus menjadi bahkan permutasi .
Sebelas edge dapat bergerak secara independen , dengan flip dari kedua belas
tergantung pada sebelas sebelumnya yang , memberikan 211 ( 2.048 ) kemungkinan .
{ 8 ! x 37 x ( 12 ! / 2 ) x 211 } = 43.252.003.274.489.856.000
yang kira-kira 4.3 quintillion (Cotten,2009).
Teka-teki ini sering diiklankan sebagai memiliki hanya " miliaran " posisi , karena
angka yang lebih besar masih asing bagi banyak orang.
Angka sebelumnya terbatas pada permutasi yang dapat dicapai hanya dengan memutar
sisi kubus . Jika kita menganggap permutasi dicapai melalui pembongkaran kubus ,
nomor menjadi dua belas kali lebih besar :
{ 8! x 38 x 12 ! x 212 } = 519.024.039.293.878.272.000 .
yang kira-kira 519 quintillion kemungkinan susunan potongan-potongan yang
membentuk Cube , tetapi hanya satu dari dua belas bagian ini yang sebenarnya bisa
dipecahkan . Hal ini karena tidak ada urutan langkah yang akan menukar satu pasang
potongan atau memutar corner atau edge kubus tunggal . Jadi ada dua belas
kemungkinan set konfigurasi terjangkau , kadang-kadang disebut " semesta " atau "
orbit " , di mana Cube dapat ditempatkan dengan pembongkaran dan pemasangan
2.2Algoritma Kociemba
Kociemba menciptakan algoritma ini untuk memperbaiki algoritma Thistlethwaite pada tahun 1992 .Ia menurunkan jumlah grup perantara menjadi dua:
G0 = ( U, D, L, R, F, B )
dilakukan dengan metode yang senilai dengan IDA*.Pencarian di G1 \ G0 memerlukan
paling banyak 12 giliran dan pencarian di G1 paling banyak 18 giliran , Michael Reid
menunjukkan pada tahun 1995 dengan membuat solusi suboptimal yang membawa kubus ke grup G1 dan mencari solusi pendek di G1 , biasanya akan menghasilkan
solusi keseluruhan yang lebih singkat . Dengan menggunakan algoritma ini solusi biasanya di temukan di bawah 21 gerakan, walaupun tidak ada bukti untuk membuktikan akan selalu menghasilkan hal tersebut.
Uraian berikut ini dimaksudkan untuk memberikan ide dasar tentang bagaimana algoritma ini bekerja.
6 permukaan yang berbeda dari Cube disebut U (p), D (own), R (ight), L (eft), F (ront)
dan B (ack). Sementara U menunjukkan seperempat putaran permukaan Up 90 derajat
searah jarum jam, U2 menunjukkan 180 putaran derajat dan U' menunjukkan
seperempat putaran 90 derajat berlawanan arah jarum jam. Deretan seperti UDR 'D2
dari gerakan Cube disebut manuver.
Jika Anda mengubah permukaan kubus yang telah diselesaikan dan tidak
menggunakan gerakan R, R ', L, L', F, F ', B dan B' Anda hanya akan menghasilkan
subset tertentu dari semua posisi kubus yang dimungkinkan . Subset ini dilambangkan
dengan G1 = <U,D,R2,L2,F2,B2>. Dalam Subset ini, orientasi corner dan edges tidak
dapat diubah. Artinya, orientasi edges atau corner di lokasi tertentu selalu sama dan
empat sisi di UD-slice (lapisan antara permukaan U dan D) tetap terisolasi di slice itu.
Pada Fase 1, algoritma mencari manuver yang akan mengubah kubus teracak menjadi
G1. Artinya, orientasi corner dan edge harus dibatasi dan edge di UD-slice harus
triple (x, y, z) ke tiga posisi lainnya (x ', y', z '). Semua kubus dari G1 memiliki triplet
yang sama (x0, y0, z0) dan ini adalah state yang dituju dalam fase 1.
Untuk menemukan state tujuan ini akan digunakan algoritma pencarian yang disebut
iterative deepening A * dengan fungsi heuristic lowerbound (IDA *). Dalam kasus
Rubik Cube, ini berarti bahwa pengulangan dilakukan melalui semua manuver yang
bertambah panjang. Fungsi heuristik h1 (x, y, z) memperkirakan untuk masing-masing
state kubus (x, y, z) berapa jumlah langkah yang diperlukan untuk mencapai state
tujuan. Sangat penting bagi fungsi untuk tidak memperkirakan jumlah langkah ini
secara berlebihan . Dalam pencarian diperlukan untuk memberikan jumlah pasti
langkah yang diperlukan untuk mencapai keadaan tujuan pada Fase 1. Heuristik ini
memungkinkan pruning sewaktu membuat maneuver , hal ini penting jika kita tidak
ingin menunggu untuk waktu yang sangat lama sebelum state tujuan tercapai. Fungsi
heuristik h1 adalah tabel pencarian berbasis memori dan memungkinkan pruning
hingga 12 gerakan . Pada fase 2 algoritma mengembalikan kubus di subgroup G1,
hanya menggunakan gerakan dari subkelompok ini. Ini mengembalikan permutasi dari
8 corner, permutasi dari 8 edges permukaan U dan D , dan permutasi dari 4 edges di
UD-slice . Fungsi h2 heuristik (a, b, c) hanya memperkirakan jumlah langkah yang
diperlukan untuk mencapai goal state, karena ada terlalu banyak elemen yang berbeda
dalam G1.
Algoritma ini tidak berhenti ketika sebuah solusi pertama ditemukan , namun terus
mencari solusi yang lebih pendek dengan menjalankan fase 2 dari solusi suboptimal
dari fase 1. Sebagai contoh, jika solusi pertama memiliki 10 gerakan pada fase 1 yang
diikuti oleh 12 gerakan dalam fase 2 , solusi kedua bisa memiliki 11 gerakan pada fase
1 dan hanya 5 gerakan dalam fase 2. panjang manuver di fase 1 meningkat dan
panjang manuver di fase 2 menurun. Jika panjang fase 2 mencapai nol, solusinya
adalah optimal dan algoritma berhenti.
Dalam implementasi saat ini Algoritma Two-Phase tidak dapat mencari solusi yang
optimal secara keseluruhan dari Rubik Cube , bagi yang menginginkan solusi optimal
2.3.Android
Android merupakan suatu software stack untuk mobile device. Di dalamnya terdapat
sistem operasi, middleware, dan key application. Aplikasi pada platform ini
dikembangkan dalam bahasa pemrograman java. Android sendiri memiliki banyak
fitur diantaranya adalah :
1. Merupakan sebuah Application Framework sehingga programmer dapat
menggunakan beberapa fungsi yang telah disediakan.
2. Dalvik virtual machine. Tiap aplikasi dalam Android memiliki instance virtual machine yang dapat bekerja secara efisien dalam lingkungan memori
yang terbatas.
3. Integrated browser. Web browser berbasis WebKit engine terdapat pada
browser default Android ataupun dapat diintegrasikan dengan aplikasi lain.
4. Optimized graphics. Library grafis 2D yang kaya dan 3D berbasis OpenGL ES
1.0 yang mendukung akselerasi hardware.
5. SQLite. Basis data relasional yang ringan namun sangat powerful.
6. Media Support. Mendukung berbagai format audio, video, dan gambar
(MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF).
7. Bluetooth, EDGE, 3G, dan Wifi. Mendukung komunikasi jaringan(tergantung hardware).
8. Kamera, GPS, kompas, dan accelerometer. Mendukung berbagai fitur yang disediakan oleh hardware.
9. Lingkungan pengembangan yang lengkap. Termasuk device emulator,
tools, untuk debugging, profiling, memori dan performa, plugin untuk Eclipse
2.3.1. Arsitektur android
Android terdiri dari beberapa stack software yang terdiri dari : Applications,
Application Framework, Libraries, Android Runtime dan Kernel Linux. Arsitektur
lengkap platform ini dapat dilihat pada gambar 2.3.
Gambar 0.1 Arsitektur platform Android (Zechner, 2011)
a. Applications
Applications merupakan program yang langsung berhubungan dengan user. Baik
program yang merupakan bawaan dari Android sendiri maupun program yang dibuat
oleh developer menggunakan bahasa pemrograman java. Contoh program bawaan dari
platform Android sendiri adalah emailclient, program SMS, calendar, maps, web
browser, contact dan sebagainya.
b. Application Framework
Lapisan ini berisi sekumpulan API yang dapat digunakan oleh programmer maupun
komponen dari Android sendiri. Aplikasi manapun dalam Android dapat berbagi
fungsi sehingga aplikasi lain dapat memanfaatkannya.
Aplikasi pada Android disusun atas beberapa komponen :
1. Sekumpulan views. Digunakan untuk mengatur tampilan pada aplikasi.
Contohnya adalah lists, grid, text box, button, bahkan embeddable web
browser.
2. Contentproviders. Komponen yang mengatur agar aplikasi dapat mengakses
resources dari aplikasi lain (seperti Contacts), atau berbagi data dengan
aplikasi lain.
3. Resource manager. Menyediakan akses kepada resource non-code seperti
localized string, dan file layout.
4. Notification manager. Memungkinkan agar suatu aplikasi dapat menampilkan
peringatan yang dapat dikustomasi pada status bar.
5. Activity manager. Mengatur siklus aplikasi dan navigasi antar aplikasi yang
sedang berjalan.
c. Libraries
Android mendukung beberapa library C/C++yang digunakan pada berbagai
komponen Android. Kemampuan ini dapat diakses oleh developer melalui Android
apllication framework. Beberapa library diantaranya adalah :
1. System C library. Implementasi library C standar(libc).
2. Media libraries. Mendukung berbagai format multimedia (termasuk MPEG4,
H.264, MP3, AAC, AMR, JPG, PNG).
3. Surface manager. Mengatur akses ke subsistem display.
4. LibWebCore. Engine web browser modern.
5. SGL. Engine grafis 2D.
6. 3D library. Implementasi OpenGL ES 1.0 yang mendukung akselarasi
hardware.
7. FreeType. Rendering untuk bitmap dan vektor font.
d. Android runtime
Tiap aplikasi pada Android memiliki proses nya masing-masing. Tiap aplikasi
tersebut memiliki instans dari Dalvik virtual machine (VM). Dalvik virtual machine
dirancang agar suatu perangkat dapat menjalankan beberapa VM secara efisien.
Dalvik VM mengeksekusi file dengan format Dalvik executable format (.dex) yang
dirancang untuk meminimalkan memoryfootprint.
Dalvik VM berbasis register dan dapat menjalankan kelas-kelas yang
dikompilasi dengan bahasa pemrograman java dan ditransformasikan menjadi format
.dex. Dalvik VM sendiri bergantung pada kernel Linux untuk fungsi dasarnya, seperti
threading dan manajemen memori secara low-level.
e. Linux kernel
Android menggunakan Kernel Linux versi 2.6 sebagai sistem utama. Fungsi kernel
yang digunakan antara lain untuk keamanan, manajemen memori, manajemen proses,
manajemen jaringan, dan drivermodel. Kernel juga berfungsi sebagai layer abstrak
2.3.2. Komponen aplikasi
Komponen aplikasi adalah building block penting dari aplikasi Android. Setiap
komponen adalah titik yang berbeda dimana system dapat masuk ke aplikasi. Tidak
semua komponen adalah titik masuk yang sebenarnya bagi pengguna, beberapa
bergantung pada komponen lain. Namun masing-masing adalah entitasyang unik yang
memainkan perannya masing-masing. Setiap komponen adalah building block unik
yang membantu mendefinisikan perilaku keseluruhan aplikasi.
Ada empat jenis komponen aplikasi. Setiap jenis memiliki tujuan yang berbeda
dan memiliki siklus hidup yang berbeda yang mendefinisikan bagaimana komponen
dibuat dan dimusnahkan.
Berikut ini adalah empat jenis komponen aplikasi :
1. Activities, activity dilambangkan dengan sebuah layar dengan antarmukanya.
Sebagai contoh, sebuah aplikasi email memiliki activity yang menunjukkan
tampilan dari daftar email baru, activity lain untuk membuat pesan, dan
activity lain untuk membaca pesan. Meskipun activities bekerja sama
membentuk sebuah aplikasi email, namun masing-masing merupakan
element independen. Dengan demikian aplikasi lain dapat memulai salah satu
dari activity tersebut (jika aplikasi email mengizinkan). Contohnya adalah
aplikasi kamera dapat memulai aktifitas di aplikasi email untuk membuat
pesan, agar pengguna dapat berbagi gambar.
2. Services, service adalah komponen yang berjalan di belakang untuk
menjalankan operasi yang panjang dan menjalankan kerja proses remote.
Service tidak menyediakan antarmuka bagi pengguna. Sebagai contoh
bagaimana sebuah aplikasi pemutar musik dapat berjalan dibelakang saat
pengguna sedang membuka aplikasi lain. Komponen lain seperti activity
dapat memulai service, membiarkannya bekerja atau mengikatnya untuk
berinteraksi.
3. Content providers, content provider mengatur pembagian data antar aplikasi.
Lewat content provider, aplikasi lain dapat membaca ataupun dapat
memodifikasi (jika diizinkan) data dari aplikasi lain. Contohnya adalah
4. Broadcast receivers, broadcast receiver adalah komponen yang merespon
seluruh pengumuman siaran dari sistem. Banyak siaran berasal dari sistem,
contohnya siaran yang mengumumkan bahwa layar telah mati atau baterai
rendah. Aplikasi juga dapat melakukan siaran seperti misalnya
mengumumkan bahwa aplikasi telah selesai melakukan download data dan
tersedia untuk digunakan aplikasi lain. Meskipun broadcast receiver tidak
memiliki antarmuka tetapi bisa saja komponen ini membuat notfikasi di
status bar untuk memperingati pengguna.
2.3.3. LifeCycle Aplikasi Android
Secara umum setiap aplikasi Android akan berjalan sebagai sebuah proses tersendiri.
Hal yang unik dalam Android adalah bahwa masa hidup (life-time) dari sebuah proses
tidak dikendalikan sepenuhnya oleh aplikasi, namun ditentukan oleh sistem. Sistem
mengendalikan proses dengan pertimbangan aplikasi yang sedang berjalan,
kepentingannya bagi pengguna, dan total memori yang tersedia dalam sistem.
Penggunaan seperti activities, services, content providers, dan broadcast
receivers sangat berperan dalam menentukan masa hidup dari proses. Cara
penggunaan komponen yang salah dapat menyebabkan proses di-kill oleh sistem
biarpun sedang berjalan. Sistem juga dapat meng-kill proses jika sistem kehabisan
memori. Adapun pertimbangan yang digunakan sistem untuk meng-kill proses adalah
dengan menggunakan hirarki kepentingan (importance hierarchy) yang didasari oleh
komponen yang sedang berjalan dan state komponen tersebut.
Berikut adalah hirarki kepentingan tersebut terurut menurun :
1. Proses foreground yaitu proses yang dibutuhkan untuk aktivitas yang sedang
dilakukan oleh pengguna.
2. Proses visible yaitu proses dengan komponen activity yang tampak oleh
pengguna namun tidak sedang berjalan (pause).
3. Proses service yaitu proses dengan komponen service.
4. Proses background yaitu proses dengan komponen activity dan tidak tampak
5. Proses kosong yaitu proses yang sedang tidak aktif berupa proses yang
di-cache untuk meningkatkan performansi.
Jika terdapat lebih dari satu proses yang dapat di-kill maka sistem akan
menggunakan algoritma Least Recently Used (LRU), yaitu meng-kill proses yang
2.4.Penelitian Terdahulu
Beberapa penelitian terdahulu yang telah dilakukan seputar topik ini adalah:
1. Analyzing Human Solving Methods for Rubik’s Cube and similar
Puzzles(Pochmann , 2008)
Pada penelitian ini penulis menganalisa berbagai metode yang digunakan
manusian untuk menyelesaikan rubik cube dan puzzle lainnya yang mirip
tanpa bantuan alat komputasi apapun dan menggunakan hasil analisa tersebut
untuk membuat sebuah program penyelesaian rubik cube.
2. Finding Optimal Solutions to Rubik's Cube Using Pattern Databases (Korf
,1997)
Penelitian ini adalah penelitian pertama yang berupaya untuk menemukan
solusi optimal untuk beberapa sampel kubus teracak yang sudah ditentukan
dengan menggunakan pendekatan komputasional , yaitu dengan
menggunakan algoritma pencarian IDA* pada tabel pencarian dalam Pattern
Database .
3. The Group Theoretic Rubik's cube (Cotten ,2009)
Penelitian ini ” membedah” Rubik’s cube pada sisi matematisnya , dimana
pendekatan teori grup digunakan untuk membagi – bagi kubus ke dalam