Ở Hoàng gia Trung Quốc, các cấp bậc trong xã hội không được quyết định bởi sự sinh ra hay sự giàu có, mà bởi khả năng của một người vượt trội trong các kỳ thi Hoàng gia. Ngọc Hoàng, người cai trị thiêng liêng của thiên đàng, đã kêu gọi tất cả các đối tượng của mình được kiểm tra để xác định giá trị của họ, và ai sẽ là người ban cho Thần ủy cai trị Trung Quốc.
Các quy tắc của bộ máy quan liêu:
- Bộ máy quan liêu thiêng liêng bao gồm các cấp bậc không có giá trị nguyên âm, bắt đầu bằng 0. Mỗi thành viên (bot) của bộ máy quan liêu thuộc về một cấp bậc. Mỗi cấp bậc có thể chứa nhiều thành viên tùy ý, nhưng không thể để trống trừ khi tất cả các cấp trên đều trống
- Khi bắt đầu trò chơi, tất cả các thành viên có thứ hạng 0
- Mỗi lượt, mỗi thành viên của bộ máy quan liêu phải trả lời một bài kiểm tra. Bài kiểm tra bao gồm đoán chính xác các giá trị boolean của một danh sách. Độ dài của danh sách là số thứ hạng trên thành viên.
- Các đề thi được chuẩn bị bởi một thành viên ngẫu nhiên của thứ hạng trên. Thành viên của thứ hạng cao nhất nhận được câu hỏi của họ trực tiếp từ
JadeEmperor
(xem bên dưới) - Một thành viên đạt ít nhất 50% trong bài kiểm tra của họ đủ điều kiện để được thăng hạng. Một thành viên đạt ít hơn 50% trong bài kiểm tra của họ đủ điều kiện cho Demotion.
- Một thành viên đủ điều kiện cho Demotion chỉ bị giảm một bậc nếu có thành viên đủ điều kiện cho Khuyến mãi ở thứ hạng dưới đây để thay thế họ.
- Tất cả các thành viên đủ điều kiện cho Khuyến mãi đều tăng thứ hạng của họ miễn là điều này không để lại thứ hạng trống.
- Nếu không phải tất cả các thành viên đủ điều kiện có thể bị hạ cấp hoặc được thăng cấp, thì ưu tiên sẽ thuộc về những người có mức độ thấp nhất (đối với việc hạ cấp). điểm cao nhất (cho khuyến mãi). Ties bị phá vỡ ngẫu nhiên.
- Thứ hạng của một thành viên chỉ có thể thay đổi tối đa 1 mỗi lượt.
Nội quy của trò chơi:
- Mỗi bot sẽ được gán ngẫu nhiên một ID khi bắt đầu trò chơi, điều này sẽ không thay đổi trong quá trình của nó. Có
JadeEmperor
ID -1, tất cả những người khác có ID không âm liên tiếp, bắt đầu bằng 0. - Tất cả các bot cạnh tranh cùng một lúc
- Trò chơi chạy trong 100 lượt, điểm số của bot là thứ hạng trung bình sở hữu trong thời gian đó.
- Tổng số điểm có được bằng cách chạy 1000 trò chơi và tính trung bình các kết quả.
- Mỗi Bot là một lớp Python 3 thực hiện bốn chức năng sau:
ask(self,n,ID)
, làm một bài kiểm tra bằng cách trả về mộtlist
Booleans có độ dài n. ID là ID của bot người phải đoán danh sách đó.ask()
có thể được gọi nhiều lần trong một vòng cho bất kỳ bot nào, nhưng cũng không được.answer(self,n,ID)
, đó là một nỗ lực để trả lời một bài kiểm tra bằng cách trả về mộtlist
Booleans có độ dài n. ID là ID của bot đãask()
tạo ra bài kiểm tra.answer()
được gọi chính xác một lần mỗi vòng cho mỗi bot.update(self,rankList,ownExam,otherExams)
được gọi một khi Bộ điều khiển đã thực hiện tất cả các Ưu đãi và Giảm giá. Đối số của nó là: Một danh sách các số nguyên, liệt kê tất cả các thứ hạng theo ID của tất cả các bot; một tuple, bao gồm hai danh sách, đầu tiên là các câu hỏi thi, sau đó là các câu trả lời mà bot đưa ra (trong trường hợp nó quên); sau đó là một danh sách các bộ dữ liệu, tương tự bao gồm các cặp câu trả lời thi, lần này cho tất cả các bài kiểm tra mà bot đưa ra.__init__(self, ID, n)
vượt qua bot của chính ID của nó và số lượng bot cạnh tranh.
- Các lớp được phép thực hiện các chức năng khác để sử dụng riêng
- Xác định thêm các biến và sử dụng chúng để lưu trữ dữ liệu về các bài kiểm tra trước đây được cho phép rõ ràng.
- Hiệu ứng meta lập trình bị cấm, nghĩa là mọi nỗ lực truy cập trực tiếp vào mã của các bot khác, mã của Bộ điều khiển, gây ra Ngoại lệ hoặc tương tự. Đây là một cuộc thi về chiến lược cho các kỳ thi, không phải là hack mã.
- Các bot cố gắng giúp đỡ lẫn nhau được cho phép rõ ràng, miễn là họ không làm điều đó thông qua các hiệu ứng meta, mà hoàn toàn là thông tin được truyền qua
update()
- Các ngôn ngữ khác chỉ được phép trong trường hợp chúng có thể dễ dàng chuyển đổi sang Python 3.
- Các thư viện numpy sẽ được nhập khẩu như
np
. Phiên bản là 1.6.5, có nghĩa là nó sử dụng thư viện ngẫu nhiên cũ. Nếu bạn có numpy 1.7, các chức năng cũ có sẵnnumpy.random.mtrand
để thử nghiệm. Hãy nhớ để tước mtrand để nộp. - Nếu một bot gây ra Ngoại lệ trong thời gian chạy, nó sẽ bị loại. Bất kỳ bot nào có mã bị xáo trộn đến mức không thể biết được liệu nó có tạo ra một danh sách có độ dài n khi
ask()
hayanswer()
được gọi hay không cũng sẽ bị loại. Một bot buộc tôi phải sao chép các kết quả đầu ra sâu được -1 trên điểm số. - Tên lớp phải là duy nhất
- Nhiều bot cho mỗi người được cho phép, nhưng chỉ phiên bản mới nhất sẽ được lấy từ các bot được cập nhật lặp đi lặp lại.
- Vì dường như có một số nhầm lẫn về sự tương tự bot:
- Bạn không được phép đăng một bản sao của bot khác. Đây là lỗ hổng tiêu chuẩn duy nhất thực sự áp dụng trong thử thách này.
- Bạn được phép chia sẻ mã với các bot khác, bao gồm cả bot của người khác.
- Bạn không được phép gửi bot khác với bot khác chỉ bằng một thay đổi nhỏ đối với chiến lược (như thay đổi hạt giống để tạo câu hỏi) trừ khi bạn có thể chứng minh rằng số bot sao chép carbon đó là mức tối thiểu cần thiết để thành công ban hành chiến lược của họ (Đó thường sẽ là hai bot cho sự hợp tác).
Ví dụ:
Đây JadeEmperor
luôn là một phần của trò chơi, nhưng không cạnh tranh; ông phục vụ như là máy phát cho các kỳ thi của các bot cấp cao nhất. Các bài kiểm tra của ông là ngẫu nhiên, nhưng không thống nhất, để cho phép các bot thông minh một cách để tiến lên.
class JadeEmperor:
def __init__(self):
pass
def ask(self,n,ID):
num=min(np.random.exponential(scale=np.sqrt(np.power(2,n))),np.power(2,n)-1)
bi=list(np.binary_repr(int(num),width=n))
return [x=='0' for x in bi]
Các Người say sản xuất kỳ thi và câu trả lời hoàn toàn ngẫu nhiên. Anh ấy sẽ là một phần của trò chơi.
class Drunkard:
def __init__(self,ID,n):
pass
def ask(self,n,ID):
return list(np.random.choice([True,False],size=n,replace=True))
def answer(self,n,ID):
return list(np.random.choice([True,False],size=n,replace=True))
def update(self,rankList,ownExam,otherExams):
pass #out
Các ăn cắp chỉ là bản sao các kỳ thi trước. Anh ấy cũng sẽ là một phần của trò chơi.
class Plagiarist:
def __init__(self,ID,n):
self.exam=[True]
def ask(self,n,ID):
return (self.exam*n)[0:n]
def answer(self,n,ID):
return (self.exam*n)[0:n]
def update(self,rankList,ownExam,otherExams):
self.exam=ownExam[0]
Mã điều khiển có sẵn ở đây . Để kiểm tra, bạn có thể đặt lớp của riêng mình vào một tệp tin dự thi trong cùng một thư mục và chúng sẽ được nhập.
Chatroom có thể được tìm thấy ở đây .
Kỳ thi bắt đầu!
Điểm hiện tại, với độ chính xác cao hơn (10000 lần chạy) cho ngày 20 tháng 10:
Cuộc thi sẽ được tổ chức với mỗi mục mới trong tương lai gần.
ID, n
nhưng các đối số phương thức khác n, ID
?