"트래픽 AI"를 구축하는 방법?


21

제가 지금 진행하고있는 프로젝트는 도로를 따라 움직이는 자동차, 비행기를 움직이는 비행기 앞치마 등의 의미에서 많은 "트래픽"을 특징으로합니다.

현재 사용 가능한 경로가 미리 계산되므로 교차로에 대해 노드가 자동으로 생성되어 에지로 상호 연결됩니다. 캐릭터 / 에이전트가 월드에 스폰 될 때 일부 노드에서 시작하여 간단히 A * 알고리즘을 통해 대상 노드에 대한 경로를 찾습니다. 에이전트는 경로를 따라 가고 목적지에 도달합니다. 지금까지 아무런 문제가 없습니다.

이제 상담원이 충돌을 피하고 복잡한 교통 상황을 처리 할 수 ​​있도록해야합니다. 인공 지능 분야에 익숙하지 않기 때문에 조향 동작에 관한 몇 가지 논문 / 문서를 찾았지만 너무 낮은 수준이라는 것을 알았습니다. 내 문제는 실제 충돌 방지 (이 경우 에이전트가 엄격하게 정의 된 경로를 따르기 때문에 다소 간단 함)가 아니라 한 에이전트가 막 다른 길을 떠나 다른 에이전트가 정확히 같은 경로를 입력하려고하는 상황으로 구성됩니다. 또는 병목 현상이 발생하는 두 명의 상담원은 한 번에 한 명의 상담원 만 통과 할 수 있지만 두 명의 상담원은 이전에 찾은 최적의 경로에 따라 통과해야하며 다른 상담원이 먼저 통과 할 수있는 방법을 찾아야합니다. 따라서 기본적으로 문제의 주요 측면은 교착 상태를 피하기 위해 트래픽 이동을 예측하는 것입니다.

설명하기는 어렵지만 내 말의 의미를 알 것 같습니다. 어디서부터 시작해야하는지에 대한 권장 사항이 있습니까? 내가 시작할 수있는 서류, 샘플 프로젝트 또는 이와 유사한 것들이 있습니까?

도와 주셔서 감사합니다!


공동 확산 은 무언가 도움이 될 수 있습니다. 여러 에이전트에 대한 경로 검색을 동시에 해결하고 에이전트를 피하는 간단한 방법입니다. 어딘가에 경험을 공유하십시오. 감사합니다. ;)
user712092

답변:


12

