উট আপ কাপ: একটি এআই বোর্ড গেম টুর্নামেন্ট


11

উট আপ কাপ 2k18

এই চ্যালেঞ্জের মধ্যে আমরা আধা-জনপ্রিয় বোর্ড গেম উট আপ খেলব।

উট আপ! এমন একটি বোর্ড গেম যার মধ্যে খেলোয়াড়েরা উটের উপরে চক্রের জয় পেতে, খেলাটি জিততে বা খেলাটি হারাতে, আন্দোলনকে প্রভাবিত করতে বা একটি উটকে সরানোর জন্য ফাঁদ তৈরি করে। এই প্রতিটি সিদ্ধান্তই আপনাকে কিছু অর্থ পাওয়ার সম্ভাবনা দিয়ে পুরস্কৃত করে যা বিজয়ীকে নির্ধারণ করে। খেলোয়াড়দের তাদের সিদ্ধান্ত নিতে সম্ভাবনা, গেম-স্টেট বিবেচনা এবং প্রতিপক্ষের ভাড়াটে ব্যবহার করা উচিত। খেলোয়াড়দের কীভাবে খেলতে হবে সে সম্পর্কে এখানে একটি ছোট্ট ভিডিও দেওয়া আছে

কিভাবে খেলতে হবে

এখানে কীভাবে খেলবেন সে সম্পর্কে মোটামুটি ধারণা দেওয়া হল। ভিডিওগুলির মধ্যে একটি দেখা আরও সহায়ক হতে পারে কারণ তাদের ভিজ্যুয়াল রয়েছে :)

আপনার পালা আপনি 4 বিকল্প আছে।

  1. একটি উট সরান। এটি তাদের কাছ থেকে একটি উট বেছে নেয় যারা স্থানান্তর করেনি এবং এটি 1-3 টি স্পেসের মধ্যে নিয়ে যায়। আপনি 1 মুদ্রা পেতে। পাঁচটি উট সরে গেলে রাউন্ডগুলি শেষ হয়, তারা তখন সমস্ত স্থানান্তর করতে পারে
  2. একটি ফাঁদ রাখুন। এটি রাউন্ডের শেষ অবধি বোর্ডে যায়। আপনি + 1 / -1 ফাঁদ চয়ন করেন। যদি এটিতে একটি উট বা উটের স্তুপ অবতরণ করে তবে তারা + 1 / -1 সরবে এবং আপনি একটি মুদ্রা পাবেন। আপনি 0 স্কোয়ারে ফাঁদ রাখতে পারবেন না যেখানে আপনি উটগুলি সেখানে একটি ফাঁদ রাখতে পারেন, যদিও এটি কেবল তার পরে অবতরণকারী উটগুলিকেই প্রভাবিত করবে।
  3. রাউন্ড বিজয়ী বাজি। আপনি একটি রাউন্ড বিজয়ীর উপর একটি বাজি নিতে। আপনি যদি উটের উপরে বাজি ধরতে আপনি প্রথম / ২ য় / তৃতীয় হন তবে তার উপর নির্ভর করে তারা আপনাকে 5/3/2/1 পান
  4. গেম বিজয়ী / পরাজিত খেলা শেষে কে প্রথম বা শেষের দিকে যাবে সে বিষয়ে আপনি বাজি ধরুন। আপনি এই উটের উপর বাজি ধরতে যদি আপনি প্রথম / ২ য় / তৃতীয় / ইত্যাদি ছিলেন তার উপর ভিত্তি করে আপনি 8/5/3/1/1 (আমার মনে হয়) পান

