Lời khuyên cho bot King of the Hill


12

Bạn có lời khuyên chung nào để tạo bot để tham gia vào thử thách King of the Hill? Những chiến lược nào bạn sử dụng để đi từ việc xem xét thách thức để tạo bot của bạn? Những cấu trúc dữ liệu nào bạn thấy hữu ích nhất?

Xin vui lòng gửi một lời khuyên cho mỗi câu trả lời.


16
Tôi cảm thấy như thế này phụ thuộc quá nhiều vào vấn đề cụ thể.
Vụ kiện của Quỹ Monica

@QPaysTaxes Tôi đã mô hình hóa điều này trực tiếp sau nhiều câu hỏi mẹo khác. Có cách nào để sửa câu hỏi này để tốt hơn không? Ngoài ra, những câu hỏi mẹo cũ cũng cần phải được sửa chữa?
mbomb007

Các câu hỏi mẹo cũ hơn dựa trên các ngôn ngữ như tôi có thể nói, điều đó có nghĩa là các mẹo này là phổ biến nhưng bạn có thể không sử dụng chúng. Câu hỏi này tương tự như "Lời khuyên cho các thử thách Code Golf" - nơi nó phụ thuộc hoàn toàn vào thử thách. Tuy nhiên, như các câu trả lời dưới đây chứng minh, có một vài điều phổ quát. Tôi đang mâu thuẫn.
Vụ kiện của Quỹ Monica

2
Tôi nghĩ rằng điều này phụ thuộc nhiều vào các câu hỏi cụ thể như "mẹo chơi gôn (lang)", bởi vì dù sao bạn cũng sử dụng rất nhiều tính năng ngôn ngữ khác nhau trong các thử thách khác nhau
Lemon

Câu trả lời:


4

Tìm điểm cân bằng Nash

Đây là một khái niệm rất quan trọng khi KOTH bao gồm một tập hợp các quyết định tương đối đơn giản, chỉ liên quan đến một vài người chơi (thường là 2) và mang tính quyết định. Điểm cân bằng Nash mô tả vị trí "chặn lưới": nếu hai người chơi quyết định hai chiến lược của họ, thì hai người chơi sẽ bị khóa một cách hiệu quả ở những vị trí đó: hoặc người chơi thay đổi chiến lược của họ chỉ đơn giản là tạo thêm lỗ hổng.

Ví dụ về các trò chơi trong đó cân bằng Nash rất quan trọng là:

  • Rock-Paper-Kéo (-Lizard-Spock), trong đó chiến lược "bất khả chiến bại" là chơi ngẫu nhiên
  • Morra , có "phổ" cân bằng. Peter Taylor đã viết một ví dụ tốt trong câu trả lời của mình ở đây .
  • Dilemma của tù nhân, một trò chơi hợp tác đáng chú ý vì có một lưới điện "mọi người đều thua"

Làm thế nào để tìm một trạng thái cân bằng

Tìm một trạng thái cân bằng thực sự khá đơn giản đối với hầu hết các trò chơi đơn giản và thường khá trực quan. Một tấn chi tiết về các phương pháp khác nhau có thể được tìm thấy trên internet. Khái niệm cơ bản, thường được áp dụng, là tạo ra một danh sách các chiến lược khả thi mà hai người chơi có thể sử dụng (các tùy chọn do trò chơi cung cấp). Nếu một chiến lược bị "chi phối" bởi một chiến lược khác, thì chiến lược đó có thể bị xóa khỏi danh sách và quá trình này được lặp lại. Bằng "sự thống trị", ý tôi là nếu chiến lược A luôn mang lại kết quả tương đương hoặc tốt hơn chiến lược B, chống lại tất cả các chiến lược đối thủ còn lại, thì chiến lược B có thể bị loại khỏi danh sách.

Ví dụ: Rock-Paper-Kéo

RPS có một cái gì đó gọi là trạng thái cân bằng "hỗn hợp", nghĩa là phân phối có liên quan. Thay vì chơi cùng một động tác lặp đi lặp lại (sẽ dẫn đến thất bại nhanh chóng), điểm cân bằng là chơi 1/3 đá, 1/3 giấy và 1/3 kéo trong một bản phân phối ngẫu nhiên. Nếu tôi chơi ngẫu nhiên, không có gì đối thủ của tôi có thể làm để có được lợi thế với tôi, khoảng thời gian. Nếu đối thủ của tôi chọn không chơi ngẫu nhiên, thì điều đó chỉ tạo ra một lỗ hổng từ phía anh ta.

