Hasil (22 Mei 2017 21:40:37 UTC)
Master
memenangkan 18 putaran, kalah 2 putaran, dan diikat 0 putaran
Save One
memenangkan 15 putaran, kalah 3 putaran, dan diikat 2 putaran
Machine Gun
memenangkan 14 putaran, kalah 3 putaran, dan diikat 3 putaran
Monte Bot
memenangkan 14 putaran, kalah 3 putaran, dan diikat 3 putaran
Amb Bot
menang 12 putaran, kalah 8 putaran, dan diikat 0 putaran
Coward
memenangkan 11 putaran, kalah 3 putaran, dan diikat 6 putaran
Pain in the Nash
memenangkan 11 putaran, kalah 9 putaran, dan diikat 0 putaran
Nece Bot
memenangkan 10 putaran, kalah 7 putaran, dan diikat 3 putaran
Naming Things is Hard
memenangkan 10 putaran, kalah 7 putaran, dan diikat 3 putaran
The Procrastinator
memenangkan 10 putaran, kalah 8 putaran, dan diikat 2 putaran
Yggdrasil
memenangkan 10 putaran, kalah 10 putaran, dan diikat 0 putaran
Simple Bot
memenangkan 9 putaran, kalah 4 putaran, dan diikat 7 putaran
Table Bot
memenangkan 9 putaran, kalah 6 putaran, dan diikat 5 putaran
Prioritized Random Bot
memenangkan 8 putaran, kalah 7 putaran, dan diikat 5 putaran
Upper Hand Bot
memenangkan 7 putaran, kalah 13 putaran, dan diikat 0 putaran
Aggressor
memenangkan 6 putaran, kalah 10 putaran, dan diikat 4 putaran
Insane
memenangkan 5 putaran, kalah 15 putaran, dan diikat 0 putaran
The Ugly Duckling
memenangkan 4 putaran, kalah 16 putaran, dan diikat 0 putaran
Know Bot
menang 3 putaran, kalah 14 putaran, dan diikat 3 putaran
Paranoid Bot
memenangkan 0 putaran, kalah 19 putaran, dan diikat 1 putaran
Panic Bot
menang 0 putaran, kalah 19 putaran, dan diikat 1 putaran
Sayangnya saya tidak bisa menguji The Crazy X-Code Randomess karena saya tidak bisa menjalankannya dari bash di Linux. Saya akan memasukkannya jika saya bisa membuatnya bekerja.
Permainan
Ini adalah game KoTH yang sangat sederhana. Ini pertarungan bola salju satu lawan satu. Anda memiliki wadah yang awalnya kosong yang dapat menampung k
bola salju. Anda dapat meringkuk hingga j
waktu. Setiap belokan, kedua pemain diminta untuk secara bersamaan memberikan pilihan untuk gerakan apa yang harus dilakukan. Ada tiga langkah:
- ulang: memberi Anda bola salju lain (hingga
k
) - throw: melempar bola salju, yang akan membunuh pemain lain jika mereka memutuskan untuk memuat ulang. Jika kedua pemain melempar bola salju, tidak ada yang mati (mereka memiliki tujuan yang sangat baik sehingga mereka akan saling memukul bola salju satu sama lain)
- bebek: tidak melakukan apa-apa, dan menghindari pukulan jika pemain lain melempar bola salju. Jika Anda tidak memiliki bebek yang tersisa, maka tidak ada yang terjadi dan jika pemain lain melempar bola salju, Anda akan mati.
Objektif
Jangan mati.
Spesifikasi Challlenge
Program Anda dapat ditulis dalam bahasa apa pun. Anda harus mengambil masing-masing variabel ini sebagai argumen pada setiap eksekusi:
[turn, snowballs, opponent_snowballs, ducks, opponent_ducks, max_snowballs]
turn
- Berapa banyak putaran telah berlalu ( 0
pada iterasi pertama)
snowballs
- Berapa banyak bola salju yang Anda miliki
opponent_snowballs
- Berapa banyak bola salju yang dimiliki lawan
ducks
- Berapa kali Anda bisa bebek
opponent_ducks
- Berapa kali lawan dapat merunduk
max_snowballs
- Jumlah maksimum bola salju yang Anda bisa toko ( k
)
Output fungsi kunci harus 0
untuk memuat ulang, 1
untuk melempar, dan 2
untuk bebek. Anda harus menampilkan gerakan Anda, baris baru dihentikan. Tolong jangan membuat output gerakan yang tidak valid, tetapi pengontrolnya sangat ulet dan tidak akan pecah jika Anda menghasilkan gerakan yang tidak valid (bahkan jika gerakan Anda bahkan bukan bilangan bulat). Itu harus diakhiri baris baru. Jika pemindahan itu tidak ada [0, 1, 2]
, itu akan memindahkan bawaan Anda ke 0
. Pemenang akan ditentukan sebagai pemain dengan kemenangan terbanyak dari turnamen round-robin penuh.
Aturan
Anda dapat membaca / menulis dari / ke satu file untuk penyimpanan memori antara iterasi. Bot Anda akan ditempatkan di direktori sendiri sehingga konflik nama file tidak akan terjadi. Anda tidak dapat mengubah fungsi bawaan (seperti generator acak). Itu cukup lucu saat pertama kali dilakukan , tetapi tidak akan lagi. Program Anda tidak diperbolehkan melakukan hal-hal yang hanya penghentian eksekusi yang mencolok. Celah Standar Berlaku .
Pengujian
Kode sumber untuk pengontrol dapat ditemukan di sini . Contoh menjalankannya: java Controller "python program1/test1.py" "python program2/test2.py" 10 5
untuk 10 bola salju dan 5 bebek.
Menilai
Pemenang akan diputuskan dengan memilih orang dengan kemenangan terbanyak setelah round-robin penuh. Meskipun ini adalah seri, singkirkan semua orang yang tidak memiliki kemenangan terbanyak. Kemudian, ulangi sampai satu orang menang. Standar penjurian adalah 50 bola salju dan 25 bebek.
Selamat KoTHing!
EDIT : Permainan akan dinyatakan seri jika 1000 putaran berhasil. Bot Anda mungkin menganggap itu turn < 1000
.
sumber
Jawaban:
Master, C #
Saya melatih jaringan saraf kecil (menggunakan Sharpneat ). Sepertinya suka mengambil bola salju dan menghindar ...
Dalam versi sebelumnya dari pengontrol, ia bahkan menemukan bug. Itu berubah dari 0% menang menjadi 100% ketika menemukan cara untuk menang dengan menipu.
Sunting: Saya lupa mengatur ulang status interal jaringan dan melatih jaringan yang salah. Jaringan yang baru dilatih jauh lebih kecil.
sumber
Simpan Satu, Python
Melemparkan sebagian besar bola saljunya segera, tetapi selalu menyelamatkan satu jika lawan sedang mengawasi kekurangan amunisi. Kemudian, itik selama mungkin (sekali lagi, hemat 1) sebelum memuat ulang kecuali ada jaminan aman memuat kembali atau dijamin membunuh.
sumber
DiprioritaskanRandomBot, Jawa
Bot ini menyeleksi bilangan bulat acak dalam kisaran
0
untukos + od
, dan kemudian memilih untuk baik lemparan, bebek, atau isi ulang, dengan batas yang ditentukan oleh jumlah saat ini bola salju dan bebek.Satu hal yang penting untuk disadari, adalah bahwa sekali satu bot memiliki lebih banyak bola salju daripada bot lainnya memiliki bola salju + bebek, maka Anda dapat memaksa menang. Dari sini, kita dapat memunculkan konsep "poin":
Jika salah satu dari angka-angka ini menjadi positif, maka pemain itu dapat memaksa menang.
Tabel "perbedaan poin" membentuk dasar teori permainan untuk kompetisi ini. Itu tidak cukup menangkap semua informasi, tetapi itu menunjukkan bagaimana bola salju secara fundamental lebih berharga daripada bebek (karena bola salju adalah pelanggaran dan pertahanan). Jika lawan melempar bola salju dan Anda berhasil mengelak, maka Anda selangkah lebih dekat ke kemenangan paksa, karena lawan Anda menggunakan sumber daya yang lebih berharga. Tabel ini juga menjelaskan apa yang harus Anda lakukan dalam banyak kasus khusus, seperti ketika opsi pemindahan tertentu tidak tersedia.
Tabel "jumlah poin" menunjukkan bagaimana, seiring waktu, jumlah poin mendekati nol (karena kedua pemain kehabisan bebek), pada titik mana pemain pertama melakukan kesalahan (memuat kembali saat mereka tidak perlu) segera kalah.
Sekarang, mari kita coba memperluas strategi pemaksaan ini ke kasus-kasus di mana itu sebenarnya tidak bisa dipaksakan (seperti, kita menang dengan margin besar tetapi membaca pikiran pada bagian lawan akan mengalahkan kita). Pada dasarnya, kita memiliki
s
bola salju tetapi perlu bola salju lawans+1
(ataus+2
, dll) waktu berturut-turut untuk menang Dalam hal ini, kami ingin melakukan beberapa itik atau beberapa isi ulang untuk membeli waktu.Saat ini, bot ini selalu mencoba menyelinap di beberapa bebek, hanya karena itu tidak berisiko kehilangan segera: kami menganggap bahwa lawan mengikuti strategi yang sama seperti melemparkan bola salju sebanyak mungkin, sehingga upaya untuk memuat kembali benar-benar berbahaya. Juga, untuk mencegah prediktabilitas, kami ingin menyelinap dalam mengikuti distribusi acak-acak: probabilitas merunduk terkait dengan berapa banyak bebek yang perlu kita lakukan relatif terhadap jumlah bola salju yang perlu kita lempar.
Jika kita kalah parah, dalam hal ini
s + d < os + od
maka kita perlu menyelinap masuk kembali selain menggunakan semua itik kita, dalam hal ini, kita ingin memuat ulang secara acak, tetapi hanya sebanyak yang kita butuhkan.Inilah sebabnya mengapa bot kami memprioritaskan dalam urutan lemparan, bebek, dan muat ulang, dan gunakan
os + od
untuk menghasilkan angka acak, karena itu adalah jumlah ambang batas langkah yang perlu kita buat.Ada satu case edge, dan dua case khusus lainnya, yang saat ini ditangani oleh bot. Kasus tepi adalah ketika lawan tidak memiliki bola salju atau bebek, sehingga pengacakan tidak berfungsi, jadi kami melempar jika memungkinkan, jika tidak, kami memuat ulang. Satu kasus khusus lainnya adalah ketika lawan tidak dapat memuat ulang, sehingga tidak ada manfaat untuk melempar (karena lawan akan merunduk atau melempar), jadi kami selalu merunduk (karena menyelamatkan bola salju kami lebih berharga daripada menyelamatkan bebek kami). Kasing khusus terakhir adalah jika lawan tidak memiliki bola salju, dalam hal ini kami memainkannya dengan aman dan memuat ulang jika memungkinkan.
sumber
NeceBot - Python
Inilah tabel teori permainan untuk game:
Di mana
~
berarti tidak ada keuntungan,W
menang,L
kalah,+-S
berarti bola salju diperoleh / kalah atas lawan, dan+-D
berarti bebek diperoleh / kalah atas lawan. Ini adalah game yang sepenuhnya simetris.Perhatikan bahwa solusi saya tidak memperhitungkan tabel itu. Karena saya buruk dalam matematika.
Ini disebut NeceBot karena mencoba mengurangi apa yang perlu terlebih dahulu. Ini memiliki beberapa strategi sewenang-wenang setelah itu, yang saya harap berhasil.
sumber
<3
s. +1 karena memiliki meja permainan dan kemudian tidak menggunakannya: P Tapi solusi yang bagus :)3 + opponent_snowballs <3
ini mungkin kesalahan?<3
s membuat kode ini cukup sulit untuk dipahami :(Pengecut - Scala
Melempar, jika lawan tidak memiliki amunisi, jika tidak (sesuai urutan prioritas) bebek, lemparan atau reload.
sumber
TheUglyDuckling - Python
Akan selalu merunduk sampai tidak bisa kemudian mencoba untuk melempar jika lawan kosong atau memuat ulang jika keduanya kosong. Akan menggunakan memuat ulang sebagai pilihan terakhir.
sumber
SimpleBot - Python 2
Hal-hal sederhana.
sumber
Bot Penamaan-hal-ini-sulit - VB.NET
Memberi penamaan adalah hal yang sulit, dan saya tidak yakin saya memiliki strategi yang kohesif.
Berusaha mempertaruhkan beberapa putaran pertama untuk mendapatkan kemenangan awal. Setelah itu, bermain lebih aman dari sisa waktu, mencoba menang dengan gesekan.
sumber
MachineGun, Python 3
Berusaha untuk menyimpan bola salju sampai dijamin membunuh lawan, atau sampai keluar dari bebek (Dalam hal ini, ia mulai menembakkan semua bola salju secara membabi buta, seperti senapan mesin)
Ia juga bebek setiap kali lawan memiliki bola salju, karena ia tidak ingin mati.
sumber
Knowbot, Python3
Melacak frekuensi gerakan sebelumnya, dengan asumsi lawan akan membuat yang paling sering lagi, bertahan melawan itu.
** Diperbarui untuk tidak mengharapkan gerakan yang tidak bisa dilakukan lawan **
sumber
Braingolf , Sang Penyerang
Penyerang itu bukan pengecut! Jika dia memiliki bola salju, dia akan melempar! Jika dia tidak memiliki bola salju, dia akan menghasilkan lebih banyak!
Braingolf , Gila
Ini sebenarnya bukan bot, itu hanya seorang programmer yang saya culik dan dipaksa untuk port setiap proyek yang pernah dibuatnya untuk braingolf. Dia tidak lagi memiliki sedikit pun kewarasan.
Menghasilkan angka acak kurang dari 3, dan menghasilkan di
t % r
mana t adalah belokan saat ini dan r adalah angka acakUntuk menjalankan ini, Anda harus mengunduh
braingolf.py
dari github, lalu simpan kode braingolf ke file dan jalankanatau cukup masukkan kode langsung seperti ini
Inputnya cukup tidak relevan sepanjang argumen ke-2 setelah kode / nama file adalah jumlah bola salju yang dimiliki Aggressor.
Catatan: agresor sebenarnya berperilaku identik dengan TestBot, saya hanya ingin membuat entri di braingolf
Braingolf , The Brainy [Rusak sekarang]
sumber
TestBot - Python
Ini adalah kiriman tes untuk menunjukkan seperti apa kiriman itu. Strategi: Pengganti reload dan lempar secara bergantian. Strategi yang cukup buruk tetapi memberi Anda gambaran tentang bagaimana program Anda harus bekerja.
sumber
_, turn, snowballs, opponent_snowballs, ducks, opponent_ducks, max_snowballs = sys.argv
argumennya?sys.argv[1:]
jika Anda tidak ingin mengacaukannya_
UpperHandBot, Python 3
Bot ini mencoba mengumpulkan lebih banyak bola salju daripada lawannya, dan pada saat itu mulai melempar. Jika suatu saat UHB tidak memiliki lebih banyak bola salju daripada lawannya, itu akan:
sumber
Yggdrasli, Jawa
Saya menamakan bot ini "Yggdrasil" karena ia benar-benar melihat ke bawah pohon permainan dan melakukan penilaian negara, dari mana ia dapat menghitung strategi campuran yang kira-kira ideal. Karena bergantung pada strategi campuran, itu sangat non-deterministik. Saya tidak tahu seberapa baik hal ini akan dilakukan dalam persaingan nyata.
Beberapa hal tentang bot ini:
sumber
Nyeri di Nash (C ++)
Disebut demikian karena fakta bahwa saya harus menulis pemecah kesetimbangan Nash saya sendiri sangat menyakitkan. Saya kagum bahwa tidak ada perpustakaan penyelesaian Nash yang tersedia!
Kompilasi sebagai C ++ 11 atau lebih baik. Untuk kinerja, sebaiknya dikompilasi dengan dukungan OpenMP (tapi ini hanya untuk kecepatan; itu tidak diperlukan)
Ini menggunakan kesetimbangan Nash untuk memutuskan apa yang harus dilakukan pada setiap belokan, yang berarti bahwa secara teori itu akan selalu menang atau seri dalam jangka panjang (dalam banyak pertandingan), apa pun strategi yang digunakan lawan. Apakah itu yang terjadi dalam praktik tergantung pada apakah saya membuat kesalahan dalam implementasi. Namun, karena kompetisi KoTH ini hanya memiliki satu putaran melawan masing-masing lawan, itu mungkin tidak akan berhasil dengan baik di papan peringkat.
Ide awal saya adalah memiliki fungsi penilaian sederhana untuk setiap kondisi permainan (mis. Setiap bola bernilai + b, setiap bebek adalah + d), tetapi ini mengarah pada masalah yang jelas mencari tahu seperti apa penilaian itu seharusnya, dan berarti itu tidak bisa bertindak atas berkurangnya pengembalian semakin banyak bola, dll. Jadi, ini akan menganalisis seluruh pohon permainan , bekerja mundur dari belokan 1000, dan mengisi penilaian aktual berdasarkan pada bagaimana setiap permainan bisa berjalan dengan baik.
Hasilnya adalah bahwa saya sama sekali tidak tahu strategi apa yang digunakan ini, kecuali untuk beberapa perilaku "jelas" keras-kode (melempar bola salju jika Anda memiliki lebih banyak bola daripada lawan Anda memiliki bola + bebek, dan memuat kembali jika Anda berdua keluar bola salju). Jika ada yang ingin menganalisis dataset yang dihasilkannya, saya bayangkan ada beberapa perilaku menarik untuk ditemukan!
Menguji ini terhadap "Simpan Satu" menunjukkan bahwa ia memang menang dalam jangka panjang, tetapi hanya dengan selisih kecil (514 menang, 486 kerugian, 0 imbang dalam batch pertama dari 1000 pertandingan, dan 509 menang, 491 kerugian, 0 menarik yang kedua).
Penting!
Ini akan berhasil, tetapi itu bukan ide yang bagus. Dibutuhkan sekitar 9 menit pada laptop saya yang cukup-pengembang-spesifik untuk menghasilkan pohon permainan penuh. Tapi itu akan menyimpan probabilitas akhir menjadi file setelah mereka dibuat, dan setelah itu setiap belokan hanya menghasilkan angka acak dan membandingkannya dengan 2 byte, jadi ini sangat cepat.
Untuk pintas semua itu, cukup unduh file ini (3.5MB) dan letakkan di direktori dengan executable.
Atau Anda dapat membuatnya sendiri dengan menjalankan:
Yang akan menyimpan satu file per giliran, hingga konvergensi. Perhatikan bahwa setiap file berukuran 3,5 MB dan konvergen pada gilirannya 720 (yaitu 280 file, ~ 1GB), dan karena sebagian besar game tidak mendekati 720, file pra-konvergensi memiliki kepentingan yang sangat rendah.
sumber
Swift - TheCrazy_XcodeRandomness
Sayangnya, ini hanya dapat dijalankan secara lokal, dalam Xcode, karena mengandung
Foundation
modul dan fungsinyaarc4random_uniform()
,. Namun, Anda bisa mengetahui apa itu algoritma:sumber
swift
perintah dan kemudian periksa apakah itu berfungsiFoundation
, maaf: /TableBot, Python 2
Disebut TableBot karena dibuat dengan mengimplementasikan tabel ini:
A 1 menunjukkan memiliki 1 atau lebih, 0 menunjukkan tidak memiliki.
Bot:
Cobalah online!
sumber
AmbBot - Skema Racket
Saya kebanyakan ingin mencoba menggunakan
amb
, karena itu keren. Bot ini secara acak memesan opsi (muat ulang, melempar, dan menghindar), memfilter opsi yang tidak masuk akal, dan memilih opsi pertama. Tetapi denganamb
, kita bisa menggunakan kelanjutan dan mundur!Saya juga membuat program uji kecil untuk menjalankan dua bot ini satu sama lain. Rasanya seperti bot kedua menang lebih sering, jadi saya mungkin telah membuat kesalahan di suatu tempat.
sumber
MonteBot, C ++
Saya pada dasarnya mengambil kode dari koth ini dan memodifikasinya untuk tantangan ini. Ini menggunakan algoritma UCT Monte Carlo Tree Search Decoupled. Itu harus cukup dekat dengan keseimbangan nash.
Kompilasi Instruksi untuk linux:
Simpan ke
MonteBot.cpp
.Lari
g++ -o -std=c++11 MonteBot MonteBot.cpp
.Perintah untuk dijalankan:
./MonteBot <args>
sumber
The suka menunda - Python 3
Prokrastinator akan menunda-nunda dengan memainkan save beberapa belokan pertama. Tiba-tiba monster panik itu ingin menghindari kehilangan perang sumber daya dengan melawan gerakan lawan yang paling sering digunakan.
sumber
ParanoidBot dan PanicBot - ActionScript3 ( RedTamarin )
Dari bahasa niche yang tidak sesuai (dengan ekstensi untuk memberikan argumen baris perintah) memuji Skittish ParanoidBot dan sekutunya yang membosankan, PanicBot.
ParanoidBot
ParanoidBot kehilangan akal, dan memiliki strategi khusus yang tidak perlu untuk diandalkan. Pertama, meluncurkan bola salju sampai ambang tercapai, menjaga beberapa cadangan. Kemudian, setelah tiga itik peringatan, paranoia masuk, dan bot mencoba menimbun lebih banyak bola salju di antara itik acak. Setelah mengisi kembali persediaannya, ParanoidBot kembali melempar dengan membabi buta. Karena suara-suara di kepalanya, ParanoidBot dapat mengetahui apakah dijamin akan menang atau kalah, dan akan "menyusun strategi" sesuai dengan itu.
Kawat gigi sedikit miring untuk membantu mengembun ukuran
PanicBot
Karena sudah gila, PanicBot bereaksi karena rasa takut naluriah. Setelah kehabisan bebek karena meringkuk ketakutan, PanicBot membabi buta melempar semua bola salju, lalu mati-matian membuat dan melempar lebih banyak bola salju sampai (mungkin) dikalahkan.
Ini adalah salah satu dari kurang dari 15 entri lain yang menggunakan AS3 di PPCG. Suatu hari, mungkin bahasa yang eksotis ini bisa dibilang akan menemukan teka-teki untuk mendominasi.
sumber
snow.as
, berikut ini harus bekerja di bash:$ ./redshell snow.as -- 0 50 50 25 25
chmod +x redshell
adalah teman Anda di sini ...Pembela, Python
Muat ulang saat kedua pemain tidak memiliki bola salju. Jika memiliki bola salju, ia melempar. Jika tidak memiliki bola salju, tetapi lawan memilikinya, itik jika bisa, jika tidak, reload.
Catatan: belum diuji
sumber