মন্তব্য:

  • 5 টি উট আছে। তারা 0-2 থেকে এলোমেলোভাবে কোনও অবস্থানে শুরু করে।
  • যখন একটি উট সরানো হয় (এটি কী ঘটায় তার উপরে উপরে দেখুন) তারা 1-3 স্কোয়ার সরায়। যদি এগুলিকে অন্য একটি উট সহ একটি স্কোয়ারে স্থাপন করা হয় তবে তাদের অন্যটির উপরে "উপরে" রাখা হয় এবং একটি উটের স্তূপ তৈরি করা হয়। যদি একটি উট সরিয়ে নিয়ে যায় তবে এটি উটের স্ট্যাকের উপরে সমস্ত উটকে সরায়। স্ট্যাকের শীর্ষে উটটি সীসা হিসাবে বিবেচনা করা হয়
  • যদি আপনি একটি +1 ফাঁদে অবতরণ করেন (এটি কী ঘটায় তার উপরে উপরে দেখুন) আপনি এক বর্গক্ষেত্রকে আরও এগিয়ে নিয়ে যান। স্ট্যান্ডার্ড স্ট্যাকিং বিধি প্রয়োগ।
  • তবে আপনি যদি কোনও -1 ফাঁদে আঘাত করেন তবে আপনি এক বর্গ পিছন দিকে চলে যান। আপনি যদি সেই স্কোয়ারে থাকা উটগুলির স্তূপের নিচে যান ।
  • একটি উট যখন স্কোয়ার 16 এ আঘাত করে তখন খেলাটি শেষ হয় This
  • গেম বিজয়ী / হেরে যাওয়া বাজি একবার উট প্রতি একবার করা যেতে পারে। অর্থাৎ আপনি খেলাটি হারাতে এবং হারাতে উটের উপর বাজি রাখতে পারবেন না

চ্যালেঞ্জ

এই চ্যালেঞ্জে আপনি চারজন খেলোয়াড় খেলতে পাইথন 3 প্রোগ্রাম লিখবেন, বিজয়ী উট আপের সমস্ত গৌরব খেলা গ্রহণ করবে

আপনার প্রোগ্রামটি গেমস্টেটটি গ্রহণ করবে, যার মধ্যে রয়েছে:

  • উট_ট্র্যাক : উটের অবস্থান সহ
  • ট্র্যাপ_ট্র্যাক : ফাঁদগুলির অবস্থানের সাথে (ফর্মের প্রবেশ [ট্র্যাপ_ টাইপ (-1,1), প্লেয়ার])
  • প্লেয়ার_হাস_প্লেড_ট্র্যাপ : একটি অ্যারে আপনাকে বলছে যে খেলোয়াড়রা এই রাউন্ডটি কোনও ফাঁদ ফেলেছে কিনা
  • round_bets : বেটের একটি অ্যারে এই রাউন্ডটি রেখেছিল। ফর্মটির মধ্যে [উট, প্লেয়ার]
  • গেম_উইনার_বেটস / গেম_লজার_বেটস : উটকে গেমটি জিততে বা হারাতে বাজি ধরে বেট প্লেয়ারদের অ্যারে। আপনি কেবল সেই খেলোয়াড়ের মান দেখতে সক্ষম হবেন যারা বাজি তৈরি করেছে, তারা কারা বাজি ধরেছে তা নয় । আপনি কারা বাজি ধরতে পারেন তা জানতে পারবেন। ফর্মের মধ্যে [উট, প্লেয়ার]
  • প্লেয়ার_গেম_বিটস : গেম_উইনার_বেটস / গেম_লজার_বেটসের আরেকটি উপস্থাপনা। আবার, আপনার বটটি যে বেট বানিয়েছে তা কেবল দেখুন।
  • প্লেয়ার_মনি_ভ্যালু : প্রতিটি খেলোয়াড়ের অর্থের পরিমাণ দেখাচ্ছে এমন একটি অ্যারে।
  • উট_ইয়েট_ টো_মোভ : একটি উঁচু দেখায় যে একটি উট এই গোলটিকে সরানো হয়েছে কিনা।

গেমস্টেটের শীর্ষে আপনিও পাবেন:

  • প্লেয়ার : একটি পূর্ণসংখ্যা আপনাকে বলছে আপনি কোন প্লেয়ারের নম্বর (0-3)।

