CATATAN: Tantangan ini saat ini sudah mati, karena saya tidak dapat menginstal bahasa yang diperlukan untuk menjalankan pertandingan. Jika orang lain punya waktu dan minat untuk melakukannya, saya tidak menentang.
Lihat bagian bawah pos untuk melihat papan peringkat.
Ini adalah tantangan king-of-the-hill semi-kooperatif, di mana bot membangun jalur melalui grafik grid dua dimensi. Bot yang mengontrol node dengan lalu lintas terbanyak adalah pemenangnya. Namun, dibutuhkan lebih dari satu sumber daya bot untuk benar-benar membangun jalur penghubung, sehingga bot harus bekerja bersama - sampai batas tertentu.
Gameplay
Berikut ini, biarlah N > 0
jumlah bot yang dimainkan.
Grid
Permainan ini dimainkan pada kisi-kisi bilangan bulat dua dimensi , yang koordinat bawahnya berada . Setiap koordinat dengan memiliki tepi keluar ke tiga koordinat , dan di atas itu, di mana -coordinates diambil modulo . Ini berarti bahwa grid membungkus di tepi timur dan barat. Setiap koordinat bawah adalah sumber , dan setiap koordinat atas adalah sebuah wastafel .⌊4/3N2⌋ × ⌊4/3N2⌋
(0,0)
(x,y)
0 ≤ y < ⌊4/3N2⌋-1
(x-1,y+1)
(x,y+1)
(x+1,y+1)
x
⌊4/3N2⌋
(x,0)
(x,⌊4/3N2⌋-1)
Gambar berikut menunjukkan 8 × 8
kotak.
Setiap simpul grafik tidak aktif , aktif , atau rusak . Semua simpul mulai tidak aktif, dan dapat diaktifkan oleh bot, yang kemudian akan menjadi pemiliknya. Juga, bot dapat mematahkan simpul, dan mereka tidak dapat diperbaiki.
Ubah Pesanan
Giliran terdiri dari fase penghancuran dan fase aktivasi . Pada fase penghancuran, setiap bot dapat mematahkan satu simpul tidak aktif. Titik itu rusak sejak saat itu, dan mungkin tidak diaktifkan oleh siapa pun. Pada fase aktivasi, setiap bot dapat mengaktifkan satu titik tidak aktif. Sejak saat itu, mereka memiliki simpul itu, dan itu tidak dapat diaktifkan kembali oleh orang lain. Beberapa bot mungkin memiliki satu simpul, jika mereka semua mengaktifkannya pada belokan yang sama. Dalam setiap fase, pemilihan titik dilakukan secara bersamaan.
Mencetak gol
Satu putaran berlangsung untuk belokan yang tepat . Setelah ini, ronde tersebut dicetak sebagai berikut. Dari setiap simpul sumber aktif, kami melakukanN2
N
pencarian acak kedalaman-pertama sepanjang simpul aktif (artinya anak-anak dari setiap simpul dikunjungi dalam urutan acak). Jika jalur ditemukan dari sumber ke beberapa wastafel, maka untuk semua simpul di sepanjang jalur itu, setiap pemilik titik mendapatkan satu titik.
Seluruh permainan berlangsung selama 100 putaran, dan bot dengan poin terbanyak secara keseluruhan adalah pemenangnya. Saya dapat menambah angka ini, jika varians skornya terlalu tinggi.
Aturan tambahan
- Tidak main-main dengan controller atau kiriman lainnya.
- Paling banyak satu pengajuan per kontestan.
- Tidak ada sumber daya eksternal, kecuali satu file teks pribadi, yang dihapus pada awal permainan.
- Jangan mendesain bot Anda untuk mengalahkan atau mendukung lawan tertentu.
- Berikan perintah untuk mengkompilasi dan menjalankan bot Anda. Kompiler / juru bahasa yang tersedia secara bebas untuk Debian Linux dapat diterima.
Pengendali
Kontroler ditulis dalam Python 3, dan dapat ditemukan di GitHub . Lihat file README untuk instruksi terperinci. Berikut ini API untuk membantu Anda memulai:
- Bot dimulai pada awal setiap putaran, dan bertahan hingga akhir putaran. Komunikasi dengan pengontrol melalui STDIN dan STDOUT, menggunakan pesan yang diakhiri baris baru.
BEGIN [num-of-bots] [num-of-turns] [side-length]
adalah input di awal.DESTROY [turn]
adalah input pada awal setiap tahap kehancuran. Bot Anda akan merespons dengan baikVERTEX x,y
untuk memilih titik, atauNONE
.BROKEN [turn] [your-choice] [other-choices]
adalah input pada akhir setiap fase kehancuran. Urutan bot lain diacak pada awal setiap pertandingan, tetapi tetap ditetapkan selama itu. Pilihannya disajikan sebagaix,y
atauN
.ACTIVATE [turn]
danOWNED [turn] [your-choice] [other-choices]
merupakan padanan di atas untuk fase aktivasi, dan memiliki semantik yang sama.SCORE [your-score] [other-scores]
adalah input di akhir permainan.- Bot Anda memiliki 1 detik untuk menganalisis hasil fase dan memilih titik berikutnya, dan 1 detik untuk berhenti setelah diberi skor. Saya akan menguji pengiriman pada laptop saya yang relatif lama, jadi lebih baik meninggalkan sedikit margin di sini.
Harap ingat untuk membersihkan buffer output Anda.Tidak melakukannya dapat menggantung pengontrol di beberapa lingkungan.
Papan peringkat
Diperbarui 3/13/2015
Peacemaker aktif dan berjalan, dan Funnelweb juga menerima pembaruan. Skor melonjak dengan urutan besarnya. Connector melebihi batas waktu dalam dua game.
Funnelweb: 30911
Connector: 18431
Watermelon: 3488
Annoyance: 1552
Explorer: 735
Checkpoint: 720
Random Builder: 535
FaucetBot: 236
Peacemaker: 80
Log lengkap dengan grafik seni ASCII dapat ditemukan di repositori pengontrol, di graphical_log.txt
.
Beberapa pengamatan:
- Konektor dapat dengan mudah dihentikan dengan mematahkan satu titik di depannya. Saya menduga Gangguan sering melakukan ini. Namun, saat ini tidak masuk akal karena hanya Connector yang dapat membangun jalur.
- Semangka bisa mendapatkan skor yang layak hanya dengan berada di jalur penghubung (karena DFS sangat mungkin menggunakan simpulnya).
- Penjelajah suka menanam tanaman merambat dari semangka.
- Funnelweb yang diperbarui mendapatkan skor yang sangat bagus, karena Connector biasanya menempel di bagian bawah grid.
- Permainan semakin lama, putaran rata-rata membutuhkan sekitar 25 detik pada mesin saya.
4/3*N^2
, dan bahkan di sana, bot memiliki masalah dalam membentuk jalur yang valid. Namun, Connector untuk sementara didiskualifikasi karena kesalahan, dan sekarang setelah diperbaiki, saya berharap game menjadi lebih menarik. Saya akan menjalankan batch lain malam ini.