인공 지능형 우주선 이동을위한 인공 지능 (이동 동작에 영향을 미치는 모양)


15

저는 선박 사용자 정의에 크게 의존하는 네트워크 턴 기반 3D-6DOF 우주 함대 전투 전략 게임을 설계하고 있습니다. 질문을 설정하려면 게임에 대해 조금 알아야하므로 게임에 대해 조금 설명하겠습니다.

내가 목표로하는 것은 각 선박마다 장점과 단점을 줄 수 있는 맞춤형 모양과 부착 된 모듈 (프로펠러, 트랙터 빔 ...) 을 사용하여 자신의 함대 를 만들 수 있기 때문에 다양한 함대 분포가 있습니다. 예를 들어, 측면에 두 개의 프로펠러가있는 긴 배는 그 비행기를 쉽게 돌 수 있습니다. 뒤쪽에 많은 프로펠러를 배치하지 않으면 더 큰 배는 천천히 움직일 것입니다. 이 방향으로 빠르게 움직입니다.)이 기능을 중심으로 모든 게임의 균형을 잡을 계획입니다.

이 게임은 명령과 전투 단계의 두 단계로 진행됩니다. 주문 단계에서 다른 배송을 명령합니다. 모든 플레이어가 주문 단계를 마치면 전투 단계가 시작되고 선박 주문이 일정 시간 동안 실시간으로 해결 된 다음 작업이 일시 중지되고 새로운 주문 단계가 있습니다.

플레이어 입력에 대해 생각하면 문제가 발생합니다. 선박을 이동하려면 조종, 전진, 제동, 제자리에서 회전하려는 경우 다른 프로펠러를 켜거나 끌 필요가 있습니다 ...이 프로펠러는 전체 힘으로 작동 할 필요가 없으므로 더 많은 움직임을 얻을 수 있습니다 적은 프로펠러와의 조합.

이 접근법은 약간 지루하다고 생각합니다. 플레이어는 모터 등으로 바이올린 연주를하고 싶지 않으며 이동하고 죽이고 싶을뿐입니다. 플레이어가이 함선에 명령을 내리는 방식은 목적지회전에 의한 것이며 AI는 해당 프로펠러의 힘을 계산하여 해당 이동과 회전을 달성합니다. 추진이 전체 턴 계산을 통해 동일 할 필요는 없으며 (주문이 제공된 후) 선박이 움직일 때 반응하여 프로펠러의 힘을 필요에 따라 동적으로 조정하면 시원 할 수 있지만 구현하기가 너무 어렵고 게임이 실제로 작동하는 데 필요하지 않습니다.

두 경우 모두 AI가 가장 좋은 (또는 최소한 최악의) 궤적을 달성하기 위해 어떤 프로펠러를 활성화할지 결정하는 방법은 무엇입니까?

나는 몇 가지 접근법에 대해 :

  • 인공 지능 학습 : 선박 유형은 시행 착오를 통해 이동에 대해 배우고 더 많은 용도로 행동을 조정하며 마침내 "똑똑해"집니다. AI 코딩에 훨씬 더 관여하고 싶지는 않습니다. 플레이어가 배우지 않고도 배울 수는 있지만 플레이어에게 실망 할 수 있다고 생각합니다.
  • 사전 계산 된 타임 스텝 이동 : 선박 생성시, 모든 델타 시간 동안 각 프로펠러 구성 및 출력에 대해 가능한 모든 이동이 계산됩니다. 메모리 집약적이고, 추악하고, 나쁘다.
  • 사전 계산 된 궤적 : 위와 동일하지만 각 델타 시간이 아니라 전체 궤적에 대해 가능한 한 많이 맞습니다. 전체 전투 단계에서 고정 프로펠러 구성이 필요하며 여전히 메모리 집약적이고 추악하며 나쁩니다.
  • 지속적인 무차별 강제 실행 : AI는 전체 전투 단계에서 가능한 모든 프로펠러 구성을 지속적으로 확인하고 몇 가지 시간 단계를 미리 계산하고이를 기반으로 가장 적합한 것을 결정합니다. 단점 : 이제 좋은 점은 나중에 그다지 좋지 않을 수 있으며 CPU 사용량이 많고, 추악하고, 나쁩니다.
  • 단일 무차별 강제력 : 위와 동일하지만 시뮬레이션 시작시 무차별 강제력 만 있으므로 전체 전투 단계에서 일정한 프로펠러 구성이 필요합니다.
  • 연속 각도 검사 : 이 방법은 완전한 이동 방법은 아니지만 "멍청한"프로펠러 구성을 버리는 방법 일 수 있습니다. 현재 프로펠러의 법선 벡터와 마지막 벡터를 고려하면 각도에 ​​따라 프로펠러에 필요한 전력을 근사 할 수 있습니다. 전투 단계 전체에서이 작업을 지속적으로 수행해야합니다. 나는 이것을 최근에 알아 냈으므로 너무 많은 생각을하지 않았습니다. 선험적으로, "지금 좋은 점은 나중에는 좋지 않을 수도있다"는 단점이 있으며, 더 나은 추진 구성을 만들기 위해 함께 작용할 수있는 다른 프로펠러는 신경 쓰지 않습니다.

