참고 : 이 도전은 경기를 실행하는 데 필요한 언어를 설치할 수 없으므로 현재 죽었습니다. 다른 사람이 할 시간과 관심이 있다면 반대하지 않습니다.
리더 보드는 게시물 하단을 참조하십시오.
이것은 봇이 2 차원 그리드 그래프를 통해 경로를 구성하는 반 협조적인 도전입니다. 트래픽이 가장 많은 노드를 제어하는 봇이 승자입니다. 그러나 실제로 연결 경로를 구축하려면 둘 이상의 봇 리소스가 필요하므로 봇은 어느 정도 함께 작동해야합니다.
게임 플레이
다음 N > 0
은 봇의 수입니다.
그리드
이 게임은 왼쪽 하단 좌표가 에있는 2 차원 정수 격자 크기로 재생됩니다 . 각 좌표 와는 세 개의 좌표 출사 가장자리가 , , 및 를 Where, 위 -coordinates 모듈이 촬영된다 . 이것은 그리드가 동쪽과 서쪽 가장자리를 둘러싸고 있음을 의미합니다. 모든 하단 좌표 는 소스 이고 모든 상단 좌표 는 싱크 입니다.⌊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)
다음 그림은 8 × 8
격자를 보여줍니다 .
그래프의 각 정점은 비활성 , 활성 또는 파손 입니다. 모든 정점이 비활성화되고 봇에 의해 활성화 될 수 있습니다. 또한 봇은 정점을 깰 수 있으며 복구 할 수 없습니다.
순서 전환
턴은 파괴 단계 와 활성화 단계 로 구성됩니다 . 파괴 단계에서 각 봇은 하나의 비활성 정점을 파괴 할 수 있습니다. 그 정점은 그때부터 끊어졌으며 다른 사람에 의해 활성화되지 않을 수 있습니다. 활성화 단계에서, 각 봇은 하나의 비활성 버텍스를 활성화 할 수 있습니다. 그때부터, 그들은 그 정점을 소유하며, 다른 사람에 의해 재 활성화 될 수 없습니다. 여러 봇이 모두 같은 차례에 활성화하면 하나의 정점을 소유 할 수 있습니다. 각 단계에서 정점 선택이 동시에 수행됩니다.
채점
한 라운드는 정확히 회전합니다. 이후 라운드는 다음과 같이 점수가 매겨집니다. 각 활성 소스 정점 에서 활성 정점을 따라 무작위로 깊이 우선 검색을 수행합니다 (각 정점의 자식이 임의 순서로 방문됨을 의미). 소스에서 싱크까지의 경로가 발견되면 해당 경로를 따라 모든 정점에 대해 정점의 모든 소유자가 한 점을 얻습니다.N2
N
전체 게임은 100 라운드 동안 지속되며 전체 점수가 가장 높은 봇이 승자입니다. 점수의 분산이 너무 높으면이 수를 늘릴 수 있습니다.
추가 규칙
- 컨트롤러 또는 다른 제출물을 망칠 필요가 없습니다.
- 참가자 당 최대 하나의 제출.
- 게임 시작시 하나의 개인 텍스트 파일을 제외한 외부 리소스는 깨끗하게 지워지지 않았습니다.
- 특정 상대를 이길 수 있도록 봇을 설계하지 마십시오.
- 봇을 컴파일하고 실행하는 명령을 제공하십시오. 데비안 리눅스에서 자유롭게 사용할 수있는 모든 컴파일러 / 인터프리터가 허용됩니다.
컨트롤러
컨트롤러는 Python 3으로 작성 되었으며 GitHub에서 찾을 수 있습니다 . 자세한 지시 사항은 README 파일을 참조하십시오. 시작하는 API는 다음과 같습니다.
- 봇은 각 라운드가 시작될 때 시작되며 라운드가 끝날 때까지 지속됩니다. 줄 바꿈 종료 메시지를 사용하여 STDIN 및 STDOUT을 통해 컨트롤러와 통신합니다.
BEGIN [num-of-bots] [num-of-turns] [side-length]
처음에 입력됩니다.DESTROY [turn]
각 파괴 단계의 시작 부분에 입력됩니다. 봇VERTEX x,y
은 정점을 선택 하거나 으로 응답해야 합니다NONE
.BROKEN [turn] [your-choice] [other-choices]
각 파괴 단계의 끝에 입력됩니다. 다른 봇의 순서는 각 게임이 시작될 때 무작위로 결정되지만 그 동안 고정되어 있습니다. 선택 사항은x,y
또는 로 표시됩니다N
.ACTIVATE [turn]
및OWNED [turn] [your-choice] [other-choices]
상기 활성화 단계 용의 당량은, 동일한 의미를 갖는다.SCORE [your-score] [other-scores]
게임이 끝나면 입력됩니다.- 봇은 1 초 동안 단계 결과를 분석하고 다음 정점을 선택하고 1 초 후에 점수를 매 깁니다. 비교적 오래된 랩톱에서 제출 한 내용을 테스트하므로 여기에 약간의 여유를 두는 것이 좋습니다.
출력 버퍼를 플러시해야합니다. 그렇지 않으면 일부 환경에서 컨트롤러가 정지 될 수 있습니다.
리더 보드
2015 년 3 월 13 일 업데이트
Peacemaker가 시작되었고 Funnelweb도 업데이트를 받았습니다. 점수가 한 단계 올라갔습니다. 두 게임에서 커넥터가 시간 제한을 초과했습니다.
Funnelweb: 30911
Connector: 18431
Watermelon: 3488
Annoyance: 1552
Explorer: 735
Checkpoint: 720
Random Builder: 535
FaucetBot: 236
Peacemaker: 80
ASCII 아트 그래픽이 포함 된 전체 로그는 컨트롤러의 저장소에 graphical_log.txt
있습니다.
일부 관찰 :
- 커넥터는 하나의 정점을 끊어 아주 쉽게 멈출 수 있습니다. 나는 성가심이 자주하는 것으로 생각합니다. 그러나 커넥터 만 경로를 구성 할 수 있기 때문에 현재는 의미가 없습니다.
- 수박은 단순히 연결 경로에 있기 때문에 적절한 점수를 얻을 수 있습니다 (DFS가 정점을 사용할 가능성이 높기 때문에).
- 탐험가는 수박에서 포도를 재배하는 것을 좋아합니다.
- 커넥터는 일반적으로 그리드의 아래쪽 절반에 걸러지기 때문에 업데이트 된 Funnelweb은 정말 좋은 점수를받습니다.
- 게임이 꽤 길어지고 있으며 평균 라운드는 내 컴퓨터에서 약 25 초가 걸립니다.
4/3*N^2
되었으며 심지어 봇은 유효한 경로를 형성하는 데 문제가있었습니다. 그러나 오류로 인해 커넥터가 일시적으로 실격 처리되었으며 이제 수정되었으므로 게임이 더 흥미로울 것으로 기대합니다. 오늘 밤 또 다른 배치를 실행하겠습니다.