Các trò chơi có trạng thái cân bằng hỗn hợp có lẽ là phổ biến nhất trên PPCG, vì chúng có thể có nhiều hình thức ( trò chơi thú vị duy nhất tôi có thể nghĩ đến với trạng thái cân bằng thuần túy là tình huống khó xử của tù nhân). Tôi nên lưu ý rằng trạng thái cân bằng hỗn hợp không nhất thiết phải ngẫu nhiên , đơn giản là một cái gì đó khác hơn là chơi cùng một động tác mỗi lần.

Sử dụng thông tin này

Điểm cân bằng Nash của một trò chơi thường đại diện cho "đường cơ sở" mà bạn nên cố gắng vận hành. Trong RPS, chơi ngẫu nhiên đảm bảo một điểm kết thúc ở giữa gói. Để di chuyển lên đầu, bạn phải bắt đầu xác định điểm yếu của người chơi khác.

Để làm điều này, bạn nên giữ trạng thái cân bằng khi không chắc chắn về điểm yếu của đối phương. Khi những điểm yếu đó đã được xác định (bạn đã phát hiện ra rằng đối thủ của bạn không ở trạng thái cân bằng), thì bạn cần nhẹ nhàng chuyển ra khỏi trạng thái cân bằng để tận dụng lợi thế của đối thủ. Hành động này, đến lượt nó, tạo ra điểm yếu về phía bạn. Sau đó, bạn phải phát hiện khi đối thủ của bạn thay đổi chiến lược của mình, để sau đó bạn có thể dừng cuộc tấn công và tiếp tục chơi ngẫu nhiên.

Phát hiện sự thay đổi từ trạng thái cân bằng

Điều này là khá khó khăn, và tôi không phải là một chuyên gia. Biến thể có thể có nhiều dạng:

  • Không thích một số tùy chọn trên / dưới các lựa chọn khác mà không có lý do, như một người chơi RPS chơi đá hai lần thường xuyên như kéo hoặc một người tránh chơi giấy. Một số thống kê tương đối đơn giản có thể phát hiện điều này.
  • Dựa trên một động thái hiện tại ra khỏi di chuyển trong quá khứ, trong một số mô hình dự đoán. Điều này bao gồm mèo sao chép, "nhịp đập những gì nhịp đập của bạn" hoặc bot "đạp xe". Điều này cần logic bổ sung để phát hiện, vì phân phối di chuyển tổng thể có thể được phân phối đồng đều, mặc dù các di chuyển không ngẫu nhiên. Bạn nên cố gắng ghi lại các bước di chuyển và tìm các mối tương quan như "di chuyển tôi đã thực hiện 2 lượt trước và di chuyển mà đối thủ của tôi thực hiện ngay bây giờ" và "di chuyển anh ta thực hiện 1 lượt trước và di chuyển anh ta thực hiện bây giờ", v.v.
  • Bots có phân phối di chuyển dựa trên của bạn. Lỗ hổng trong các bot này thường không được tạo ra (với số lượng có thể đo được) cho đến khi bạn tự thay đổi từ một bản phân phối ngẫu nhiên. Nói chung, bot của riêng bạn rơi vào thể loại này.

3

Hãy cụ thể về các yêu cầu để chạy bot của bạn

Bots có thể được viết bằng nhiều ngôn ngữ (và phiên bản của các ngôn ngữ đó), vì vậy nó giúp mọi người hiểu khi bạn:

  1. Kiểm tra nó trong môi trường mà OP chỉ định (hoặc càng gần nó càng tốt).
  2. Kiểm tra nó trong nhiều môi trường khác nếu có thể (để giúp những người khác muốn chạy nó).
  3. Hãy cụ thể về ngôn ngữ và phiên bản bạn sử dụng và giải thích cách chạy bot của bạn.

Như một phần thưởng: nếu bạn đang sử dụng một ngôn ngữ ít được biết đến, hãy tạo một liên kết đến nơi mọi người có thể tải xuống tệp nhị phân / nguồn để chạy nó.


2

Nếu dựa trên nhóm, làm việc cùng với nhóm của bạn

