LƯU Ý: Thử thách này hiện đã chết, vì tôi không thể cài đặt các ngôn ngữ cần thiết để chạy một trận đấu. Nếu ai đó có thời gian và sở thích để làm điều đó, tôi không phản đối.
Xem dưới cùng của bài viết cho một bảng thành tích.
Đây là một thử thách vua nửa hợp tác, nơi các bot xây dựng các đường dẫn thông qua biểu đồ lưới hai chiều. Bot kiểm soát các nút có lưu lượng truy cập nhiều nhất là người chiến thắng. Tuy nhiên, phải mất nhiều tài nguyên của một bot để thực sự xây dựng một đường dẫn kết nối, vì vậy các bot sẽ phải làm việc cùng nhau - ở một mức độ nào đó.
Trò chơi
Sau đây, hãy để N > 0
là số lượng bot đang chơi.
Cái lưới sắt
Trò chơi được chơi trên một lưới số nguyên hai chiều , có tọa độ phía dưới bên trái . Mỗi tọa độ với có các gờ đi với ba tọa độ , và ở trên nó, nơi -coordinates được lấy modulo . Điều này có nghĩa là lưới bao quanh ở rìa phía đông và phía tây. Mỗi tọa độ dưới cùng là một nguồn , và mọi tọa độ trên cùng là một bồn rửa .⌊4/3N2⌋ × ⌊4/3N2⌋
(0,0)
(x,y)
0 ≤ y < ⌊4/3N2⌋-1
(x-1,y+1)
(x,y+1)
(x+1,y+1)
x
⌊4/3N2⌋
(x,0)
(x,⌊4/3N2⌋-1)
Hình ảnh sau đây cho thấy một 8 × 8
lưới.
Mỗi đỉnh của đồ thị không hoạt động , hoạt động hoặc bị hỏng . Tất cả các đỉnh bắt đầu không hoạt động và có thể được kích hoạt bởi các bot, sau đó sẽ là chủ sở hữu của chúng. Ngoài ra, các bot có thể phá vỡ các đỉnh và chúng không thể được sửa chữa.
Đặt hàng
Một lượt bao gồm một giai đoạn phá hủy và một giai đoạn kích hoạt . Trong giai đoạn phá hủy, mỗi bot có thể phá vỡ một đỉnh không hoạt động. Đỉnh đó bị phá vỡ từ đó trở đi, và có thể không được kích hoạt bởi bất cứ ai. Trong giai đoạn kích hoạt, mỗi bot có thể kích hoạt một đỉnh không hoạt động. Từ đó trở đi, họ sở hữu đỉnh đó và không ai có thể kích hoạt lại được. Một số bot có thể sở hữu một đỉnh duy nhất, nếu tất cả chúng đều kích hoạt nó trên cùng một lượt. Trong mỗi giai đoạn, các lựa chọn đỉnh được thực hiện đồng thời.
Chấm điểm
Một vòng kéo dài cho lượt chính xác . Sau này, vòng được tính như sau. Từ mỗi đỉnh nguồn hoạt động, chúng tôi thực hiệnN2
N
lần tìm kiếm theo chiều sâu ngẫu nhiên dọc theo các đỉnh hoạt động (có nghĩa là con của mỗi đỉnh được truy cập theo thứ tự ngẫu nhiên). Nếu một đường dẫn được tìm thấy từ nguồn đến một số chìm, thì đối với tất cả các đỉnh dọc theo đường dẫn đó, mọi chủ sở hữu của đỉnh sẽ có một điểm.
Toàn bộ trò chơi kéo dài trong 100 vòng, và bot có nhiều điểm nhất là người chiến thắng. Tôi có thể tăng con số này, nếu phương sai của điểm số quá cao.
Quy tắc bổ sung
- Không gây rối với bộ điều khiển hoặc đệ trình khác.
- Nhiều nhất một bài nộp cho mỗi thí sinh.
- Không có tài nguyên bên ngoài, ngoại trừ một tệp văn bản riêng, bị xóa sạch khi bắt đầu trò chơi.
- Không thiết kế bot của bạn để đánh bại hoặc hỗ trợ các đối thủ cụ thể.
- Cung cấp các lệnh để biên dịch và chạy bot của bạn. Mọi trình biên dịch / trình thông dịch có sẵn miễn phí cho Debian Linux đều được chấp nhận.
Bộ điều khiển
Bộ điều khiển được viết bằng Python 3 và có thể được tìm thấy trong GitHub . Xem tệp README để được hướng dẫn chi tiết. Đây là một API để giúp bạn bắt đầu:
- Bots được bắt đầu vào đầu mỗi vòng, và tồn tại cho đến cuối vòng. Giao tiếp với bộ điều khiển thông qua STDIN và STDOUT, sử dụng các tin nhắn kết thúc dòng mới.
BEGIN [num-of-bots] [num-of-turns] [side-length]
là đầu vào lúc đầu.DESTROY [turn]
là đầu vào ở đầu của mỗi giai đoạn phá hủy. Bot của bạn sẽ trả lời với một trong haiVERTEX x,y
để chọn một đỉnh, hoặcNONE
.BROKEN [turn] [your-choice] [other-choices]
là đầu vào ở cuối mỗi giai đoạn phá hủy. Thứ tự của các bot khác được chọn ngẫu nhiên vào đầu mỗi trò chơi, nhưng vẫn cố định trong suốt quá trình. Các lựa chọn được trình bày làx,y
hoặcN
.ACTIVATE [turn]
vàOWNED [turn] [your-choice] [other-choices]
là tương đương của ở trên cho giai đoạn kích hoạt, và có cùng ngữ nghĩa.SCORE [your-score] [other-scores]
là đầu vào ở cuối trò chơi.- Bot của bạn có 1 giây để phân tích kết quả của một pha và chọn đỉnh tiếp theo và 1 giây để thoát sau khi cho điểm. Tôi sẽ kiểm tra các bài nộp trên máy tính xách tay tương đối cũ của mình, vì vậy tốt hơn là để lại một số lề ở đây.
Hãy nhớ để xóa bộ đệm đầu ra của bạn. Không làm như vậy có thể treo bộ điều khiển trong một số môi trường.
Bảng xếp hạng
Cập nhật ngày 13/03/2015
Peacemaker đang hoạt động và Funnelweb cũng nhận được bản cập nhật. Điểm số tăng vọt bởi một thứ tự cường độ. Kết nối vượt quá giới hạn thời gian trong hai trò chơi.
Funnelweb: 30911
Connector: 18431
Watermelon: 3488
Annoyance: 1552
Explorer: 735
Checkpoint: 720
Random Builder: 535
FaucetBot: 236
Peacemaker: 80
Nhật ký đầy đủ với đồ họa nghệ thuật ASCII có thể được tìm thấy trong kho lưu trữ của bộ điều khiển graphical_log.txt
.
Một số quan sát:
- Trình kết nối có thể rất dễ dàng bị dừng bằng cách phá vỡ một đỉnh ở phía trước nó. Tôi nghi ngờ Annoyance thường xuyên làm điều này. Tuy nhiên, hiện tại nó không có ý nghĩa gì vì chỉ Trình kết nối mới có thể hình dung được một đường dẫn.
- Dưa hấu có thể đạt được một số điểm kha khá bằng cách đơn giản là nằm trên đường nối (vì DFS rất có thể sử dụng các đỉnh của nó).
- Explorer thích trồng dây leo từ dưa hấu.
- Funnelweb được cập nhật đạt điểm thực sự tốt, vì Trình kết nối thường bám vào nó ở nửa dưới của lưới.
- Các trò chơi đang trở nên khá dài, vòng trung bình mất khoảng 25 giây trên máy của tôi.
4/3*N^2
và thậm chí ở đó, các bot có vấn đề hình thành các đường dẫn hợp lệ. Tuy nhiên, Trình kết nối tạm thời bị loại do lỗi và bây giờ nó đã được sửa, tôi hy vọng các trò chơi sẽ thú vị hơn. Tôi sẽ chạy một đợt khác tối nay.