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.Jawaban:
Konektor (Jawa)
Mencoba membuat jalur pada posisi acak. Karena tidak dapat membuat jalur sendiri, ia mencari sel yang aktif dan menggunakannya. Kredit jatuh ke Geobits, dari siapa aku mencuri beberapa kode. Juga, pengiriman ini belum selesai, karena hanya berhenti melakukan apa pun begitu jalan dibangun.
Sunting: Jika jalur dibangun, Connector mencoba membuat beberapa jalur di sepanjang jalur yang ada.
sumber
java.lang.ArrayIndexOutOfBoundsException: -1 at Connector.findExtendingPathPoint(Connector.java:166)
.Funnelweb, Python 2
versi 1.2 - Kode bergabung lebih baik, menambahkan animasi baru
Dinamai berdasarkan salah satu laba-laba Australia yang kurang bersahabat. Bot ini pertama kali membangun sarang berbentuk corong di baris atas, lalu memikat bot lain ke jalur pembangunan untuk lalu lintas ke sarang.
Berikut ini adalah animasi baru dari game 6 bot pada papan 4 / 3N ^ 2 yang menunjukkan funnelweb dan beberapa bot yang lebih sederhana:
Kode Python corong:
Laba-laba dijalankan bersama
python funnelweb.py
.sumber
Pos pemeriksaan, Jawa
Bot ini mencoba membuat pos pemeriksaan sehingga setiap jalur yang valid melewati salah satu simpul saya. Karena ada N 2 belokan dan papan 2N 2 melintang, saya dapat mengaktifkan / memecah setiap node pada satu garis horizontal tunggal (dengan asumsi saya di sana terlebih dahulu). Lakukan ini dalam pola bolak-balik (
x
rusak,o
milik saya):Jika Anda ingin membuat jalur, Anda harus melewati pos pemeriksaan saya :)
Sekarang, ada beberapa masalah yang mungkin dihadapi. Pertama, itu tidak akan bekerja dengan baik sama sekali kecuali ada banyak jalan. Karena ia tidak membuat setiap jalur produktif dirinya sendiri, ia benar-benar benar-benar bergantung pada adanya beberapa pesaing. Bahkan beberapa pesaing yang bergabung untuk membuat jalur tunggal tidak akan banyak membantu, karena ia hanya mendapat skor satu tempat untuk setiap jalur yang ditemukan. Apa yang dia butuhkan untuk bersinar mungkin beberapa bot membuat beberapa jalur yang berbeda. Meskipun begitu, skornya mungkin tidak terlalu tinggi, tetapi itu adalah ide yang saya miliki dalam obrolan, jadi ...
Jika salah satu spasi pada baris diblokir / diklaim sudah, saya hanya mencari tempat terdekat yang dapat saya gunakan (lebih disukai pada
x
baris yang sama , hanya bergeser secara vertikal).Untuk mengkompilasi, itu
javac Checkpoint.java
. Untuk menjalankanjava Checkpoint
,. Anda ingin menambahkan / mengubah jalur untuk mencerminkan di mana pun itu.sumber
Semangka, Jawa
Mencoba menggambar semangka di grid.
sumber
FaucetBot (dalam R)
Membuat bottleneck di baris kedua, dan mengaktifkan node di jalur di belakangnya.
Jika saya tidak mengacau, konfigurasi akhir harus seperti:
Perintah adalah
Rscript FaucetBot.R
.sumber
Pembuat perdamaian, Jawa
Berdasarkan kode Manu.
Zona konflik pencarian pembuat perdamaian (yaitu kebanyakan titik puncak BROKEN atau ACTIVE) dan mengaktifkan titik acak terdekat.
sumber
while
loopactivate
metode. Anda menghentikan pencarian begitu Anda menemukan titik yang bukan milik Anda dan tidak rusak - tetapi bisa dimiliki oleh orang lain, sehingga Anda tidak dapat mengaktifkannya.Pembangun Acak, Python 3
Ini adalah contoh bot bodoh yang tidak pernah menghancurkan apa pun, dan mencoba mengaktifkan simpul acak setiap belokan. Perhatikan bahwa tidak perlu memeriksa apakah titik tidak aktif; controller menangani itu.
Jalankan dengan perintah
Anda mungkin perlu mengganti
python3
denganpython
bergantung pada instalasi Python Anda. Untuk melakukan ini, cukup editbots.txt
file. Saya memperbarui controller, dan tidak perlu lagi mengacaukan path file.sumber
sys.stdout.flush()
Anda bisa melakukannyaflush=True
sebagai argumenprint
.Explorer, Python 3
Strategi aktivasi:
Membuat peta panas berdasarkan keadaan setiap simpul (aktif / tidak aktif / rusak) dan memilih simpul yang akan memiliki nilai peta panas terbesar yang diharapkan per orang jika akan memilih yang itu.
Strategi penghancuran:
Jangan pernah menghancurkan apa pun karena itu tidak banyak membantu bot.
sumber
Gangguan, Bash
Mencoba membuat hasilnya terlihat lebih menarik.
Jalankan dengan
bash annoyance.sh
.sumber
Manusia Tengah
Saya melihat beberapa bot dibangun dari atas, dan beberapa dari bawah. Ini adalah yang pertama (saya pikir) untuk memulai di tengah dan bekerja naik turun.
(tidak diuji dengan controller, jadi jika dosisnya tidak berfungsi, beri tahu saya.)
sumber