Hotfix release available: 2025-05-14b "Librarian". upgrade now! [56.2] (what's this?)
Hotfix release available: 2025-05-14a "Librarian". upgrade now! [56.1] (what's this?)
New release available: 2025-05-14 "Librarian". upgrade now! [56] (what's this?)
Hotfix release available: 2024-02-06b "Kaos". upgrade now! [55.2] (what's this?)
Hotfix release available: 2024-02-06a "Kaos". upgrade now! [55.1] (what's this?)
New release available: 2024-02-06 "Kaos". upgrade now! [55] (what's this?)
Hotfix release available: 2023-04-04b "Jack Jackrum". upgrade now! [54.2] (what's this?)
Hotfix release available: 2023-04-04a "Jack Jackrum". upgrade now! [54.1] (what's this?)
New release available: 2023-04-04 "Jack Jackrum". upgrade now! [54] (what's this?)
Hotfix release available: 2022-07-31b "Igor". upgrade now! [53.1] (what's this?)
Hotfix release available: 2022-07-31a "Igor". upgrade now! [53] (what's this?)
New release available: 2022-07-31 "Igor". upgrade now! [52.2] (what's this?)
New release candidate 2 available: rc2022-06-26 "Igor". upgrade now! [52.1] (what's this?)
New release candidate available: 2022-06-26 "Igor". upgrade now! [52] (what's this?)
Hotfix release available: 2020-07-29a "Hogfather". upgrade now! [51.4] (what's this?)
New release available: 2020-07-29 "Hogfather". upgrade now! [51.3] (what's this?)
New release candidate 3 available: 2020-06-09 "Hogfather". upgrade now! [51.2] (what's this?)
New release candidate 2 available: 2020-06-01 "Hogfather". upgrade now! [51.1] (what's this?)
New release candidate available: 2020-06-01 "Hogfather". upgrade now! [51] (what's this?)
Hotfix release available: 2018-04-22c "Greebo". upgrade now! [50.3] (what's this?)
Hotfix release available: 2018-04-22b "Greebo". upgrade now! [50.2] (what's this?)
Hotfix release available: 2018-04-22a "Greebo". upgrade now! [50.1] (what's this?)
New release available: 2018-04-22 "Greebo". upgrade now! [50] (what's this?)
Hotfix release available: 2017-02-19g "Frusterick Manners". upgrade now! [49.7] (what's this?)
Hotfix release available: 2017-02-19f "Frusterick Manners". upgrade now! [49.6] (what's this?)
Hotfix release available: 2017-02-19e "Frusterick Manners". upgrade now! [49.5] (what's this?)
Hotfix release available fixing CVE-2017-12979 and CVE-2017-12980: 2017-02-19d "Frusterick Manners". upgrade now! [49.4] (what's this?)
Hotfix release available fixing CVE-2017-12583: 2017-02-19c "Frusterick Manners". upgrade now! [49.3] (what's this?)
Hotfix release available fixing security token and media manager: 2017-02-19b "Frusterick Manners". upgrade now! [49.2] (what's this?)
Hotfix release available fixing install and media manager issues: 2017-02-19a "Frusterick Manners". upgrade now! [49.1] (what's this?)
New release available: 2017-02-19 "Frusterick Manners". upgrade now! [49] (what's this?)
Hotfix release available: 2016-06-26e "Elenor of Tsort". upgrade now! [48.5] (what's this?)
Hotfix release available fixing CVE-2017-12979 and CVE-2017-12980: 2016-06-26d "Elenor of Tsort". upgrade now! [48.4] (what's this?)
Hotfix release available fixing CVE-2017-12583: 2016-06-26c "Elenor of Tsort". upgrade now! [48.3] (what's this?)
Hotfix release available fixing security token: 2016-06-26b "Elenor of Tsort". upgrade now! [48.2] (what's this?)

Game AI Competition Portal

TORCS, TORCS Game Competition

본 페이지는 TORCS(The Open Car Racing Simulator)와 TORCS AI Competition에 관한 페이지 입니다.

주제는 크게 TORCS 게임 자체에 대한 내용과 Competition에 관련된 내용으로 구성되어 있습니다.

TORCS(The Open Car Racing Simulator)

TORCS는 3D 자동차 게임입니다. 또한 GNU 라인센스를 받은 Open Source 프로그램 입니다. TORCS는 게임 자체로도 충분히 재미있게 즐길 수 있으며, 학술적 연구 어플리케이션으로도 응용되고 있습니다.

TORCS의 특징

  1. 높은 이식성(거의 모든 운영체제 종류에서 동작합니다. 모든 버전에서 실행될지는 잘 모르겠습니다.)
  2. 50여개 이상의 자동차(자동차는 에디터에 의해 디자인하고 튜닝할 수 있습니다.)
  3. 20여개 이상의 맵(맵도 에디터에 의해 제작할 수 있습니다.)
  4. 50여개의 내장 인공지능 상대
  5. 키보드 또는 조이스틱으로 자동차 조작
  6. 물리 법칙들(데미지, 충돌, 타이어와 바퀴의 속성들, 지면에 의한 가감속도 변화 등) 반영.
  7. 광원효과, 안개효과, 타이어자국 등의 보조 효과 표현.
  8. 여러가지의 플레이 모드에서 주행 가능(연습, 챔피언쉽 등).

구동 가능한 운영체제

TORCS 게임은 리눅스와 윈도우, FreeBSD, Mac OsX에서 동작합니다. 제공되는 소프트웨어 설치파일은 간단하게 설치명령만 내리면 되도록 되어있습니다.


프로그램 다운로드 및 설치

다음 링크를 통해 각 운영체제 별로 다운 받을 수 있습니다. 또한 설치방법이 자세히 설명되어 있으니 자신의 운영체제에 맞게 설치하면 됩니다.

http://torcs.sourceforge.net/index.php?name=Sections&op=viewarticle&artid=3#win32-bin


이후의 방향

TORCS는 온라인 모드를 지원하도록 노력한다고 합니다.







AI Competition - Car Racing Championship -

TORCS에서는 인공지능(Artificial Intelligence) 자동차를 트랙에서 주행시킴으로써 여러 이론들을 적용해 볼 수 있습니다. 연구 주제로는 여러가지 인공지능 기법이나 부분적 기능을 담당하는 알고리즘, 최적화 등 여러분야에서 적용해 볼 수 있습니다. 또한 매해 게임 학회에서 주관하는 인공지능 자동차 레이싱 대회에서는 세계 각국의 연구자, 또는 이 게임에 관심있는 사람들이 개발한 인공지능 자동차들을 경주시켜 우승자를 가리는 활동도 하고 있습니다. 다음의 학회에서 해마다 이 대회를 주최합니다.

  1. the EvoStar Conference, http://evostar.dei.uc.pt/
    • EVO-2011, Torino(Italy)
    • 제출 마감일 : 4월 15일
    • Conference : 4월 27일 ~ 29일
  2. the Genetic and Evolutionary Computation Conference(GECCO), http://www.sigevo.org/gecco-2011
    • ACM GECCO-2011, Dublin(Ireland)
    • 제출 마감일 : 7월 1일
    • Conference : 7월 12 ~ 7월 16일
  3. IEEE Symposium on Computational Intelligence(CIG), http://cilab.sejong.ac.kr/cig2011
    • CIG-2011, Seoul(South Korea)
    • 제출 마감일 : 8월 19일
    • Conference : 8월 31일 ~ 9월 3일

이 기간에 진행되는 학회는 게임 대회와 학회를 같이 합니다. 제출자들은 소스코드와 논문을(원하는 사람만) 제출기한까지 제출을 하고, 게임결과는 대회가 끝나면 온라인으로 공개됩니다.


게임 진행방식

TORCS AI Competition 은 크게 두 가지 방식의 레이싱을 합니다. 대부분의 대회 방식인 첫번째는 정해진 트랙을 가장 빨리 주행하는 것을 겨루는 방식입니다. 한 개의 트랙에서 여러대의 AI들이 배치되고 서로 경쟁하면서 가장 빠른 시간에 도착하면 승리하는 것입니다. 두번째 방식은 최근에 도입되었으며, 상대방의 차에 데미지를(물론 서로 충돌하면 자신도 입습니다. 취약부위를 공략해야 합니다.) 입혀 상대방의 차를 일정 임계치 이상의 데미지를 먼저 입히면 승리하는 방식입니다.

TORCS AI Competition은 서버와 봇이 네트워크로 패킷을 전송하며 진행됩니다. TORCS 게임 엔진은 게임을 전체적으로 진행시키고 진행된 내용을 화면(게임화면)에 출력합니다. 봇은 각각의 AI 자동차 입니다. 봇은 하나의 서버(게임)에 여러개가 접속하여 주행할 수 있습니다. 다음 그림은 이러한 내용을 그림으로 요약한 것입니다. 그림의 표기에서 잘못된 점은 사실 클라이언트에서(봇)는 어떠한 그래픽적 요소도 없다는 것입니다(오른쪽 하단의 그림은 실재로는 볼 수 없습니다.).

게임엔진과 봇(BOT)은 실시간으로 정보를 주고 받습니다. 게임엔진은 자동차의 여러가지 현재 상태들을 봇에게 전송하며, 봇은 이러한 상태들을 분석하여 여러가지 명령들을 전송합니다. 봇의 명령 방식은 사람이 차를 조종하는 것과 유사합니다. 사람은 게임에서 방향키를 통해 엑셀, 브레이크, 스티어 등을 조종합니다. 이와유사하게 봇은 각각의 요소에 대해 실수값을 전달하고, 엔진에서는 전달된 값으로 봇의 차를 주행합니다. 게임엔진과 봇이 분리됨으로써 AI를 프로그래밍하는 유저 입장 에서는 매우 편리하고 공정하게 되었습니다(더불어 대회를 주최하는 주최측에서도 편해졌지요). 엔진과 독립된 프로그램을 실행시킴으로써 잘못된 프로그램 작성으로 게임엔진을 망가뜨리지 않게 되었고, 전송된 데이터만 분석하여 차를 주행하면 되기 때문에 복잡한 다른 구현에 대해 신경쓰지 않아도 됩니다.

게임은 실시간으로 주행하기 때문에, 봇에게 있어서 빠르게 결과를 전달하는 것이 중요합니다. 엔진은 차의 상태를 전송하고 일정시간을 대기한 후, 봇으로부터 응답이 오는것과 관계없이 다음 상태를 전송합니다. 따라서 봇의 수행이 너무 느릴경우 정상적인 주행이 불가능합니다.


대회 진행방식

각 대회는 다음과 같은 단계로 진행됩니다.

  1. warm-up 스테이지
    • warm-up 스테이지에서는 제출된 자동차들이 대회에 사용될 맵들에서 주행시키는 작업 입니다. 일반적으로 생각했을 때, 이미 프로그래밍 된 각 AI들은 항상 일정하게 주행할텐데 이러한 과정이 왜 필요할지 의문을 가질수도 있겠지만, 일부 인공지능 기법에서는 맵에서 주행을 시킴으로써 해당맵에 대한 정보를 학습시키도록 되어있습니다. 주최측에서는 이러한 과정을 warm-up을 통해 미리 수행할 수 있도록 배려하고 있습니다.
  2. 예선전
    • 이 단계에서는 각 차들을 혼자서 주행 시킵니다. 대회에 사용될 맵에 대해 각 차들을 주행시키고 가장 기록이 좋은 AI 8대를 선발하여 최종 레이스를 합니다.
  3. 최종 레이스
    • 최종레이스는 여러개의 대회 맵에서 가장 기록이 좋은 AI가 우승하는 방식입니다. 각 맵의 순위에 따라서 일정 점수를 획득하게 되고, 획득된 누적 점수가 가장 높은 AI가 최종 우승자가 됩니다. 획득하는 점수는 F1룰을 따릅니다. 즉 다음과 같은 점수를 배분합니다.
    • (순위/점수) : (1위 / 10), (2위 / 8), (3위 / 6), (4위 / 5), (5위 / 4), (6위 / 3), (7위 / 2), (8위 / 1)

입력되는 자동차 상태와 결정해야 하는 출력값들

서버로부터 전송되는 차의 상태정보들

서버는 각 봇의 차 상태를 전송합니다. 이 글의 작성자의 의견으로는 크게 두 가지 종류로 구분할 수 있을 것 같습니다.

보조적인 상태 정보

  • 보조적인 상태 정보는 주행에 직접적인 영향을 미치지는 않지만 차의 전체적인 상태를 이해하는데 도움이 됩니다. 차가 얼마나 데미지를 입었는지, 차가 시작지점으로 부터 얼마나 떨어져 있는지(절대적인 거리가 아니라 도로를 따라 이동하는 거리입니다.), 현재 내가 얼마나 주행을 하였는지와 같은 정보들이 보조적인 상태정보라고 할 수 있습니다. 이러한 정보들은 보통은 주행에 결정적인 영향을 미치지는 않지만 차를 테스트해보거나 개발과정에서 이러한 정보들을 이용하여 좀 더 편하게 작업 할 수 있도록 돕습니다.

직접적인 상태 정보

  • 직접적인 상태 정보는 주행을 결정하는데 있어서 결정적인 역할을 하는 값들 입니다. 예를 들어 speedX라는 변수의 경우 현재 차의 방향에 대한 속도를 나타내는 값으로, 이 속도의 빠르기 정도는 내가 앞으로 어떤 결정을 할 것인지에 핵심적인 영향을 줍니다. 또한 track이라는 변수는 19개의 범위에 대한 트랙과 차의 거리를 나타내는데, 우리는 이 값을 통해 트랙이 현재 어떤 모양인지를 대략적으로 판단할 수 있습니다. 이러한 정보들은 AI를 개발하는데 핵심적인 정보가 되며, 최적의 결정을 위해 반드시 필요합니다.

봇이 결정해야 하는 주행 변수들

봇은 서버로부터 전송된 정보들을 토대로 차를 주행시키는데, 엑셀, 브레이크, 스티어, 기어변속 등 우리가 일반적으로 차를 주행하는 방식대로 맵핑된 각각의 변수들에 대한 값을 전달함으로써 차를 주행시킬 수 있습니다.


규칙

제출하는 AI의 주행원리 및 소스코드는 모두 공개하는 것을 원칙으로 합니다. 원한다면 이전의 우승자의 소스코드를 구하여 본인의 컴퓨터에서 주행시켜 볼 수도 있습니다.


참가 방법

참가 신청은 다음 이메일 주소로 메일을 보내면 됩니다. : scr2011@sigevolution.org

발송하는 이메일의 제목 맨 앞에 “[scr2011 entry]“라는 문구를 삽입하고 나머지를 작성하여 보냅니다.

이메일에는 다음과 같은 제출물이 포함되어 있어야 합니다.

  • 라이브러리나 헤더가 모두 포함되어 그 자체로 컴파일 되는 C++ 이나 JAVA 컨트롤러 클라이언트
  • README.txt에 본인이 제출한 패키지나 프로젝트를 컴파일하고 실행시킬 수 있는 방법을 작성
  • ppt를 5페이지 정도로 하여 본인의 AI를 요약하여 제출(룰에 의해 모든 것은 공개되어야 한다는 방침에 따른 사항입니다.)

Conference 논문을 반드시 제출하여아 하는 것은 아닙니다. 논문 제출과 AI 컨트롤러 제출은 따로 처리 됩니다. 논문은 각 학회의 홈페이지를 통해 제출 가능합니다(학회 회원 가입 등 일반 학회의 방식과 동일합니다.).


봇 클라이언트

봇 클라이언트는 C++ Client와 Java Client 두 가지 프로그래밍 언어로 제공됩니다. 어떤 언어를 사용하든, 데이터를 주고받고 각 데이터를 Get 하는 메소드는 제공됩니다. 즉, 네트워크 통신과 전송 받은 자동차의 현재상태 데이터(문자열 데이터로 전송됩니다.)를 파싱하여 각각의 변수에 넣는 과정은 이미 작성되어 있습니다. 또한, 기본적으로 매우 단순하게 동작하는 모듈이 내장되어 있어서 설치한 봇을 컴파일하여 바로 주행하는 모습을 볼 수 있습니다.

  1. C++ Client
  2. JAVA Client

따라하기

따라하기는 TORCS 소프트웨어 설치와 클라이언트 소스코드가 다운로드 되어 있는 상태에서 제공된 기본코드로 봇을 서버에 접속시켜 차를 주행시키는 과정까지를 안내합니다. 작성자의 컴퓨터 환경은 인텔 CPU를 사용하며, 윈도우7 운영체제에서 Visual Studio C++을 사용하고 있습니다.

C++ 클라이언트 압축해제

C++ 클라이언트를 압축해제 하면 다음과 같은 소스코드들이 있습니다. 헤더 파일과 cpp 파일, 그리고 WS2_32.lib 파일이 필요합니다(나머지는 리눅스에서 사용되는 파일들 입니다.).

새로운 프로젝트 생성 및 소스코드 불러오기

그림처럼 새로운 프로젝트를 생성하고 위의 소스코드들을 추가하였습니다. Source Files 하단에 WS2_32.lib 파일도 같이 불러주었습니다.

소스 수정부분

제공되는 클라이언트 프로그램을 컴파일하기 위해서는 client.cpp 파일을 수정해 주어야 합니다. 원본에는 사용자가 제작한 헤더와 클래스를 작성하도록 임의의 이름으로 정해져 있습니다. 이 상태에서는 컴파일이 되지 않습니다. 우리는 지금은 제공되는 프로그램을 돌려볼 것이기 때문에 제공되는 헤더와 클래스를 추가할 것입니다. #include ”” 에는 그림에서 처럼 SimpleDriver.h 을 넣어줍니다. 밑에쪽에 클래스 선언에는 SimpleClass를 넣어줍니다.

배치파일 생성 및 명령인수

위처럼 client.cpp를 수정하면 이제 프로젝트를 빌드 할 수 있습니다. 프로젝트를 빌드하고 실행파일이 있는 폴더로 이동합니다. 클라이언트는 TORCS 서버에 접속하기 위해 몇가지의 명령인수를 더해서 실행 시킵니다. 명령인수의 형식은 여러가지가 있는데, 일단 그림과 같이 명령인수를 입력하면 됩니다. localhost는 본인 PC의 아이피를 입력해도 동일하게 동작합니다. 저는 도스화면에서 일일이 실행시키기 번거로워서 배치파일을 만들었습니다. 저런식으로 작성후에 배치파일을 실행시키면 일일이 명령인수를 쓰지 않고 바로 실행이 가능합니다.

게임설정

이제 TORCS를 실행시킬 차례입니다. TORCS를 실행하고 RACE - Quick Race - Configure Race - 자신이 원하는 맵 선택을 하고나면 그림과 같은 화면이 뜸니다. 이제 왼쪽에 Selected된 유저목록을 모두 (De)Select 버튼으로 제거하고, 오른족에 Not Selected 목록에서 championship2010server1(유저이름 오른쪽 년도 숫자는 버전별로 다를수 있습니다. 저는 2010년에 받은 TORCS로 실행을 시켜서 2010으로 나왔습니다.)를 (De)select 버튼을 눌러서 왼쪽으로 이동시키고 Accept버튼을 누릅니다.

주행옵션 설정

주행옵션은 세가지가 있습니다. 맨 첫번째에 임의의 숫자를 넣으면 그 km만큼 달리고 종료됩니다. 두번째 칸에 숫자를 넣으면 그 숫자만큼의 바퀴수를 돌고 주행이 종료됩니다. 세번째는 normal과 result only가 있는데, normal은 주행하는 모습을 볼 수 있으며, result only는 주행 결과만 나옵니다.

주행화면

이제 accept를 누르고 start를 누릅니다. 그러면 TORCS는 맵을 로딩한 후에 무한 대기모드로 들어갑니다. 이상태에서 미리 컴파일해놓은 클라이언트로 접속을 하면 됩니다. 따라가기 대로 해온분이라면 배치파일을 만들었을 겁니다. 그 배치파일을 실행시키면 게임이 시작됩니다. 이제 남은 것은 본인만의 AI를 개발하여 주행시켜 보는 것입니다.


2011년의 좋은 정보

2011년에 CIG에서 개최되는 Competition은 서울 코엑스에서 열린다고 합니다. TORCS 뿐만아니라 다양한 종류의 게임이 개최되기 때문에 볼거리도 많고 비교적 국내에는 널리 알려지지 않은 이러한 대회를 홍보할 수 있는 좋은 기회라고 봅니다. 국내 참가자가 적극적으로 대회에 참가하여 좋은 성적도 거두고 훌륭한 학문적 성과도 얻을 수 있기를 희망합니다.






References

TORCS 게임 관련

Game Competition 관련

Papers

J. Quadflieg, M. Preuss, O. Kramer, and G. Rudolph, “Learning the track and planning ahead in a car racing controller,” IEEE International Conference on Computational Intelligence and Games, pp. 395-402, 2010.

L. Cardamone, D. Loiacono, P. L. Lanzi, and A. P. Bardelli, “Searching for the optimal racing line using genetic algorithms,” IEEE International Conference on Computational Intelligence and Games, pp. 388-394, 2010.

M. Kemmerling, and M. Preuss, “Automatic adaptation to generated content via car setup optimization in TORCS,” IEEE International Conference on Computational Intelligence and Games, pp. 131-138, 2010.

D. Loiacono et al. “The 2009 simulated car racing championship,” IEEE Transactions on Computational Intelligence and AI in Games, vol. 2, no. 2, pp. 131-147, 2010.

M. V. Butz and T. D. Lonneker, “Optimized sensory-motor couplings plus strategy extensions for the TORCS car racing challenge,” IEEE Symposium on Computational Intelligence and Games, pp. 317-324, 2009.

E. Onieva, D. A. Pelta, J. Alonso, V. Milanes, and J. Perez, “A modular parametric architecture for the TORCS racing engine,” IEEE Symposium on Computational Intelligence and Games, pp. 256-262, 2009.

D. Perez, G. Recio, Y. Saez, and P. Isasi, “Evolving a fuzzy controller for a car racing competition,” IEEE Symposium on Computational Intelligence and Games, pp. 263-270, 2009.

L. Cardamone, D. Loiacono, and P. L. Lanzi, “Evolving competitive car controllers for racing games with neuroevolution,” Proceedings of the Annual Conference on Genetic and Evolutionary Computation, pp. 1179-1186, 2009.