Piala Unta 2k18
Dalam tantangan ini, kita akan memainkan permainan papan semi-populer Camel Up.
Unta! adalah permainan papan yang memiliki pemain yang bertaruh unta untuk memenangkan putaran, memenangkan game atau kalah, mengatur jebakan untuk memengaruhi pergerakan atau menggerakkan unta. Masing-masing keputusan ini memberi Anda kesempatan mendapatkan uang, yang menentukan pemenangnya. Pemain harus menggunakan probabilitas, pertimbangan kondisi permainan dan masa sewa lawan untuk membuat keputusan. Berikut adalah video pendek yang menunjukkan kepada para pemain cara bermain .
Cara bermain
Berikut ini gambaran kasar tentang cara bermain. Menonton salah satu video mungkin lebih bermanfaat karena mereka memiliki visual :)
Pada gilirannya, Anda memiliki 4 opsi.
- Pindahkan unta. Ini mengambil unta dari mereka yang belum bergerak dan memindahkannya antara 1-3 ruang. Anda mendapatkan 1 koin. Putaran berakhir ketika kelima unta telah bergerak, mereka kemudian bisa bergerak semua
- Tempatkan jebakan. Ini berlaku di papan sampai akhir putaran. Anda memilih perangkap 1 / -1. Jika tumpukan unta atau unta mendarat di atasnya, mereka bergerak +1 / -1 dan Anda mendapatkan koin. Anda tidak dapat menempatkan jebakan di kotak 0. Anda dapat menempatkan jebakan di mana unta berada, meskipun itu hanya akan mempengaruhi unta yang mendarat di atasnya.
- Taruhan pemenang putaran. Anda bertaruh pada pemenang putaran. Mereka menang Anda mendapatkan 5/3/2/1 tergantung pada apakah Anda yang pertama / kedua / ketiga bertaruh pada unta itu.
- Pemenang / pecundang game. Anda bertaruh siapa yang akan menjadi yang pertama atau terakhir di akhir permainan. Anda mendapatkan 8/5/3/1/1 (saya pikir) berdasarkan jika Anda 1st / 2nd / 3rd / etc untuk bertaruh pada unta itu
Catatan:
- Ada 5 unta. Mereka mulai pada posisi acak dari 0-2.
- Ketika unta dipindahkan (lihat di atas untuk apa yang memicu ini) mereka memindahkan 1-3 kotak. Jika mereka ditempatkan di atas kotak dengan unta lain, mereka ditempatkan "di atas" yang lain, menciptakan tumpukan unta. Jika unta ingin bergerak, ia memindahkan semua unta di atasnya pada tumpukan unta. Unta di bagian atas tumpukan dianggap sebagai yang utama
- Jika Anda mendarat di perangkap +1 (lihat di atas untuk mengetahui pemicu ini), Anda memindahkan satu kotak lebih jauh ke depan. Aturan penumpukan standar berlaku.
- Namun jika Anda menekan perangkap -1, Anda memindahkan satu kotak ke belakang. Anda pergi di bawah tumpukan unta yang ada di alun-alun itu, jika ada.
- Permainan berakhir ketika seekor unta mencapai kuadrat 16. Ini segera memicu putaran dan pemicu akhir pertandingan
- Taruhan pemenang / pecundang permainan dapat dilakukan hanya sekali per unta. Yaitu Anda tidak bisa bertaruh pada unta untuk menang dan kalah
Tantangan
Dalam tantangan ini, Anda akan menulis program Python 3 untuk memainkan empat pemain, pemenang mengambil semua permainan Camel Up yang mulia
Program Anda akan menerima gamestate, yang berisi:
- camel_track : dengan lokasi unta
- trap_track : dengan lokasi jebakan (entri formulir [trap_type (-1,1), pemain])
- player_has_placed_trap : sebuah array yang memberi tahu Anda jika pemain telah menempatkan jebakan pada ronde ini
- round_bets : array dari taruhan yang ditempatkan pada putaran ini. Dari bentuk [unta, pemain]
- game_winner_bets / game_loser_bets : array dari taruhan yang dibuat pemain untuk unta untuk menang atau kalah dalam game. Anda hanya akan dapat melihat nilai pemain yang membuat taruhan, bukan pada siapa mereka bertaruh. Anda bisa tahu dengan siapa Anda bertaruh. #dari formulir [unta, pemain]
- player_game_bets : representasi lain dari game_winner_bets / game_loser_bets. Sekali lagi, lihat saja taruhan yang dibuat bot Anda.
- player_money_values : array yang menunjukkan jumlah uang yang dimiliki setiap pemain.
- camel_yet_to_move : Array yang menunjukkan apakah unta telah memindahkan putaran ini.
Di atas gamestate Anda juga mendapatkan:
- pemain : bilangan bulat yang memberi tahu Anda nomor pemain Anda (0-3).
Sintaks yang harus dikembalikan pemain adalah:
- [0]: Pindahkan Unta
- [1, trap_type, trap_location]: Place Trap
- [2, projected_round_winner]: Buat Taruhan Pemenang Putaran
- [3, projected_game_winner]: Buat Taruhan Pemenang Game
- [4, projected_game_loser]: Buat Taruhan Loser Game
Ini harus dibungkus dengan metode move (player, gamestate)
Misalnya, inilah pemain yang akan membuat taruhan pemenang putaran jika mereka ada di tempat terakhir. Jika tidak maka mereka akan menempatkan jebakan pada kotak acak.
class Player1(PlayerInterface):
def move(player,g):
if min(g.player_money_values) == g.player_money_values[player]:
return [2,random.randint(0,len(g.camels)-1)]
return [1,math.floor(2*random.random())*2-1,random.randint(1,10)]
Permainan ini dipilih karena beberapa alasan: ia memiliki kumpulan opsi yang relatif kecil untuk dipilih (kira-kira 20 pilihan per putaran, mudah dipersempit menjadi sekitar 3-4), permainan pendek dan ada unsur keberuntungan (membuatnya menjadi jadi bahkan bot "jahat" bisa menang).
Gameplay
Pelari turnamen dapat ditemukan di sini: camel-up-cup . Jalankan camelup.py
untuk menjalankan turnamen atau fungsi PlayGame untuk menjalankan game. Saya akan menjaga repositori itu diperbarui dengan kiriman baru. Contoh program dapat ditemukan di players.py
.
Sebuah turnamen terdiri dari 100 pertandingan per 10 pemain (dibulatkan, jadi 14 pemain berarti 200 pertandingan). Setiap permainan akan terdiri dari empat pemain acak yang dipilih dari kumpulan pemain untuk mengisi empat posisi. Pemain tidak akan bisa bermain dua kali.
Mencetak gol
Pemenang setiap pertandingan adalah pemain dengan uang terbanyak di akhir pertandingan. Dalam kasus seri di akhir pertandingan, semua pemain dengan jumlah uang maksimum diberikan poin. Pemain dengan poin terbanyak di akhir turnamen menang. Saya akan memposting skor saat saya menjalankan permainan.
Para pemain yang dikirimkan akan ditambahkan ke kolam. Saya menambahkan tiga bot benar-benar bodoh dan satu yang saya buat untuk memulai.
Peringatan
Jangan memodifikasi input. Jangan mencoba untuk mempengaruhi pelaksanaan program lain, kecuali melalui bekerja sama atau membelot. Jangan membuat pengorbanan pengorbanan yang berusaha untuk mengenali pengajuan lain dan menguntungkan lawan dengan biaya sendiri. Celah standar dilarang.
Batasi waktu yang diambil oleh bot Anda menjadi ~ 10 detik per giliran.
Kiriman tidak boleh menduplikasi kiriman sebelumnya.
Harap jangan melihat taruhan game_winner atau game_loser dari pemain lain. Ini cukup mudah dilakukan tetapi masih curang.
Jika Anda memiliki pertanyaan, jangan ragu untuk bertanya.
Kemenangan
Kompetisi akan tetap terbuka tanpa batas waktu, karena kiriman baru diposting. Namun, saya akan mengumumkan pemenang (menerima jawaban) berdasarkan hasil satu bulan setelah pertanyaan ini diposting (20 Juli).
Hasil
Player0: 12
Player1: 0
Player2: 1
Sir_Humpfree_Bogart: 87
sumber
Jawaban:
Sir_Humpfree_Bogart.py
Ini adalah bot yang kubuat untuk Turnamen Piala Unta .
Pertama, mereka melihat semua konfigurasi yang mungkin bahwa unta bisa berakhir di akhir putaran. Kemudian mereka menentukan nilai taruhan yang diharapkan pada unta yang memenangkan putaran menggunakan
Kemudian mereka menggerakkan unta secara acak sampai unta menang. Setelah melakukan ini beberapa ribu kali Anda dapat memperkirakan peluang setiap unta akan menang dan kalah. Sekali lagi, kami mendapatkan nilai yang diharapkan dari penggunaan ini
Satu-satunya pilihan lain adalah menggerakkan unta (yang selalu menghasilkan satu koin, jadi nilainya yang diharapkan adalah satu) dan menempatkan perangkap. Kedua tim merasa menempatkan jebakan adalah opsi yang cukup lemah untuk mengabaikannya sama sekali. Dengan informasi ini, bot memilih opsi dengan nilai yang diharapkan tertinggi.
Karena turnamen dilihat sebagai finis kedua sama dengan finis terakhir, masuk akal jika Anda berada di belakang untuk mengambil peluang masuk ke tempat pertama. SBH menggunakan distance_from_first_place dan nearness_to_end untuk menentukan seberapa berisiko bot seharusnya, di mana jika Anda jauh dari pertama dan dekat dengan akhir maka keberisikoan akan tinggi dan jika Anda berada di pertama atau jauh dari akhir permainan riskiness akan rendah . Dengan risiko rendah, bot akan memutuskan tindakan dengan opsi nilai harapan tinggi dan risiko tinggi menghasilkan opsi dengan hasil tinggi. Persamaan yang tepat adalah
di mana hasil adalah pembayaran tertinggi yang bisa Anda dapatkan dari keputusan dan tingkat risiko berkisar dari 0 hingga 1.
sumber
players.py
Ini adalah bot yang sangat bodoh untuk membuat turnamen berjalan. Mereka hampir tidak memiliki logika tetapi bertindak sebagai kerangka kerja untuk digunakan orang
sumber