Merancang AI Ular


9

Saya baru di stackedange gamedev ini tetapi sebelumnya telah menggunakan matematika dan situs cs.

Jadi, saya dalam kompetisi untuk menciptakan AI untuk ular yang akan bersaing dengan empat ular lain dalam 5 menit putaran di mana aturannya sangat mirip dengan permainan ular Nokia tradisional kecuali bahwa ada lima ular, papan adalah 30x30 dan ada sejumlah kendala kecil di lapangan.

Seperti permainan Nokia, ular Anda tumbuh ketika Anda mencapai buah dan jika Anda menabrak diri sendiri, ular lain atau dinding Anda mati. Gim ini berjalan dengan jeda 30ms antara gerakan dan server mengirimkan status gim baru setiap 50 ms yang harus dianalisis oleh kode dan apa yang tidak, dan menampilkan langkah selanjutnya.

Pemenangnya adalah ular yang memiliki panjang terpanjang di setiap titik dalam permainan. Pemutus dasi ditentukan dengan membunuh.

Sejauh ini apa yang telah saya lakukan adalah menerapkan pencarian grafik A * dari setiap ular untuk menentukan apakah ular saya paling dekat dengan apel dan jika ya, itu berlaku untuk apel. Kalau tidak, saya membuat algoritma kecil yang rapi untuk menentukan area papan yang paling kosong, yang untuk ular saya, untuk mengantisipasi apel berikutnya.

Selain itu, saya memiliki beberapa pengecekan kemampuan bertahan kecil untuk memastikan ular saya tidak masuk ke dalam perangkap yang tidak bisa keluar dan jika memang macet, saya punya sesuatu untuk memberinya kesempatan yang lebih baik untuk keluar.

...

Ngomong-ngomong, saya sudah menguji ular saya di server uji dan itu cukup baik. Secara umum, strategi saya hanya mengejar apel ketika itu adalah hal yang pasti dan menemukan ruang ketika itu tidak membuatnya tumbuh lebih cepat daripada ular lain (beberapa ular melakukan hal yang sama tetapi sering hanya pergi ke tengah atau sudut) kadang-kadang menang permainan-permainan percobaan ini tetapi lebih sering dikalahkan oleh ular yang sama yang tampaknya memiliki keunggulan untuk bertahan hidup (ular saya tumbuh lebih cepat tetapi kemudian mati entah bagaimana dan ular lain ini hanya berjalan lamban dan menang dengan konsistensi.

Jadi saya bertanya-tanya tentang ide-ide yang harus ada yang mencoba dan memperbaiki ular saya. Atau mungkin ide pada pendekatan baru untuk diambil. Fungsi dan kelas saya bagus sehingga perubahan yang mungkin tampak drastis seharusnya tidak terlalu buruk. Saya mendorong semua ide.

Adakah pikiran?

Jawaban:


5

Strategi pertahanan yang baik bisa berupa bentuk yang sempurna (jadi kepala dan bagian belakang Anda selalu berjarak 1 ruang dari satu sama lain, dan Anda membuat persegi penuh atau apa pun yang mungkin terbentuk pada panjang Anda), ini akan membuat Anda cukup banyak abadi karena tidak ada ular yang bisa masuk ke daerah tertutup Anda dan Anda tidak akan pernah bertemu dengan diri Anda sendiri (kecuali sebuah apel entah bagaimana menelurkan di mulut Anda, tapi saya membayangkan itu tidak mungkin jika tidak ada ruang).

Ini akan membuatnya jadi jika apel benar-benar muncul di daerah tertutup Anda, Anda dapat diprogram untuk tidak melakukannya dan ular lainnya mungkin akan mati saat mencoba mendapatkannya, maka setelah beberapa waktu berlalu Anda bisa mendapatkannya dengan cara transisi kembali ke bentuk Anda sebaik mungkin (bisa sedikit algoritma yang rumit tetapi tampaknya bisa dilakukan)

Ketika pergi untuk apel hanya akan tergantung pada seberapa jauh mereka, mungkin jika Anda adalah yang terdekat dengan margin yang baik Anda bisa pergi untuk itu, tetapi jika tetap konservatif, sulit untuk mengatakan mungkin akan perlu men-tweak itu berdasarkan coba-coba , tapi saya pikir itu akan menjadi strategi yang bagus.


1
Jadi pada dasarnya, "ular" -nya harus "kura-kura". xD +1 ide bagus.
Cypher

Bagus Namun ada kendala di papan tulis. Jadi, pemrogram ular lain pasti membuat ular untuk memeriksa apakah ada halangan (apakah dinding atau ular lain yang menutupi apel). Mereka mungkin tidak datang dan mati begitu saja. Satu hal yang dapat dilakukan untuk menghindari masalah ini adalah memiliki jarak yang cukup antara kepala dan ekor.
Shashwat

hmm ide yang menarik, saya pikir saya bisa menerapkan sesuatu seperti ini karena ketika ular saya hanya nongkrong menunggu apel berikutnya muncul .. haha, saya sedikit khawatir tentang pemijahan apel di mulut saya tho, yang akan menghasilkan kepastian kematian dan permainan ini sering kali diputuskan oleh satu kematian sebelum waktunya
Rawb

@Ronald Sebenarnya jika Anda mendeteksi pemijahan apel di mulut Anda, Anda bisa memutar ke dalam dan mundur ke luar dan melanjutkan, karena AI memiliki refleks yang sempurna, semestinya mudah untuk memperbaiki (dan mungkin bahkan memperbaiki sendiri) berdasarkan pada bagaimana Anda menerapkannya.
Kevin DiTraglia

0

Ular harus menyesuaikan strateginya dengan panjangnya saat ini.

Ular yang sangat panjang dapat menggunakan tubuhnya untuk memagari lawan. Ini berarti bahwa itu harus membuat segel dengan dinding.

Jika ular tersebut melakukan perjalanan ke timur, dengan sebuah apel di timur lautnya, ia harus melakukan perjalanan jauh ke dinding sebelum berbelok ke utara, sehingga kemungkinan rute untuk ular lain sangat terbatas.

  0123456789
a ··········
b ··········
c ········A·
d ··········
e ooooooC···
f o·········
g o·········
h oooooooo··
i ··········
j ··········

Ular dengan kepala C ini, harus berbelok ke utara pada e9, bukan pada e8, sehingga setiap lawan di bawahnya, akan terperangkap, dan tidak dapat memakan apel apa pun yang muncul di atas garis 'e'.

Semakin besar area yang bisa Anda potong dan semakin lama Anda bisa memegangnya, semakin baik.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.