นี่เป็นโครงการสำหรับวิทยานิพนธ์ปริญญาโทของฉัน ใครก็ตามที่สนใจสร้าง Mahjong AI อันทรงพลังสามารถขยายเวลาตัวแทนของฉันได้ สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับอัลกอริธึมที่ใช้และเหตุผลในการใช้อัลกอริธึมดังกล่าว โปรดติดต่อฉันทางอีเมล
ในกรณีที่คุณต้องการพัฒนาตัวแทนไพ่นกกระจอกของคุณเอง Repo นี้สามารถใช้เป็น Framework สำหรับการทดสอบแบบเรียลไทม์ ( กับผู้เล่นจริง ) จากนั้น คุณจะประหยัดเวลาทั้งหมดในการหากลยุทธ์ที่ดีที่สุดสำหรับตัวแทนของคุณ นอกจากนี้ ไลบรารีการพัฒนา (การรวบรวมข้อมูลและการประมวลผลบันทึกเกมล่วงหน้า การคำนวณชานตินและคะแนนชนะ ฯลฯ) มีให้บริการแล้วใน: https://github.com/erreurt/MahjongKit
อัปเดตถัดไปในเร็ว ๆ นี้ :
จำเป็นต้องมีวิศวกรรมคุณลักษณะที่ดีกว่า ตัดสินใจว่าจะเรียกการรวม/เรียก Riichi หรือไม่ใช้ Random Forest (แทนกฎเงื่อนไข)
ต่อเนื่อง : ฝึกอบรมโมเดลการทำนายไทล์การรอด้วย LSTM
ข้อควรสนใจ : หากคุณทดสอบบอทของคุณพร้อมกันกับบัญชีมากกว่า 4 บัญชีภายใต้ที่อยู่ IP เดียวกัน ที่อยู่ IP ของคุณจะถูกแบนโดย tenhou.net เป็นเวลา 24 ชั่วโมง (ฉันไม่รู้แน่ชัดเกี่ยวกับกฎการแบนผู้เล่น แต่ทั้งหมดนี้อนุมานจากการสังเกตของฉัน)
ผู้เขียน | เจียนหยาง ถัง (โทมัส) |
---|---|
อีเมล | [email protected] |
ไพ่นกกระจอกเป็นเกมกลยุทธ์สำหรับผู้เล่นสี่คนที่มีข้อมูลที่ไม่สมบูรณ์ ความท้าทายหลักในการพัฒนาตัวแทนไพ่นกกระจอกที่ชาญฉลาด ได้แก่ กฎของเกมที่ซับซ้อน พื้นที่ค้นหาอันกว้างใหญ่ คู่ต่อสู้หลายคน และข้อมูลที่ไม่สมบูรณ์ งานที่มีอยู่หลายงานได้พยายามแก้ไขปัญหาเหล่านี้ผ่านการจำลองต้นไม้มอนติคาร์โล ฟังก์ชั่นอรรถประโยชน์ที่เหมาะสมโดยการเรียนรู้ภายใต้การดูแล หรือแบบจำลองของฝ่ายตรงข้ามโดยอัลกอริธึมการถดถอย อย่างไรก็ตาม ประสิทธิภาพของตัวแทนการเล่นไพ่นกกระจอกที่ชาญฉลาดยังห่างไกลจากผู้เล่นที่เก่งที่สุด จากการวิเคราะห์ทางสถิติสำหรับเกมไพ่นกกระจอกและความรู้จากผู้เชี่ยวชาญของมนุษย์ ได้มีการเสนอตัวแทนไพ่นกกระจอกที่ชาญฉลาดในงานนี้ เพื่อจัดการกับปัญหาของงานที่ล้ำสมัย จึงได้นำเทคโนโลยีการวิเคราะห์พฤติกรรมและแบบจำลองฝ่ายตรงข้ามที่ได้รับการปรับปรุงซึ่งทำได้โดยการใช้ถุง Perceptron หลายชั้นมาประยุกต์ใช้กับงานนี้ การทดลองแสดงให้เห็นว่าตัวแทนที่เสนอมีประสิทธิภาพเหนือกว่าตัวแทนที่ล้ำสมัย และแบบจำลองของฝ่ายตรงข้ามที่นำไปใช้นั้นมีผลเชิงบวกอย่างมากต่อประสิทธิภาพของตัวแทน นอกจากนี้ ยังสามารถแยกแยะประเด็นที่น่าสนใจหลายประการได้จากการทดลอง ซึ่งค่อนข้างมีความหมายสำหรับงานในอนาคต
อ้างถึง https://en.wikipedia.org/wiki/ Japanese_Mahjong สำหรับกฎของเกม Riichi Mahjong ของญี่ปุ่น
ไคลเอนต์ที่ใช้งานอนุญาตให้รันเอเจนต์ไพ่นกกระจอกโดยตรงผ่านโปรแกรม แทนที่จะทำสิ่งนี้ในเว็บเบราว์เซอร์ เว็บไซต์สำหรับเล่นไพ่นกกระจอกญี่ปุ่น Riichi ออนไลน์คือ http://tenhou.net/
ด้านซ้ายเป็นทิวทัศน์ทั่วไปของโต๊ะไพ่นกกระจอกริอิจิของญี่ปุ่น รูปภาพนี้เป็นภาพหน้าจอจาก GUI ที่ใช้งานเพื่อการดีบัก
ตัวแทนไพ่นกกระจอกที่นำเสนอได้รับการทดสอบบน tenhou.net การทดสอบดำเนินการในสองเวอร์ชัน คือ เวอร์ชันหนึ่งมีโมเดลการป้องกัน และอีกเวอร์ชันหนึ่งไม่มี บันทึกเกมดิบและผลลัพธ์ของเกมระดับกลางสามารถพบได้ในพื้นที่เก็บข้อมูลอื่นของฉัน: https://github.com/erreurt/Experiments-result-of-mahjong-bot การทดลองดำเนินการด้วยเวอร์ชันเอเจนต์ใน Experiment_ai.py
สำหรับเวอร์ชันที่มีโมเดลการป้องกัน มีการเล่นเกม 526 เกม และสำหรับเวอร์ชันที่ไม่มีโมเดลการป้องกัน มีการเล่นเกม 532 เกม งานนี้ไม่มากเท่ากับงานที่เกี่ยวข้องกันสองชิ้น แต่ตามที่แสดงในรูปพฤติกรรมการลู่เข้าของประสิทธิภาพของตัวแทน 526 เกมก็เพียงพอแล้ว
การทำงานต่อเนื่องของ Mizukami ถือได้ว่าเป็นตัวแทนไพ่นกกระจอกที่ดีที่สุดและน่าเชื่อถือที่สุดในวรรณคดีอังกฤษในปัจจุบัน นี่คือการเปรียบเทียบระหว่างประสิทธิภาพของตัวแทนไพ่นกกระจอกของฉันกับประสิทธิภาพของ Mizukami:
[1] | [2] | [3] | [4] | |
---|---|---|---|---|
เกมส์ที่เล่น | 526 | 532 | 2634 | 1441 |
อัตราอันดับ 1 | 23.95% | 22.65% | 24.10% | 25.30% |
อัตราอันดับ 2 | 26.62% | 25.92% | 28.10% | 24.80% |
อัตราอันดับ 3 | 31.75% | 25.71% | 24.80% | 25.10% |
อัตราอันดับที่ 4 | 17.68% | 25.71% | 23.00% | 24.80% |
อัตราการชนะ | 24.68% | 26.50% | 24.50% | 25.60% |
อัตราการสูญเสีย | 13.92% | 20.21% | 13.10% | 14.80% |
ระดับคงที่ | 2.21 แดน | 0.77 แดน | 1.14 แดน | 1.04 แดน |
[1] ตัวแทนไพ่นกกระจอกของฉัน พร้อม โมเดลการป้องกัน
[2] ตัวแทนไพ่นกกระจอกของฉัน ที่ไม่มี รูปแบบการป้องกัน
[3] การทำงานเพิ่มเติมของ Mizukami : Mizukami N., Tsuruoka Y.. การสร้างเครื่องเล่นไพ่นกกระจอกด้วยคอมพิวเตอร์โดยอิงจากการจำลองมอนติคาร์โลและแบบจำลองของคู่ต่อสู้ ใน: การประชุม IEEE เรื่อง Computational Intelligence and Games (CIG) ปี 2015 หน้า 275–283 อีอีอี (2015)
[4] มิซึคามิ และ. อัล : N. Mizukami, R. Nakahari, A. Ura, M. Miwa, Y. Tsuruoka และ T. Chikayama ตระหนักถึงโปรแกรมไพ่นกกระจอกคอมพิวเตอร์สำหรับผู้เล่นสี่คนโดยการเรียนรู้ภายใต้การดูแลพร้อมผู้เล่นหลายคนที่แยกจากกัน ธุรกรรมของสมาคมประมวลผลข้อมูลแห่งประเทศญี่ปุ่น ฉบับที่ 1 55 ไม่ 11, หน้า 1–11, 2014, (ภาษาญี่ปุ่น)
โปรดทราบว่าในขณะที่เล่นไพ่นกกระจอก การตกไปอยู่ในอันดับที่ 4 ถือเป็นข้อห้ามอย่างแน่นอน เนื่องจากใครก็ตามจะได้รับคะแนนระดับลดลง ด้วยเหตุนี้อัตราการตกไปอยู่อันดับที่ 4 ของผู้เล่นจึงมีความสำคัญต่อประสิทธิภาพโดยรวม บอทของฉันมีระดับคงที่ที่ดีกว่าเนื่องจากมีอัตราอันดับที่ 4 ต่ำ
หากต้องการรันตัวแทนไพ่นกกระจอก คุณต้องระบุการกำหนดค่าบางอย่าง ดังที่แสดงในตัวอย่างต่อไปนี้จาก main.py:
def run_example_ai ():
ai_module = importlib . import_module ( "agents.random_ai_example" )
ai_class = getattr ( ai_module , "RandomAI" )
ai_obj = ai_class () # [1]
player_module = importlib . import_module ( "client.mahjong_player" )
opponent_class = getattr ( player_module , "OpponentPlayer" ) # [2]
user = "ID696E3BCC-hLHNE8Wf" # [3]
user_name = "tst_tio" # [4]
game_type = '1' # [5]
logger_obj = Logger ( "log1" , user_name ) # [6]
connect_and_play ( ai_obj , opponent_class , user , user_name , '0' , game_type , logger_obj ) # play one game
def run_jianyang_ai ():
ai_module = importlib . import_module ( "agents.jianyang_ai" )
waiting_prediction_class = getattr ( ai_module , "EnsembleCLF" )
ensemble_clfs = waiting_prediction_class ()
ai_class = getattr ( ai_module , "MLAI" )
ai_obj = ai_class ( ensemble_clfs ) # [1]
opponent_class = getattr ( ai_module , "OppPlayer" ) # [2]
user = "ID696E3BCC-hLHNE8Wf" # [3]
user_name = "tst_tio" # [4]
game_type = '1' # [5]
logger_obj = Logger ( "log_jianyang_ai_1" , user_name ) # [6]
connect_and_play ( ai_obj , opponent_class , user , user_name , '0' , game_type , logger_obj )
อินสแตนซ์ AI : อินสแตนซ์คลาสของตัวแทนไพ่นกกระจอก ในที่เก็บนี้ตัวแทนไพ่นกกระจอกสามเวอร์ชันมีให้ คลาสแรกอยู่ใน agents.random_ai_example.py นี่คือคลาสสาธิตสำหรับแสดงให้นักพัฒนาที่มีศักยภาพทราบถึงวิธีการใช้ตัวแทนของตนเอง อันที่สองอยู่ใน agents.experiment_ai.py และผลการทดลองที่ให้ไว้ในส่วนที่ 4 ถูกสร้างขึ้นโดย AI นี้ อันที่สามคือ AI ที่ทันสมัยและอยู่ใน agent.jianyang_ai.py
คลาสผู้เล่นฝ่ายตรงข้าม : คลาสของผู้เล่นฝ่ายตรงข้าม เราสามารถใช้คลาสเริ่มต้น OpponentPlayer ใน client.mahjong_player หากมีการขยายคลาส OpponentPlayer เนื่องจากความต้องการพิเศษ ตัวแปรนี้ควรถูกตั้งค่าเป็นคลาสที่เกี่ยวข้องของคุณ
User ID : โทเค็นในรูปแบบตามที่แสดงในตัวอย่างที่ได้รับหลังจากลงทะเบียนบน tenhou.net ความสนใจ: โปรดใช้ ID ผู้ใช้ของคุณเอง หากใช้ ID เดียวกันภายใต้ที่อยู่ IP ที่แตกต่างกันบ่อยเกินไป บัญชีจะถูกบล็อกชั่วคราวโดย tenhou.net
ชื่อผู้ใช้ : ชื่อผู้ใช้ที่เกี่ยวข้องที่คุณสร้างขึ้นขณะลงทะเบียนบน tenhou.net ตัวแปรนี้มีไว้เพื่อระบุบันทึกการทดสอบของคุณเท่านั้น
ประเภทเกม : ประเภทเกมถูกเข้ารหัสเป็นจำนวนเต็ม 8 บิต ต่อไปนี้เป็นคำอธิบายสำหรับแต่ละบิต
ตัวอย่างเช่น:
- Tenhou.net does not provide all possibility of the above specified combinations. Most online players play on configurations for example "1", "137", "193", "9"
Logger : จำเป็นต้องมีพารามิเตอร์สองตัวในการเริ่มต้นตัวบันทึก อันแรกคือ ID ของผู้บันทึกที่ผู้ใช้กำหนด เพื่อให้นักพัฒนาสามารถตั้งชื่อประวัติการทดสอบของตนได้อย่างอิสระ
หลังจากระบุการกำหนดค่าเหล่านี้ทั้งหมดแล้ว ให้โยนพารามิเตอร์ทั้งหมดเหล่านี้ไปที่ Connect_and_play() ถึงเวลาชมการแสดงของตัวแทนไพ่นกกระจอกของคุณแล้ว!!!
ต้องใช้ฟังก์ชันสี่อย่างสำหรับบอตไพ่นกกระจอก ดังที่แสดงในคลาส "อินเทอร์เฟซ" ใน agent.ai_interface ขอแนะนำให้ตัวแทนของคุณเป็นมรดกของ AIInterface สำหรับคำอธิบายเชิงลึกและตัวอย่างง่ายๆ ของฟังก์ชันเหล่านี้ โปรดดูเอกสารประกอบใน agent.random_ai_example.py
class AIInterface ( MainPlayer ):
def to_discard_tile ( self ):
raise NotImplementedError
def should_call_kan ( self , tile136 , from_opponent ):
raise NotImplementedError
def try_to_call_meld ( self , tile136 , might_call_chi ):
raise NotImplementedError
def can_call_reach ( self ):
raise NotImplementedError
to_discard_tile : ขึ้นอยู่กับข้อมูลที่สามารถเข้าถึงได้ทั้งหมดเกี่ยวกับสถานะของเกม ฟังก์ชันนี้จะส่งคืนไทล์ที่จะทิ้ง ผลตอบแทนเป็นจำนวนเต็มในช่วง 0-135 ในเกมไพ่นกกระจอกมีไพ่ทั้งหมด 136 แผ่น ได้แก่ ไพ่ 34 ชนิดและสำเนา 4 แบบสำหรับแต่ละชนิด ในโอกาสต่างๆ เราใช้แบบฟอร์ม 34 (แต่ละหมายเลขตรงกับไทล์หนึ่งประเภท) หรือแบบฟอร์ม 136 (แต่ละตัวเลขตรงกับไทล์หนึ่งรายการ) โปรดทราบว่าที่นี่การส่งคืนควรอยู่ในรูปแบบ 136
should_call_kan : https://en.wikipedia.org/wiki/ Japanese_Mahjong#Making_melds_by_calling ฟังก์ชันนี้ควรตัดสินใจว่าตัวแทนควรเรียกการรวม kan(Quad) หรือไม่ Tile136 ย่อมาจากไทล์ที่คู่ต่อสู้บางคนทิ้งไป ซึ่งสามารถใช้สำหรับเอเจนต์เพื่อสร้างคานหลอมรวม from_opponent ระบุว่าตัวแทนสร้าง kan ผสมโดยการทิ้งของฝ่ายตรงข้าม (สามไพ่ในมือและฝ่ายตรงข้ามทิ้งไพ่ที่สี่) หรือไพ่ของตัวเอง (ทั้งสี่ไพ่ในมือ)
try_to_call_meld : https://en.wikipedia.org/wiki/ Japanese_Mahjong#Making_melds_by_calling ฟังก์ชันนี้จะตัดสินใจว่าเอเจนต์ควรเรียกการรวม Pon(Triplet)/Chi(Sequence) หรือไม่ Tile136 ย่อมาจากไทล์ในรูปแบบ 136 ที่คู่ต่อสู้บางคนทิ้งไป might_call_chi บ่งชี้ว่าเจ้าหน้าที่สามารถเรียก Chi meld ได้หรือไม่ เนื่องจาก Chi meld สามารถเรียกได้โดยทิ้งคู่ต่อสู้ในที่นั่งด้านซ้ายเท่านั้น
can_call_reach : https://en.wikipedia.org/wiki/ Japanese_Mahjong#R%C4%ABchi ฟังก์ชันนี้จะตัดสินใจว่าตัวแทนควรอ้างสิทธิ์ Riichi หรือไม่
เมื่อคลาสเอเจนต์ไพ่นกกระจอกเป็นคลาสย่อยของคลาส AIInterface ข้อมูลที่แสดงดังต่อไปนี้สามารถเข้าถึงได้ภายในคลาสเอเจนต์ตามที่ระบุไว้
เข้าถึง | ชนิดข้อมูล | ไม่แน่นอน | คำอธิบาย |
---|---|---|---|
self.tiles136 | รายการจำนวนเต็ม | ย | ไพ่มือในรูปแบบ 136 |
self.hand34 | รายการจำนวนเต็ม | เอ็น | ไพ่มือในรูปแบบ 34 (tile34 = Tile136//4) |
self.discard136 | รายการจำนวนเต็ม | ย | การละทิ้งตัวแทนใน 136-จาก |
self.discard34 | รายการจำนวนเต็ม | เอ็น | การละทิ้งตัวแทนในรูปแบบ 34 |
self.meld136 | รายการอินสแตนซ์ Meld | ย | ที่เรียกว่าการรวมตัวของตัวแทน อินสแตนซ์ของคลาส Meld ใน client.mahjong_meld.py |
self.total_melds34 | รายการรายการจำนวนเต็ม | เอ็น | ที่เรียกว่าการรวมตัวของตัวแทนในรูปแบบ 34 |
self.meld34 | รายการรายการจำนวนเต็ม | เอ็น | เรียกว่า ปอน/เชาเชา รวมตัวแทนในรูปแบบ 34 |
self.pon34 | รายการจำนวนเต็ม | เอ็น | ที่เรียกว่าปอนรวมตัวแทนในรูปแบบ 34 |
self.chow34 | รายการรายการจำนวนเต็ม | เอ็น | ที่เรียกว่าเชาเชาผสมผสานตัวแทนในรูปแบบ 34 |
self.minkan34 | รายการรายการจำนวนเต็ม | เอ็น | มินคังที่เรียกว่าเป็นการรวมตัวของสายลับในรูปแบบ 34 |
self.ankan34 | รายการรายการจำนวนเต็ม | เอ็น | ที่เรียกว่าอังคังผสมผสานตัวแทนในรูปแบบ 34 |
ตัวเอง.ชื่อ | เชือก | ย | ชื่อบัญชี |
ระดับตนเอง | เชือก | ย | ระดับของบัญชี |
ตนเอง ที่นั่ง | จำนวนเต็ม | ย | รหัสที่นั่ง ตัวแทนจะมี 0 เสมอ |
self.dealer_seat | จำนวนเต็ม | ย | รหัสที่นั่งของตัวแทนจำหน่าย |
self.is_dealer | บูลีน | เอ็น | ไม่ว่าตัวแทนจะเป็นตัวแทนจำหน่ายหรือไม่ก็ตาม |
self.reach_status | บูลีน | ย | บ่งชี้ว่าเจ้าหน้าที่อ้างสิทธิ์ในริอิจิหรือไม่ |
ตนเอง.just_reach() | บูลีน | เอ็น | ว่าเจ้าหน้าที่เพิ่งอ้างสิทธิ์ Riichi หรือไม่ |
self.tmp_rank | จำนวนเต็ม | ย | อันดับของตัวแทนในเกมปัจจุบัน |
คะแนนตนเอง | จำนวนเต็ม | ย | คะแนนของตัวแทนในเกมปัจจุบัน |
self.is_open_hand | บูลีน | เอ็น | ว่าตัวแทนได้เรียก open melds แล้วหรือไม่ |
ตนเองturn_num | จำนวนเต็ม | เอ็น | จำนวนรอบปัจจุบัน |
self.player_wind | จำนวนเต็ม | เอ็น | ผู้เล่นลมเป็นยาคุประเภทหนึ่ง |
ตนเอง.round_wind | จำนวนเต็ม | เอ็น | ลมกลมเป็นยาคุชนิดหนึ่ง |
self.bonus_honors | รายการจำนวนเต็ม | ย | ไทล์ตัวละครทั้งหมดที่มียาคุ |
เราสามารถเข้าถึงอินสแตนซ์ของคลาสฝ่ายตรงข้ามได้โดยการเรียก self.game_table.get_player(i) โดย i เท่ากับ 1,2,3 ซึ่งระบุ id ที่เกี่ยวข้องของคู่ต่อสู้
เข้าถึง | ชนิดข้อมูล | ไม่แน่นอน | คำอธิบาย |
---|---|---|---|
.discard136 | รายการจำนวนเต็ม | ย | การทิ้งฝ่ายตรงข้ามที่สังเกตได้ใน 136- จาก |
.discard34 | รายการจำนวนเต็ม | เอ็น | การทิ้งคู่ต่อสู้ที่สังเกตได้ในรูปแบบ 34 |
.meld136 | รายการอินสแตนซ์ Meld | ย | เรียกว่าผสมผสานของคู่ต่อสู้ที่สังเกตได้ |
.total_melds34 | รายการจำนวนเต็ม | เอ็น | การเรียกรวมตัวของคู่ต่อสู้ที่สังเกตได้ในรูปแบบ 34 |
.meld34 | รายการรายการจำนวนเต็ม | เอ็น | เรียกว่า ปอน/เชาเชา รวมตัวของคู่ต่อสู้ที่สังเกตได้ในรูปแบบ 34 |
.pon34 | รายการรายการจำนวนเต็ม | เอ็น | ปอนที่เรียกว่ารวมตัวของคู่ต่อสู้ที่สังเกตได้ในรูปแบบ 34 |
.chow34 | รายการจำนวนเต็ม | เอ็น | เรียกว่าเชาเชาผสมผสานคู่ต่อสู้ที่สังเกตได้ในรูปแบบ 34 |
.minkan34 | รายการรายการจำนวนเต็ม | เอ็น | มินคังที่เรียกว่าเป็นการรวมตัวของคู่ต่อสู้ที่สังเกตได้ในรูปแบบ 34 |
.ankan34 | รายการรายการจำนวนเต็ม | เอ็น | อังคังที่เรียกว่าเป็นการรวมตัวของคู่ต่อสู้ที่สังเกตได้ในรูปแบบ 34 |
.safe_tiles | รายการจำนวนเต็ม | ย | ไทล์ในรูปแบบ 34 ซึ่งปลอดภัยสำหรับตัวแทนอย่างยิ่ง กล่าวคือ คู่ต่อสู้ที่สังเกตจะไม่สามารถชนะด้วยไทล์เหล่านี้ |
.ชื่อ | เชือก | ย | ชื่อของฝ่ายตรงข้าม |
.ระดับ | เชือก | ย | ระดับของฝ่ายตรงข้าม |
.ที่นั่ง | จำนวนเต็ม | ย | รหัสที่นั่งของคู่ต่อสู้ที่สังเกตได้ |
.dealer_seat | จำนวนเต็ม | ย | รหัสที่นั่งของตัวแทนจำหน่าย |
.is_ตัวแทนจำหน่าย | บูลีน | เอ็น | ไม่ว่าฝ่ายตรงข้ามที่สังเกตจะเป็นเจ้ามือหรือไม่ก็ตาม |
.reach_status | บูลีน | ย | บ่งบอกว่าคู่ต่อสู้ที่สังเกตได้อ้างสิทธิ์ในริอิจิหรือไม่ |
.just_reach() | บูลีน | เอ็น | ว่าฝ่ายตรงข้ามที่สังเกตเห็นเพิ่งอ้างสิทธิ์ Riichi หรือไม่ |
.tmp_rank | จำนวนเต็ม | ย | อันดับของคู่ต่อสู้ที่สังเกตได้ในเกมปัจจุบัน |
.คะแนน | จำนวนเต็ม | ย | คะแนนของคู่ต่อสู้ที่สังเกตได้ในเกมปัจจุบัน |
.is_open_hand | บูลีน | เอ็น | ไม่ว่าคู่ต่อสู้ที่สังเกตได้เรียกการรวมตัวแบบเปิดแล้วหรือไม่ |
.turn_num | จำนวนเต็ม | เอ็น | จำนวนรอบปัจจุบัน |
.player_wind | จำนวนเต็ม | เอ็น | ผู้เล่นลมเป็นยาคุประเภทหนึ่ง |
.round_wind | จำนวนเต็ม | เอ็น | ลมกลมเป็นยาคุชนิดหนึ่ง |
.bonus_honors | รายการจำนวนเต็ม | ย | ไทล์ตัวละครทั้งหมดที่มียาคุ |
หากต้องการเข้าถึงข้อมูลเกี่ยวกับตารางเกม สามารถโทรไปที่ self.game_table
เข้าถึง | ชนิดข้อมูล | ไม่แน่นอน | คำอธิบาย |
---|---|---|---|
.บอท | อินสแตนซ์ของคลาสตัวแทน | ย | อินสแตนซ์คลาสของเอเจนต์ |
.get_player(i) | ตัวอย่างของคลาสฝ่ายตรงข้าม | ย | ตัวอย่างคลาสของฝ่ายตรงข้าม i=1,2,3 |
.dealer_seat | จำนวนเต็ม | ย | รหัสที่นั่งของตัวแทนจำหน่าย |
.bonus_indicator | รายการจำนวนเต็ม | ย | ตัวบ่งชี้โบนัสในรูปแบบ 136 |
.round_number | จำนวนเต็ม | ย | หมายเลขกลม |
.reach_sticks | จำนวนเต็ม | ย | บนโต๊ะมีไม้ริอิจิกี่อัน ผู้เล่นที่ชนะครั้งต่อไปจะได้รับคะแนนทั้งหมดของไม้ Riichi เหล่านี้ |
.honba_sticks | จำนวนเต็ม | ย | บนโต๊ะมีฮอนบะอยู่กี่อัน ผู้เล่นจะได้รับคะแนนพิเศษตามไม้ฮงบะหากชนะ |
.count_ramaining_tiles | จำนวนเต็ม | ย | จำนวนกระเบื้องที่ยังไม่ได้เปิดเผยที่เหลืออยู่ |
.เปิดเผย | รายการจำนวนเต็ม | ย | แต่ละองค์ประกอบในรายการจะระบุจำนวนสำเนาของไทล์เฉพาะนี้ที่ถูกเปิดเผย (ทิ้ง การรวมเปิด ตัวบ่งชี้โบนัส ฯลฯ) |
.round_win | จำนวนเต็ม | เอ็น | ลมกลมเป็นยาคุชนิดหนึ่ง |
.bonus_tiles | รายการจำนวนเต็ม | เอ็น | รายชื่อไทล์โบนัส การเกิดขึ้นของไทล์โบนัสในไทล์มือแต่ละครั้งจะนับเป็นยาคุ |
.last_discard | จำนวนเต็ม | เอ็น | การทิ้งคู่ต่อสู้ครั้งล่าสุด ไทล์นี้ปลอดภัยตามกฎอย่างแน่นอน |
ศาสตราจารย์ Johannes Fürnkranz ของฉัน (กลุ่มวิศวกรรมความรู้ของ TU Darmstadt)
หัวหน้างานของฉัน Tobias Joppen (กลุ่มวิศวกรรมความรู้ของ TU Darmstadt)