Sokoban adalah orang Jepang untuk penjaga gudang dan video game tradisional. Gim ini adalah teka -teki transportasi, di mana pemain harus mendorong semua kotak di ruangan di lokasi/ target penyimpanan. Kemungkinan membuat kesalahan yang tidak dapat diubah membuat teka -teki ini begitu menantang terutama untuk algoritma pembelajaran penguatan, yang sebagian besar tidak memiliki kemampuan untuk berpikir ke depan.
Repositori ini mengimplementasikan permainan Sokoban berdasarkan aturan yang disajikan agen augmented makalah yang disajikan oleh DeepMind untuk pembelajaran penguatan yang mendalam. Generasi kamar acak dan oleh karena itu, akan memungkinkan untuk melatih jaringan saraf yang dalam tanpa overfitting pada satu set kamar yang telah ditentukan.
| Contoh Game 1 | Contoh Game 2 | Contoh Game 3 |
|---|---|---|
![]() | ![]() | ![]() |
pip install gym-sokobangit clone [email protected]:mpSchrader/gym-sokoban.git
cd gym-sokoban
pip install -e .Lihat contoh tentang cara menggunakan lingkungan gym eksternal.
Setiap kamar terdiri dari lima elemen utama: dinding, lantai, kotak, target kotak, dan seorang pemain. Mereka mungkin memiliki negara bagian yang berbeda apakah mereka tumpang tindih dengan target kotak atau tidak.
| Jenis | Negara | Grafis | Tinyworld |
|---|---|---|---|
| Dinding | Statis | ![]() | ![]() |
| Lantai | Kosong | ![]() | ![]() |
| Target kotak | Kosong | ![]() | ![]() |
| Kotak | Di luar target | ![]() | ![]() |
| Kotak | Tepat sasaran | ![]() | ![]() |
| Pemain | Di luar target | ![]() | ![]() |
| Pemain | Tepat sasaran | ![]() | ![]() |
Gim ini memberikan 9 tindakan untuk berinteraksi dengan lingkungan. Dorong dan pindahkan tindakan ke arah ke atas, ke bawah, kiri dan kanan. Tindakan No Operation adalah tindakan batal, yang tidak mengubah apa pun di lingkungan. Pemetaan nomor tindakan ke tindakan aktual terlihat sebagai berikut
| Tindakan | PENGENAL |
|---|---|
| Tidak ada operasi | 0 |
| Push up | 1 |
| Menekan | 2 |
| Dorong ke kiri | 3 |
| Dorong ke kanan | 4 |
| Naik | 5 |
| Bergerak ke bawah | 6 |
| Bergerak ke kiri | 7 |
| Bergerak ke kanan | 8 |
Bergerak hanya bergerak jika ada bidang bebas ke arah, yang berarti tidak ada kotak pemblokiran atau dinding.
Push Push mencoba memindahkan kotak yang berdekatan jika bidang berikutnya di belakang kotak gratis. Ini berarti tidak ada rantai yang mendorong kotak yang mungkin terjadi. Jika tidak ada kotak di bidang yang berdekatan, aksi push ditangani dengan cara yang sama seperti tindakan bergerak ke arah yang sama.
Menyelesaikan permainan dengan mendorong semua pada target memberikan hadiah 10 pada langkah terakhir. Juga mendorong kotak pada atau di luar target memberikan hadiah masing -masing dari -1. Selain itu, hadiah -0.1 diberikan untuk setiap langkah, ini menghukum solusi dengan banyak langkah.
| Alasan | Hadiah |
|---|---|
| Lakukan langkah | -0.1 |
| Push Box tepat | 1.0 |
| Target Push Box off | -1.0 |
| Dorong semua kotak pada target | 10.0 |
Setiap kali lingkungan Sokoban dimuat atau mengatur ulang kamar baru dihasilkan secara acak. Generasi ini terdiri dari 3 fase: generasi topologi, penempatan target dan pemain, dan bermain terbalik.
Untuk menghasilkan topologi dasar ruangan, yang terdiri dari dinding dan lantai kosong, didasarkan pada jalan acak, yang mengubah arahnya pada probabilitas 0,35. Pada setiap langkah yang berpusat pada posisi saat ini, pola bidang diatur ke ruang kosong. Pola yang digunakan dapat ditemukan pada Gambar 2.