খেলোয়াড়দের কী ফেরা উচিত তার সিনট্যাক্স হ'ল:

  • [0]: উটটি সরান
  • [1, ফাঁদ_প্রকার, ফাঁদ_স্থান]: স্থান ফাঁদ
  • [২, প্রজেক্টেড_উইন্ড_উইনার]: রাউন্ড উইনারকে বেট করুন
  • [3, প্রস্তাবিত_গেম_উইনার]: গেম উইনারকে বেট করুন
  • [4, প্রজেক্টড_গেম_লজার]: গেমটি হারানো বাজি তৈরি করুন

এটি একটি চলন (প্লেয়ার, গেমস্টেট) পদ্ধতিতে আবৃত করা উচিত

উদাহরণস্বরূপ, এখানে এমন একজন প্লেয়ার রয়েছে যে তারা যদি শেষ স্থানে থাকে তবে তারা রাউন্ড উইনারকে বাজি তুলবে। যদি তা না হয় তবে তারা এলোমেলো স্কোয়ারে একটি ফাঁদ রাখবে।

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)]

গেমটি বিভিন্ন কারণে বেছে নেওয়া হয়েছিল: এটি থেকে অপশন তুলনামূলকভাবে একটি ছোট পুল রয়েছে (মোড়ের প্রায় 20 টি পছন্দ, সহজেই প্রায় প্রায় 3-4- এ সংকীর্ণ হয়), গেমগুলি সংক্ষিপ্ত এবং ভাগ্যের একটি উপাদান রয়েছে (এটি তৈরি করে) এমনকি "খারাপ" বটগুলিও জিততে পারে)।

গেমপ্লের

টুর্নামেন্টের রানারটি এখানে পাওয়া যাবে: উটের আপ-কাপ । চালান camelup.pyএকটি টুর্নামেন্ট বা ফাংশন PlayGame গেম চালানোর জন্য চালানোর জন্য। আমি নতুন জমাগুলি দিয়ে সেই সংগ্রহস্থলটিকে আপডেট রাখব। উদাহরণস্বরূপ প্রোগ্রামগুলি পাওয়া যাবে players.py

একটি টুর্নামেন্টে প্রতি 10 খেলোয়াড়ের 100 টি গেম থাকে (গোল হয়ে যায়, তাই 14 খেলোয়াড় মানে 200 গেমস)। প্রতিটি খেলা চারটি পদ পূরণের জন্য খেলোয়াড়দের পুল থেকে নির্বাচিত চারটি এলোমেলো খেলোয়াড় হবে। খেলোয়াড়রা দুবার গেমটিতে থাকতে পারবে না।

স্কোরিং

প্রতিটি গেমের বিজয়ী গেমের শেষে সবচেয়ে বেশি অর্থের খেলোয়াড়। কোনও খেলা শেষে টাইয়ের ক্ষেত্রে সর্বাধিক অর্থের পরিমাণযুক্ত সমস্ত খেলোয়াড়কে একটি পয়েন্ট দেওয়া হয়। টুর্নামেন্ট শেষে সর্বাধিক পয়েন্ট পাওয়া খেলোয়াড় জিতল। গেমগুলি চালানোর সাথে সাথে আমি স্কোরগুলি পোস্ট করব।

জমা দেওয়া খেলোয়াড়দের পুলে যোগ করা হবে। আমি সত্যিই তিনটি বোবা বট এবং একটি শুরু করেছি যা শুরু করার জন্য করেছি।

আদেশ সহকারে

ইনপুটগুলি সংশোধন করবেন না। সহযোগিতা বা ত্রুটিযুক্ত ব্যতীত অন্য কোনও প্রোগ্রামের সম্পাদনকে প্রভাবিত করার চেষ্টা করবেন না। বলিদান জমা দেওয়ার জন্য যা অন্য জমা দেওয়ার স্বীকৃতি দেয় এবং সেই প্রতিপক্ষকে তার নিজস্ব ব্যয়ে উপকৃত করার চেষ্টা করে না। স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ করা হয়েছে।