이 문제를 해결하는 데는 여러 가지 방법이 있습니다. 그러나 여기 몇 가지 고급 디자인 포인트가 있습니다.

  • 여기서 에이전트 시뮬레이션을 구축하고 있습니다. 경로 찾기는 시스템에 입력하는 것 중 하나입니다. 에이전트에는 목표가 있으며 경로 찾기는 해당 목표를 달성 할 수있는 방법 일뿐입니다. 실제로 요원은 두 가지 목표를 가지고 있다고 생각합니다. 운전자의 최우선 목표는 "충돌하지 마십시오", "두 번째로 가고 싶은 곳"입니다.
  • 시스템은 실제 환경과 유사해야합니다. 대부분의 도로에 2 개 이상의 차선이있는 이유는 해당 시스템으로 트래픽을 구성하는 것이 훨씬 쉬우므로 아무도 생각하지 않아도되기 때문입니다. 단일 차선 시나리오에서 운전자는 다양한 문제를 해결해야합니다.

    감지 -서로를 피하지 않으면 당신과 다가오는 차가 충돌한다는 것을 인식

    반응 -속도가 느려지고 협상 단계에 들어갑니다.

    협상 -운전자 중 한 명이 주도하고 다른 하나는 양보해야합니다. 이것을 결정하는 방법에 대한 규칙은 모호하지만 기본적으로 한 운전자가 임의로 (또는 다른 방향으로 얼마나 많은 자동차가 오는지에 대한 휴리스틱을 기반으로) 결정하는 것이 우선입니다. 예를 들어 A는 시간 1에서 우선권을 가지며, B는 A가 우선권을 얻은 것으로 나타났습니다. A와 B가 우선 순위를 가지려고하면 둘 다 중지하고 임의의 시간 동안 기다렸다가 서로 신호를 보낸 후 다시 시도해야합니다. 결국 한 사람은 다른 사람에게 양보 할 것입니다.

    이 구현의 장점은 인공 대기열 또는 다른 가짜 구조를 유지할 필요가 없다는 것입니다. 협상은 실제 인식의 관점에서 이루어집니다. 일단 양 당사자가 협상 단계에 들어가면 중요한 진전이 우선적으로 취하려는 시도로 쉽게 감지됩니다. 또한 올바른 운전 규칙을 준수하지 않는 사용자에게 적절하게 반응해야합니다.

  • 최악이라고 가정하십시오. 완벽한 시스템에서도 이상한 상황이 발생할 수 있으며 배우는 현명하게 행동해야합니다. 플레이어가 방해 할 수있는 경우 (인공적으로 영역을 차단하는 등) 더 많은 경우가 있습니다. 종종 중지하는 것이 합리적 반응 (그리드 락!)뿐입니다. 현실 세계에서는 적어도 그만 두는 것은 그럴듯하다.

    단순한 실제 로직으로 배우 AI를 모델링할수록 설득력있는 AI를 만드는 것이 더 쉬워집니다. 실제 사람들은 목표에 도달 할 수없는 경우에도 앞뒤로 멈추거나 진동하지 않습니다. AI의 목적지로가는 유일한 도로가 막힌 경우,이를 인식하고 응답을 선택해야합니다 (모두 중지, 집을 포기하고 운전, 포기하고 다른 곳으로 운전).

  • 원하는 것을 얻기 위해 행동을 레이어하십시오. 첫 번째 목표는 충돌하지 않는 것입니다. 따라서 회피 (조향) 논리는 항상 운전자의 행동을 지배해야합니다. 경로 찾기에서 나오는 방향성 논리 위에 레이어를 배치합니다 ( '다음 정션에서 오른쪽으로 이동하고 싶습니다'). 더 높은 수준의 논리를 사용하여 가끔씩 경로를 재평가하는 것 위에 레이어를 추가합니다 ( '앞으로 진행하는 것이 좋지만 진행할 수없는 경우 U 턴이 포함 된 새 경로를 허용하십시오').

  • 경로 찾기는 기억에서 비롯되지만 상황 인식은 인식을 기반으로합니다. 에이전트를 완벽하게 만들려고하지 마십시오. 그들은 집에서 사무실까지가는 길을 알고 있으므로 어느 차례를해야하는지 알고 있습니다. 그러나 그들은 2 마일 떨어진 거리가 막혔다는 것을 모른다. 에이전트가 완벽한 경로를 만들려고하지 마십시오. 완벽한 경로가 없어도 다른 요인으로 인해 경로가 차단 될 수 있습니다. 요원은가는 길을 미리 계획해야합니다.

  • 정보 품질. 동작은 단순해야하지만 좋은 쿼리 기능이 필요합니다. "다가오는 차가 내 차선을 차지하고 있습니까?", "다수의 차가 다가오고 있습니까?", "내 뒤에 차가 있습니까?", "U 턴을 할 수 있습니까?" .


정교한 답변에 감사드립니다. 규칙적인 도로 교통 상황에 도달하면 조언이 도움이 될 것입니다. 그러나 초기 게시물에서 두 가지 중요한 측면을 언급하지 못한 것 같습니다. 1. 플레이어는 트래픽 자체에 참여하지 않습니다. 그것은 비즈니스 시뮬레이션과 비슷하며 네트워크를 구축합니다. 2. 단방향 경로는 특히 공항에서 발생하지만 공항에서는 에이전트가 "자체"가 아니라 어디로 가야하는지 알려주는 타워가 있습니다. 탑은 까다로운 상황을 식별해야하지만 완전한 지식을 가지고 있기 때문에 위에서 설명한 상황 / 행동보다 한 층 위에 있다고 가정합니다.
Lunikon