Gambar 2: Topeng untuk membuat topologi
Selama fase ini, pemain termasuk semua target N kotak ditempatkan pada ruang kosong yang dipilih secara acak.
Ini adalah fase penting untuk memastikan kamar yang dapat dipecahkan. Sekarang Sokoban dimainkan secara terbalik, di mana seorang pemain dapat bergerak dan menarik kotak. Tujuan dari fase ini adalah untuk menemukan keadaan kamar, dengan skor kamar tertinggi, dengan pencarian pertama yang mendalam. Untuk setiap kamar yang dieksplorasi selama pencarian adalah skor kamar dihitung dengan persamaan yang ditunjukkan di bawah ini. Persamaannya adalah pendekatan heuristik untuk mengevaluasi kesulitan ruangan. Boxswaps menghitung berapa kali seorang pemain mengubah kotak untuk menarik. BoxDisplacement adalah jarak Manhattan antara kotak tertentu dan target kotak asal. Selama setidaknya satu kotak berada pada target, ruang kamar selalu 0.
Sokoban memiliki banyak variasi yang berbeda, seperti: ukuran kamar, jumlah kotak, mode rendering, atau aturan.
Selain rendering Sokoban biasa, setiap konfigurasi dapat dianggap sebagai Tinyworld, yang memiliki ukuran piksel yang sama dengan ukuran grid. Untuk mendapatkan lingkungan yang diterjemahkan sebagai dunia kecil, cukup tambahkan tiny_ di depan mode rendering. Misalnya: env.render('tiny_rgb_array', scale=scale_tiny) . Skala memungkinkan untuk meningkatkan ukuran pengamatan dunia kecil yang diberikan. Menggunakan skala dalam kombinasi dengan mode rendering, human atau rgb_array , tidak mempengaruhi ukuran output. Mode rendering yang tersedia adalah:
| Mode | Keterangan |
|---|---|
| rgb_array | Gambar RGB 2D yang terlihat baik |
| manusia | Menampilkan keadaan saat ini di layar |
| tiny_rgb_array | Setiap piksel yang menggambarkan satu elemen di dalam ruangan |
| Tiny_human | Menampilkan RGB_Array kecil di layar |
Konfigurasi kamar yang tersedia ditampilkan di tabel di bawah ini.
| ID kamar | Ukuran kisi | Piksel | #Boxes | Contoh | Tinyworld |
|---|---|---|---|---|---|
| Sokoban-V0 | 10x10 | 160x160 | 3 | ![]() | ![]() |
| Sokoban-V1 | 10x10 | 160x160 | 4 | ![]() | ![]() |
| Sokoban-V2 | 10x10 | 160x160 | 5 | ![]() | ![]() |
| Sokoban-Small-V0 | 7x7 | 112x112 | 2 | ![]() | ![]() |
| Sokoban-Small-V1 | 7x7 | 112x112 | 3 | ![]() | ![]() |
| Sokoban-Large-V0 | 13x11 | 208x176 | 3 | ![]() | ![]() |
| Sokoban-Large-V1 | 13x11 | 208x176 | 4 | ![]() | ![]() |
| Sokoban-Large-V2 | 13x11 | 208x176 | 5 | ![]() | ![]() |
| Sokoban-Huge-V0 | 13x13 | 208x208 | 5 | ![]() | ![]() |
Harap dicatat bahwa kamar yang lebih besar mungkin membutuhkan waktu untuk dibuat, terutama di laptop.
Selain game reguler Sokoban, repositori ini mengimplementasikan atau akan menerapkan variasi, yang mungkin membuat game lebih mudah atau lebih rumit. Kecuali dicatat secara berbeda variasinya tidak mengimplementasikan versi dunia kecil.
| Variasi | Ringkasan | Kesulitan yang diharapkan | Contoh | Dunia kecil | Status | Detail |
|---|---|---|---|---|---|---|
| Target tetap | Setiap kotak harus didorong pada target dengan warna yang sama. | Lebih sulit | ![]() | Ya | diterapkan | Readme |
| Banyak pemain | Ada dua pemain di ruangan itu. Setiap putaran salah satu dari dua pemain dapat digunakan. Tidak ada urutan gerakan antara kedua pemain. | Lebih sulit | ![]() | Ya | diterapkan | Readme |
| Dorong & Tarik | Pemain tidak hanya bisa mendorong kotak, tetapi juga menariknya. Oleh karena itu, tidak ada lagi gerakan yang tidak dapat diubah. | Lebih mudah | ![]() | Ya | diterapkan | Readme |
| Boxoban | Penggunaan oleh DeepMind teka -teki Sokoban yang pregenerasi. | Serupa | ![]() | Ya | Diterapkan | Readme |
Jika Anda menggunakan repositori ini untuk penelitian Anda, silakan kutip dengan informasi berikut:
@misc{SchraderSokoban2018,
author = {Schrader, Max-Philipp B.},
title = {gym-sokoban},
year = {2018},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/mpSchrader/gym-sokoban}},
commit = {#CommitId}
}
Jangan ragu untuk menghubungi saya untuk membicarakan proyek ini atau lainnya. Baik dengan membuat masalah atau kirimkan saya di LinkedIn.
Jika Anda mencapai akhir dan menyukai proyek ini, silakan tunjukkan penghargaan Anda dengan memulai proyek ini .
Jangan ragu untuk berkontribusi pada proyek ini dengan membayar repo dan menerapkan apa pun yang Anda lewatkan. Atau, buka masalah baru jika Anda membutuhkan bantuan atau ingin menambahkan fitur.