AI Challenge

楊皓丞

介紹一下自己

  • 跟上一個講師比起來...
  • 都是貓派
  • 我家有貓 他沒有
  • 披薩上可以有鳳梨(夏威夷好吃)
  • my_coding_style v.s. hisCodingStyle

Mirrors

點擊你們小隊的連結,就會自動開始
下載等等會需要使用的檔案資料夾

在2019年
太平洋上某座島嶼南部
突然湧出大量石油...

每位玩家都想藉機發大財
因此透過撿拾及搶奪石油
以及購賣和使用道具

玩家們開始了一場前所未有的石油爭奪大戰...

我們的總目標

  • 這是個4人遊戲
  • 每個小隊要寫出一支AI來操控玩家
  • 最後一天會打一個循環賽 選出最強AI的小隊
  • 最強魔王會在終點處靜待最強的3個小隊的挑戰...
  • 詳細遊戲介紹: document

你們的AI要做的事

  • 決定每個時間點要幹嘛
  • 現實世界中的時間是連續的,但遊戲中是一格一格的
  • 每個時間點你的AI需要決定玩家要做什麼動作
  • 動作有10種:靜止不動,8方位的移動,及使用/購買道具
     
  • 你們最主要的任務,就是小隊討論出AI策略後實作出來

如何執行遊戲

  • 把zip檔解壓縮,然後“下載”資料夾更名成含有小隊編號
  • 這是因為會有另一個小隊使用同一台電腦,怕搞混檔案
  • 跳到這層 從任意一個檔案的內容中複製位置

如何執行遊戲

  • 開啟anaconda prompt
  • cd [貼上剛剛複製的位置]
  • 好 現在我們到遊戲資料夾中了
  • 雙擊SetupAnacondaPrompt.bat 等他跑好
  • 輸入python main.py來啟動遊戲
  • 手動玩家的按鍵操作方式見document

來看看遊戲檔案

  • 在遊戲的資料夾中:
  • AI資料夾是用來存放AI檔用的
    預設AI和你們寫的所有AI都在裡面
  • README.txt中有document和此投影片的連結
  • SetupAnacondaPrompt.bat是python課時
    講師請大家執行的檔案,若有人的電腦重開機
    就需要再執行一次
  • 其他的檔案都是遊戲運行用的,不需理會

AI檔案的格式

  • 檔名必須是"team_name.py"
    name是你自己幫取AI取的名字
  • 第五天最後上繳檔案時,把你們決定要繳
    的檔案改名成"team_id.py",id是小隊編號
  • 這幾天離開時電腦都不用關機,不過怕檔案遺失
    所以離開前請把AI檔案備份在隊輔的雲端中

AI檔案的格式

  • 寫一個class method: decide
  • 遊戲每個單位時間會執行一次你的decide
    來得知你這個單位時間想要做什麼
  • return value有下列幾種:
  • AI_STOP: 不動
  • AI_DIR_U, AI_DIR_R, AI_DIR_D, AI_DIR_L
    AI_DIR_RU, AI_DIR_RD, AI_DIR_LD, AI_DIR_LU:
    往上/右/下/左/右上/右下/左下/左上前進
  • AI_TRIGGER_ITEM: 購買/使用道具(由於在擁有或
    使用道具中時不能再購買,因此是同個操作)

如何使用API

  • 為了判斷此時此刻該做什麼操作(往哪走,
    要不要買/使用道具),會想知道遊戲的狀態
  • 簡單來說,手動玩家看得到的資訊,AI也需要知道
  • 例如場上石油的位置,其他玩家的分數,...
  • 此時可以利用helper(可以想像成小幫手)中的函式
    以及常數來得到遊戲狀態
  • 例如get_oils()可以得到一個list of 2-tuples,包含
    場上所有石油的座標(座標是2維的,因此用2-tuple)
  • get_oil_level()則可以得到一個list of ints,包含場上
    所有石油的等級(玩家看到的石油顏色)
  • 其他的API用法請見document中的說明

小補充

  • 每次判斷要往8個方向中的哪個走可能很麻煩
  • 通常你可能會想沿著某個方向向量前進,因此
    會想找8方位中最接近此方向的
  • helper中的get_direction(v)這個函式讓你可以
    傳入一個向量(2-tuple),他會回傳8方位中最
    接近此向量方位的移動操作
  • __init__中的equipments記得填入各裝備卡數量
  • __init__中的color要填一個3-tuple,也就是某個顏色
    的RGB value,各小隊可以調整成覺得好看的顏色

來看看default AI

from AI.base import *

class TeamAI(BaseAI):
    def __init__(self, helper):
        self.helper = helper
        self.equipments = [0, 0, 0, 0, 0] # Set the number of your equipments.
        self.color = (255, 255, 255) # Set the color you like.


    def decide(self):
        my_pos = self.helper.get_player_position()
        radius = self.helper.player_radius
        carry = self.helper.get_player_value()
        nearest_oil_pos = self.helper.get_nearest_oil()
        home = self.helper.get_base_center()
        destination = nearest_oil_pos if carry < 5000 else home
        if destination is None:
            return AI_DIR_STOP
        else:
            direction = (destination[0] - my_pos[0], destination[1] - my_pos[1])
            return self.helper.get_direction(direction)

如何執行遊戲-2

  • python main.py $1 $2 $3 $4
  • $1~$4要填入4位玩家使用的AI名
  • 例如若你們寫了一個team_Pie.py和一個
    team_Pei.py,想和default AI一起較量一下
  • 可以執行python main.py Pie Pei default default
  • 就可以看到他們自動開始玩起來了
  • 建議不要改動default AI,要改的話複製到新檔案再改
  • 這樣要判斷自己AI的強度時才有得對照

如何執行遊戲-2

  • python main.py $1 $2 $3 $4
  • $1~$4要填入4位玩家使用的AI名
  • 為了方便,_(底線) = default
  • ~(波浪) = 手動操控此玩家
  • 沒填滿$1~$4的話 剩餘的視為手動操控
  • 這也是為什麼前面可以用python main.py玩
  • 若執行python main.py Pie ~ _
  • 玩家1會由Pie這個AI操控,玩家2和4手動操控,
    玩家3是default AI操控

小挑戰

  1. 兩個手動玩家合作打兩個default,其中一位
    手動玩家獲得第一名
  2. 兩個手動玩家合作打兩個default,幫default
    裝備所有裝備卡各3張,其中一位
    手動玩家獲得第一名

如何執行遊戲-2

  • 若出現Error: AI can't load,代表你寫的
    AI程式有格式錯誤,可以問隊輔或是助教
  • 出現Error的玩家會由default AI代玩
  • 若遊戲進行中crash了,通常代表你寫的AI
    程式出現bug了,也可以問隊輔或是助教
  • AI程式的運算量若太大,遊戲會沒辦法正常速度進行
    所以想好策略可以跟隊輔討論或確認可不可行!
  • 當然,在發問前先嘗試自己能不能找到問題也很好!

Challenge 2019

By Howard Yang

Challenge 2019

  • 438