5

출시 된 게임에서 끔찍한 실패를 보았을 때 몇 가지 제안이 있습니다.

1) 달리 합당한 이유가없는 한 두 개의 차선을 만들고 AI의 목적으로 정상적인 흐름 방향으로 우선 순위를 설정하십시오. 그것에 항복합니다.

2) 교통 체증이 발생하면이를 풀기위한 일종의 논리. 교통 체증 처리가 서로 마주 치려고하는 차량에만 적용되었지만->-> <-<-패턴에 직면했을 때 완전히 실패한 상황을 보았습니다. 필자는 AI 기반을 공격하기 어렵게 만드는 초크 포인트 였지만 공격 그룹이 나가는 동안 조만간 두 명의 자원 수확기가 들어올 것이라고 생각했다. 접촉하는 유닛은 경로를 찾으려고 돌면서 돌아 왔지만 합법적 인 움직임은 없었습니다. 다른 부대가 먼저 움직여야한다는 것을 역 추적하고 파악하지 못했기 때문에 AI는로드 블록이 제거 될 때까지 유용한 조치를 취하지 않았습니다. (접촉하는 장치가 돌아가는 것을 볼 수 있으며 다른 작업은 없습니다.)

나는 붙어있는 유닛이 주변 유닛들에게 방해가되지 않도록함으로써 해결 될 수 있다고 생각합니다. 여기에는 문제가 해결 될 때까지 일종의 논리가 필요합니다.

단순히 대체 경로를 찾는 것은 종종 나쁜 대답입니다. 나는 그런 종류의 라이브 록 상황을 보았습니다 .A 부대는 B가 도로를 막고 있다는 것을 지적하고 다른 경로를 사용하도록 돌아갑니다. 이렇게하면 돌아 오는 B의 도로가 차단됩니다. 이제 도로가 차단 해제되어 다시 돌아옵니다. 매 턴마다 앞뒤로 움직입니다.

전쟁의 안개로 인해 다른 버전의 게임을 보았습니다. 초크 포인트에 적 유닛이있었습니다. 자동 이동시 길 찾기는 실제로 적 유닛을 목표로하지 않는 한 싸울 수 없습니다. 앞으로 나아가고 도로가 막혔습니다. 그런 다음 뒤로 이동하여 더 이상 차단기를 볼 수 없으며 다시 앞으로 이동합니다. 인간이 어디로 가야하는지 알 때까지 반복하십시오.


2
좋은 대답-나는 '나올 수있는'메시지를 브로드 캐스트하는 개념이 좋아서 나갈 수있는 사람은 누구나 할 수 있습니다.
MrCranky

4

교통 시뮬레이션에 익숙하지는 않지만 몇 가지가 떠 오릅니다.

먼저, 병목 현상을 방지하기 위해 차량이 반대 방향으로 이동할 수 있도록 두 개의 차선이 있습니다. 같은 "도로"에.

발생할 수있는 충돌을 두 번째로, 당신은 해야 거대한 더미를 방지하기 위해 충돌 회피 스티어링 동작을. 조향 행동은 수준이 낮을 수 있지만 현실적으로 보이는 출현 행동을 만드는 데 매우 유용합니다.

하나 이상의 레인을 원하지 않으면 그래프에 더 많은 정보를 저장해야합니다. 에이전트 A는 도로에있는 경우 예를 들어, (a 그래프 에지로 표현) 및 에이전트 B는 그들이과 반대 방향으로 이동하는 도로에 동일한 충돌 / 교착 상태 /이 동작을 처리하기 위해 코딩 한 모든 항목 충돌합니다.

그러나 에이전트 A가 도로에있는 경우 해당 도로의 소유권을 요청할 수 있습니다. 도로를 소유한다는 것은 다른 요원이 그 가장자리를 따라 이동할 수 없음을 의미합니다 (경로를 계산할 때 A *가 도로를 선택하지 않도록 가장자리 비용을 막대한 수로 변경하면됩니다). 그런 다음 에이전트 A가 그 길에서 벗어날 때 소유권을 포기합니다.