나는 정말로 여기 붙어 있습니다. 어떤 아이디어?


스티어링 행동을 살펴 봤습니까?
stonemetal

1
@stonemetal은 확실합니다. 여기서 문제는 조향 거동이 일반적으로 물체의 위치와 회전을 완전히 제어하고 일부 제약 조건 (또는 적어도 웹에서 찾은 것)을 가정하여 모델링된다는 것입니다. 여기서 AI는 엔티티를 완전히 제어하지 못합니다. 엔티티를 움직이게하는 것 (프로펠러)에 대해서만. 이 조향 행동을 우주선의 실제 운동과 연결하는 데 문제가 있습니다.
kaoD

그것이 경주 용 자동차에서 조향 행동이 잘 작동하지 않는 것과 같은 이유입니다. 조향 행동은 훌륭하지만 모든 것에 대한 보편적 인 해결책은 아닙니다.
tenpn

@ haoD 나는 ghostonline이 응답 한 라인을 따라 무언가를 생각하고있었습니다. 무엇이든 구축 한 다음 조향 동작의 제약 조건으로 해석하십시오. 당신의 응답에서 그것은 스티어링 행동이 아마도 충분히 유연하지 않은 것처럼 들립니다.
stonemetal

1
나는 이것이 매우 오래 되었다는
mklingen

답변:


4

죄송하지만 테스트를 거친 솔루션이 없지만 수학적으로 해결할 수 없습니까?

프로펠러와 질량 중심으로부터의 오프셋이 주어지면 회전 할 수있는 평면을 계산할 수 있습니다.

어떤 움직임에도 하나 이상의 프로펠러를 사용할 수 있습니다. 각 프로펠러를 쿼리하여 해당 평면이 목표 방향에 기여할 수 있는지, 프로펠러가 기여하는 데 얼마나 많은 노력을 기울여야하는지 (CoM에서 멀리 떨어진 프로펠러가 더 적은 에너지를 사용하여 더 많은 회전을 생성 할 수 있음) 당신은 목표로 향합니다. 그런 다음 비용이 적게 드는 솔루션을 찾을 때까지 해당 검색 공간에서 A *를 사용하면 총 에너지 사용이 가장 적거나 가장 빠른 이동이 될 수 있습니다.

PID 컨트롤러를 사용하여 목표에 접근 할 때 회전 및 중간 전력을 완료하면 재평가하십시오.

앞으로 이동하려면 간단한 솔루션으로 항상 앞으로 이동하여 목표에 접근 할 때 목표 속도를 떨어 뜨립니다. 재생할 3D 공간이 있으므로 복잡한 3 점 회전 루틴을 피할 수 있습니다. 직선 속도를 위해 선택된 프로펠러의 출력을 선삭 계산에 초기 상태의 일종으로 고려해야합니다.

이것은 봉투의 뒷면에 있지만 중요한 결함은 없습니다. 많은 노력과 숫자 조정. :)


이것은 내가 찾던 whay, 수학적 솔루션입니다 ... 감사합니다! 나는 그것이 소리처럼 쉬워지기를 바랍니다.
kaoD

7