আপনার বট দ্বারা নেওয়া সময়কে সর্বাধিক 10 ডলার হিসাবে সীমাবদ্ধ করুন।

জমাগুলি পূর্বের জমাগুলিকে সদৃশ করতে পারে না।

দয়া করে অন্যান্য খেলোয়াড়দের গেম_উইনার বা গেম_লজার বাজিটি দেখুন না। এটি করা বেশ সহজ তবে এখনও প্রতারণা করছে।

আপনার যদি কোনও প্রশ্ন থাকে তবে নির্দ্বিধায় জিজ্ঞাসা করুন।

জয়লাভ

নতুন প্রতিবেদন পোস্ট হওয়ার সাথে সাথে প্রতিযোগিতা অনির্দিষ্টকালের জন্য উন্মুক্ত থাকবে। তবে, এই প্রশ্নটি পোস্ট হওয়ার (20 জুলাই) এক মাস পরে ফলাফলের ভিত্তিতে আমি বিজয়ী (একটি উত্তর গ্রহণ করুন) ঘোষণা করব।

ফলাফল

Player0: 12
Player1: 0
Player2: 1
Sir_Humpfree_Bogart: 87

সম্ভবত আমি এটি অতীত পড়েছিলাম, কিন্তু কত উট খেলতে আছে? এছাড়াও, ওপারে যাওয়ার জন্য তাদের কতটি স্কোয়ার ভ্রমণ করতে হবে? আপনার গিটহাব কোডের উপর ভিত্তি করে আমি নিশ্চিত যে এটি 5 টি উট এবং 25 স্কোয়ার, তবে চ্যালেঞ্জের বর্ণনায় বর্ণিত এটি আমি দেখতে পাইনি। বেটস রাখার ক্ষেত্রে, আমরা কোনও পরিমাণে বাজি রাখতে পারি, বা এটি ডিফল্টরূপে 1 বাজি ধরতে পারে? আমাদের কি ব্যয়ের সীমা রয়েছে বা আমরা প্রতিটি রাউন্ডকে অনির্দিষ্টকালের জন্য বাজি রাখতে পারি? খেলোয়াড়রা যেমন একটি উট সরিয়ে নিয়ে যায়, কোন উটটি সরানো হয়? উটের সাথে আপনার মিলবে প্লেয়ার-এনআর? যদি হ্যাঁ, তবে 5 টি উট ছাড়াও 4 জন খেলোয়াড় কেন?
কেভিন ক্রুইজসেন

1
পার্লের উত্তরগুলি পাওয়ার জন্য নিখুঁত হত
এলোমেলো লোক

পিপিসিজিতে আপনাকে স্বাগতম!
অ্যাডমবর্কবার্ক

প্রতি 10 খেলোয়াড়ের প্রতি 100 গেমগুলি আইএমও দেখতে বেশ কম বলে মনে হচ্ছে, বিশেষত এতটা এলোমেলো একটি গেমের সাথে
নাথান মেরিল

1
@ অ্যাডমবার্কবার্ক ধন্যবাদ! আমি এটিতে নতুন তাই সকল পয়েন্টারকে স্বাগতম। এটি বাস্তব জীবনে ভাল কাজ করেছে - এটি এখানে কীভাবে খেলতে পারে তা দেখে তা প্রকাশিত
টাইলার ব্যারন

উত্তর:


1

Sir_Humpfree_Bogart.py

এটি উট আপ কাপ টুর্নামেন্টের জন্য তৈরি একটি বট ।