솔직히, 내가 좋아하지 않은 해키 솔루션이며, 내가 본 대부분의 교통 시뮬레이션 (모두가 아니라면?)은 다중 레인 접근법을 사용합니다.


예, 두 개의 차선을 사용해야합니다 (간단하게 두 개의 차선이 있기 때문에)하지만 그 문제가 해결되지 않는 (아스 커는 설명 된 문제의 대부분은) 방식주는 거래
바트 밴 Heukelom

4

조향 행동에 대한 몇 가지 기사를 찾았지만, 만일을 위해 다음과 같은 기사를 찾았습니까?

http://www.red3d.com/cwr/steer/

그렇지 않은 경우 병목 현상 문제 (예 : 병목 현상)와 같이 이름이 지정된 문제 중 일부를 다루므로 답변이 제공 될 수 있습니다.


0

나는 당신이해야 할 일은 경로 찾기 알고리즘을 구현하는 것이라고 생각합니다.

가능한 한 작은 조각으로지도를 나눕니다 (정사각형). 그런 다음 차량의 위치와 방향을 결정하고 가장 짧거나 가장 직접적인 경로를 찾습니다. 경로는 정사각형 배열이되며 각 단계는 대상을 결정합니다. 그러면 원하는 것은 모든 차량의 현재 위치뿐만 아니라 향후 몇 단계 동안 차량의 미래 위치를 계산하는 것입니다. 미래에 두 대의 차량이 같은 광장에있을 경우 두 차량 중 하나 또는 둘 다의 속도를 변경해야합니다.

A * (별표)는 위키피디아의 의사 코드를 선택한 언어로 쉽게 번역 할 수있는 매우 간단한 경로 찾기 알고리즘이며 다음과 같이 작동합니다. http://en.wikipedia.org/wiki/A*_search_algorithm


4
초기 게시물에서 언급했듯이 이미 A * 알고리즘을 구현했으며 일치하는 데이터 구조도 있습니다. 또한 에이전트 중 하나의 속도를 줄이는 것만으로도 너무 "쉬운"소리가납니다.
Lunikon

이것은 경로 찾기 문제가 아니라 에이전트 시뮬레이션 문제입니다. 경로 찾기는 액터가 적용해야하는 매우 낮은 수준의 지능입니다.
MrCranky

너무 쉽다? 하하. 글쎄, 내가 운전할 때 내가하는 일입니다! 현재 경로와의 충돌을 예측할 수 있으면 속도가 변경됩니다.
justin.m.chase

그리고 신호등? 다른 차량이 경로를 막을 때 어떻게해야합니까? 경로가 앞으로 나갈 때해야 할 일이지만 충돌을 피하기 위해 속도는 0입니다. 다른 차량과의 충돌, 경로가 (당신을 통해) 진행하고 속도가 0이라고?
MrCranky

단일 차선 시나리오에서 첫 번째 자동차가 충돌을 감지하고 중지 할 때 다른 자동차 속도를 사용하여 미래 목적지를 계산하는 경우 첫 번째 자동차 속도가 이제 0이므로 다른 자동차도 중지 할 필요가 없습니다. 긴 단일 차선 도로에서 자동차와의 충돌을 볼 수있을만큼 앞을 내다 볼 수있을 것입니다. 내 친구는 A * 알고리즘에도 STOP 노드를 추가 할 것을 제안합니다. 단일 자동차의 관점에서 다른 자동차를 장애물로 생각하면됩니다. 길어지면 길을 막을 수 있습니다.
justin.m.chase

0

적 국가를 구현했을 때 마지막으로 넘어진 것은 차량이 2 초 이상 멈춰 있으면 그 길을 향해 뛰었습니다. 그래서 그들이 붙잡 혔을 때 기본적으로 수송되는 단위. 아무도 불평하지 않았기 때문에 아무도 보지 못하고 그것을 보지 못한 적이 몇 번이나 발생했다고 생각합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.