Mặc dù bạn thường có thể viết một bot hoạt động một mình để hoàn thành các nhiệm vụ để giúp đội của bạn, nhưng có một lợi thế lớn hơn nhiều khi bạn phối hợp cả trong và ngoài trò chơi. Một ví dụ điển hình cho điều này có thể được nhìn thấy trong Red vs. Blue - Pixel Team Battlebots .

Trong quá trình phát triển, các nhóm có thể trò chuyện và thảo luận về cách phối hợp các bot của họ để hoạt động tốt hơn một mình. Mặc dù về mặt kỹ thuật là cùng một bot, SphiNotPi3000 được viết để hoạt động song song với chính nó và có thể di chuyển theo những cách giải thích cho những điểm yếu mà nó sẽ phải đối mặt nếu tự nó. Kết quả cuối cùng là họ đã có thể thống trị gần như hoàn toàn chiến trường, ngay cả khi đó chỉ là hai người họ chống lại toàn bộ đội khác .

Vì vậy, bên ngoài trò chơi, lập kế hoạch và phối hợp với các đồng đội của bạn về những chiến lược để bao gồm. Có lẽ ai đó có một bot quét bản đồ theo đường chéo? Có quét của bạn theo chiều ngang (chỉ là một ví dụ). Trong trò chơi, nếu thử thách cho phép giao tiếp nhóm, hãy tận dụng lợi thế của nó. Ví dụ, trong trò chơi battlebots, bạn có thể gửi tin nhắn cho đồng đội về vị trí của bot ngoài tầm nhìn của họ, và sau đó khuyến khích họ viết bot theo cách tương thích để sử dụng các tín hiệu đó.


2

Sử dụng chiến lược meta

Đối với hầu hết mọi chiến lược thông minh, có một chiến lược khác đánh bại nó: Ví dụ: đối thủ của bạn có thể sử dụng chính xác lý do tương tự như bạn để dự đoán hành động tiếp theo của bạn và sau đó chống lại nó. Bây giờ bạn có thể cố gắng đoán lại đối thủ của mình một lần nữa, nhưng thật khó để biết khi nào nên dừng lại .

Một vấn đề khác là một chiến lược tốt trong việc đoán thứ hai một đối thủ thông minh có thể không còn tối ưu so với các đối thủ đơn giản hơn.

Làm thế nào bạn có thể giải quyết điều này? Bạn để bot của bạn quyết định sử dụng chiến lược nào!

Đối với điều này, bạn bắt đầu với việc cung cấp cho bot của bạn một tiết mục của các chiến lược khác nhau. Sau đó, trước mỗi lần di chuyển, bot của bạn nhìn vào lịch sử được ghi lại của trò chơi cho đến nay và đánh giá các chiến lược khác nhau này sẽ như thế nào. Sau đó, bức ảnh đó sẽ thành công nhất.

Bao gồm các chiến lược mạnh ngay từ đầu sẽ giúp cung cấp cho bot của bạn các tùy chọn tốt để lựa chọn. Nhưng bạn cũng nên bao gồm những người thực sự đơn giản, bởi vì họ thường làm việc tốt hơn trước các đối thủ câm.

Bạn có thể cân nhắc để đặt thành kiến ​​cho một số chiến lược, hoặc để tránh bị quá mức (ví dụ: cố gắng đánh bại một mô hình mà đối thủ chỉ hành động ngẫu nhiên) hoặc ủng hộ một số chiến lược nhất định khi không có nhiều thông tin.

Tất nhiên, cách tiếp cận này sẽ chỉ hiệu quả đối với một số loại thử thách vua. Nó đã làm rất tốt cho tôi trong trận đấu Rock-Paper-Kéo-Lizard-Spock . Trong các trò chơi khác, gần như không thể đánh giá được một chiến lược nhất định sẽ như thế nào nếu nó không thực sự được chơi.

Một hình thức cực đoan của phương pháp meta này (có liên quan đến gian lận) sẽ bao gồm hành vi đã biết của tất cả các bot khác vào bot của bạn, sao cho nó có thể dự đoán hoàn hảo các động thái của chúng.


bao gồm cả hành vi đã biết của tất cả các bot khác vào bot của riêng bạn không chỉ liên quan đến gian lận, đó gian lận. Tôi khá chắc chắn đó là một lỗ hổng không được phép.
mbomb007
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.