প্রথমত, তারা সমস্ত সম্ভাব্য কনফিগারেশনগুলি দেখে যেগুলি উটগুলি বৃত্তাকার শেষে শেষ হতে পারে। তারপরে তারা ব্যবহার করে রাউন্ড জয় করে একটি উটের উপর বাজি রাখার প্রত্যাশিত মান নির্ধারণ করে

EV_roundwin = (chance_1st)*(payout) + (chance_2nd)*(payout) - (chance_3rd_or_worse)*(cost)

তারপরে তারা উটটি এলোমেলোভাবে চলাফেরা করে যতক্ষণ না একটি উট জিততে পারে। কয়েক হাজার বার এটি করার পরে আপনি অনুমান করতে পারবেন যে প্রতিটি উট জয়ী হবে এবং হারাবে। আবার, আমরা এগুলির ব্যবহারের প্রত্যাশিত মান পাই

EV_gamewin = (chance_1st)*(payout) - (chance_2nd_or_worse)*(cost)

কেবলমাত্র অন্য বিকল্পগুলি একটি উটকে সরিয়ে নিয়ে যাচ্ছে (যা সর্বদা একটি মুদ্রা দেয়, তাই এর প্রত্যাশিত মানটি একটি) এবং একটি ফাঁদ স্থাপন করে। উভয় দলই মনে করে যে একটি ফাঁদ রাখা একেবারে উপেক্ষা করার পক্ষে যথেষ্ট দুর্বল বিকল্প। এই তথ্য দিয়ে বটস সর্বোচ্চ প্রত্যাশিত মান সহ বিকল্পটি বেছে নিয়েছিল।

যেহেতু টুর্নামেন্ট দ্বিতীয় স্থানটি শেষ স্থানের সমাপ্তির সমাপ্তি দেখেছে সেহেতু আপনি যদি প্রথম স্থানে যাওয়ার সুযোগ পেছনে থাকেন তবে তা বোঝা যায়। বটটি কতটা ঝুঁকিপূর্ণ হবে তা নির্ধারণের জন্য এসবিএইচ দূরত্ব_প্রবাহ_প্রথম_স্থান এবং কাছাকাছি_ থেকে_একটি ব্যবহার করেছে, আপনি যদি প্রথম থেকে শেষের দিকে এবং শেষের কাছাকাছি থাকেন তবে ঝুঁকি বেশি থাকে এবং আপনি যদি খেলাটির প্রথম থেকে বা দূরে থাকেন তবে ঝুঁকি কম হবে । কম ঝুঁকির সাথে বটটি উচ্চ প্রত্যাশিত মান বিকল্প এবং একটি উচ্চ ঝুঁকির সাহায্যে বিকল্পটি প্রদান করে এমন একটি উচ্চ ঝুঁকিযুক্ত কোনও ক্রিয়া সম্পর্কে সিদ্ধান্ত নেবে। সঠিক সমীকরণ ছিল

Functional_EV = EV + (upshot-EV) * riskiness

যেখানে আপশট সর্বাধিক পরিশোধ হয় আপনি কোনও সিদ্ধান্ত থেকে এবং ঝুঁকি থেকে শুরু করতে পারেন 0 থেকে 1 পর্যন্ত।


0

players.py

টুর্নামেন্টটি পেতে এটি অবিশ্বাস্যরূপে বোবা বট। তাদের প্রায় কোনও যুক্তি নেই তবে লোকেরা ব্যবহারের জন্য ফ্রেমওয়ার্ক হিসাবে কাজ করে

import random
import math
from playerinterface import PlayerInterface

class Player0(PlayerInterface):
    def move(player,g):
        #This dumb player always moves a camel
        return [0]

class Player1(PlayerInterface):
    def move(player,g):
        #This player is less dumb. If they have the least amount of money they'll make a round winner bet
        #If they aren't in last then they'll place a trap on a random square. Still p dumb though
        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)]

class Player2(PlayerInterface):
    def move(player,g):
        #This dumb player always makes a round winner bet
        return [2,random.randint(0,len(g.camels)-1)]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.