AI를 사용하여 약간의 플레이어 제어 기능을 포기하고 싶기 때문에 프로펠러에 대한 태킹의 영향을 단순화하고 선박 크기를 컴퓨터 알고리즘에 대해보다 쉽고 관리하기 쉬운 매개 변수로 변경하는 것도 고려할 수 있습니다. 플레이어는 여전히 선박의 특정 부분에 프로펠러를 추가 할 수 있지만 일단 완료되면 매개 변수에 '압축'됩니다.

각 프로펠러는 선박의 회전 속도에 영향을 미치거나 평행 배치 된 프로펠러와 결합하여 특정 치수의 이동 속도에 영향을줍니다. 각 프로펠러에 대해 이러한 매개 변수를 결합하면 선박의 최대 회전 속도와 속도를 얻을 수 있습니다. 사용 가능한 모든 치수 (위, 아래, 왼쪽, 오른쪽, 앞으로, 뒤로)에 대해 전체 프로펠러와 프로펠러에 대해이 두 매개 변수를 전체 선박의 최대 회전 속도와 속도로 설정하십시오.

각 치수에 대한 회전 속도와 속도를 사용하면 실제로 선박이 목적지로 이동할 수 있도록 충분한 정보가 있습니다. 플레이어는 프로펠러 구성의 효과를 볼 수 있지만 후드 아래에서 입력이 크게 단순화됩니다. 배가 이동해야하는 거리를 기반으로 한 비행 전략을 두 개 이상 만들어서 비행을보다 자연스럽게 보이게하고 플레이어가 선박 이동에 대한 통제력을 발휘할 수있는 감각을 높일 수 있습니다. 그러나 결국, 당신이 말했듯이, 선박이 목적지에 어떻게 도착하고 경로가 최적인지 여부는 중요하지 않으며 도착해야하며 도착 시간은 프로펠러 구성에 의해 영향을받습니다.

선박 치수의 경우 거친 효과를 위해 압축 속도 값이 있으면이를 계수하거나보다 정확한 효과를 계산하는 동안 사용할 수 있습니다. 차이가 플레이어의 제어 감각에 영향을 미치지 않을 수 있기 때문에 정확한 방법이 노력할 가치가 있는지 테스트하고 싶을 것입니다.


내가 찾던 것이 아니라 실제로 필요한 경우 트릭을 수행 할 수 있습니다. 아이디어에 대한
찬성

0

우주에서는 모양이 움직임에 영향을 미치지 않습니다. 드래그 할 공기가 없습니다.

중요한 것은 선박과 추가 기능 총 질량입니다. 더 간단한 질량 추력 중력 문제입니다. 따라서 이러한 계산을 수행하거나 턴베이스 게임이므로 Traveler와 같은 RPG와 같은 이동 시스템을 개발할 수 있습니다.


GD.SE에 오신 것을 환영합니다! 이 질문은 이미 수용된 답변이며 2 년 전에 요청되었습니다. 아마도 사이트의 최신 질문에 답변 할 수도 있습니다.
Polar

예, 모두 사실이지만, 나는 항상 다른 사람이 나중에 (내가했던 것처럼) 그것을 우연히 발견하고 그것을 사용할 것이라고 생각합니다. hehe, 나는 질문에 대답하기 위해 여기에 오지 않았다. .. 대부분의 것처럼, 내 자신의 문제에 대한 해결책을 파헤 쳤다.
gnoll110

@Polar 질문 포스터는 여기에 있습니다. 나는 그의 대답이 매우 흥미로웠다! 그가 답장을하게되어 기쁘고 몇 년 후 가치를 더하는 것이 SO의 가장 소중한 부분 중 하나라고 생각합니다.
kaoD

@ gnoll110 여기가 잘못되었을 수 있습니다. 드래그는 없습니다. 그러나 추력 벡터가 질량 중심과 이루는 각도는 선박이 이동하거나 회전하는 방식에 영향을 미칩니다. 예 : 질량 중심과 인라인 엔진이 변환되고 질량 중심에서 멀어지면 회전 구성 요소가 선박에 추가됩니다.
kaoD

@kaoD 조금 거칠게 보이면 죄송합니다. 나중에 많은 가치가 추가됩니다. 나는 단지 그가 수 있다고 제안했다 또한 새로운 질문에 대한 답변 - 더 많은 질문에 대답, 더 나은!
Polar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.