균형이 필요한 컴퓨터 상대에 대한 점수 접근


16

이 질문은 내가 여러 컴퓨터 게임에서 내가 만들고 현재 사용하고 있거나 사용하려고하는 컴퓨터 상대에 대한 접근 방식에 관한 것입니다.

배경

작년에 "Minesweeper Flags"라는 게임의 컴퓨터 상대를 향상 시키려고 할 때 (짧은 설명 : 상대보다 광산 더 많이 가져 가야 하는 턴 기반 멀티 플레이어 버전의 Minesweeper ) 알고리즘이 작동하는 방식을 크게 변경했습니다. . if-else-if-else와 같은 접근 방식을 사용하는 대신 지정된 가중치를 가진 "스코어"세트를 사용하여 최상의 움직임을 결정합니다.

지뢰 찾기 플래그와 같은 게임의 경우 광산을 채집 할 확률이 가장 높은 움직임 만 만드는 것이지만 그렇게 간단하지는 않습니다. 컴퓨터의 움직임은 일반적으로 현재 게임 상태에서 특정 이동에 대한 여러 기능에 따라 다릅니다. 기능의 예 :

  • 이 움직임이 광산을 득점 할 확률은 얼마입니까?
  • 내 상대에게 무엇을 밝힐 확률은 얼마입니까?

시스템 설명

시스템은 기본적으로 다음과 같이 작동합니다.

  1. "사전 득점자": 현재 게임 상태에 대해 일부 사전 분석이 수행됩니다 (지뢰 찾기 플래그 측면에서, 일반적으로 모든 확률 계산).
  2. "Scorers": 평범한 채점자들은 각 가능한 이동에 대한 점수를 결정하도록 요청받으며, 각 채점자는 자체 기준에 따라 점수를 적용합니다. 채점자는 수행 된 사전 분석 결과를 확인할 수 있습니다.
  3. 위 단계에서 계산 된 점수는 함께 합산되어 이동 점수로 설정됩니다.
  4. 이동은 점수에 따라 정렬되고 순위가 매겨져 같은 점수를 가진 모든 이동이 동일한 순위를 갖습니다.
  5. "사후 점수": 위 점수의 결과는 사후 점수 자체 규칙에 따라 원하는 방식으로 필드의 점수를 수정할 수있는 "사후 점수"로 보낼 수 있습니다.

사전 득점자, 득점자 (무게 포함) 및 사후 득점자를 결합하면 점수 구성 이라고 합니다. .

결과 예

이것은 지뢰 찾기 플래그에 적용된 점수의 예입니다. 점수가 매겨진지도입니다 :

득점 된 지뢰 찾기 플래그 맵

그리고 이것은 실제 점수 구성의 출력입니다. 가능한 움직임의 순위를 보여줍니다. 여기서 1은 최고 순위이며 흰색으로 강조 표시됩니다.

스코어링 접근법의 출력 예

매우 유연한 코드를 작성함으로써 AI에 대한 이러한 접근 방식을 다른 게임에도 삽입 할 수 있습니다.

장점과 단점

아래는 제가 생각할 수있는이 시스템의 장단점입니다

장점

  • AI에 대한 다양한 구성을 작성하는 것은 매우 쉽습니다.
  • 유전자 알고리즘과 함께 사용하는 것이 가능합니다. 각 채점자는 관련 가중치를 가지며 가중치는 유전자가 될 수 있습니다.
  • 일부 도구를 사용하면 특정 이동이 수행 된 이유와 해당 이동을 주로 담당 한 스코어러를 확인할 수 있습니다.
  • 도구를 사용하면 가능한 이동의 전체 점수 / 순위의 맵을 만들 수 있습니다 (위 스크린 샷과 같이).
  • 인간이하는 방식에 점수를 적용함으로써 인간이 생각하는 움직임을 시도하는 "#AI_Mirror"를 만들 수 있습니다.

단점

  • AI를 최대한 잘 재생하기 위해 점수 구성을 "올바르게"조정하는 것은 매우 어려울 수 있습니다.

질문

  • 내가 만든 시스템은 AI 세계에서 널리 알려져 있습니까? 실제 AI 용어로 무엇을 부를 것입니까?

  • 이 방법이 의미가 있거나 권장 할만한 다른 방법이 있습니까?

  • 점수 구성을 쉽게 조정할 수있는 방법은 무엇입니까?

마지막 질문과 관련하여 유전자 알고리즘을 사용할 가능성을 알고 있으며 SARSA 도 약간 알고 있습니다 (그리고 점수 기록은 해당 사이트의 기능에 대한 가중치 설명이 있지만, 내가 이해 한 내용과 정확히 일치하지는 않습니다. 여기). SARSA의 문제는 게임이 끝날 때까지 보상을 알지 못한다는 것입니다. 가장 좋은 움직임은 종종 보상 (마인)을주지 않는 움직임입니다. 현재 이길 확률은 현재 점수 (당신과 상대방이 채굴 한 횟수)와 현재지도의 모양에 따라 다릅니다.


이 질문은 원래 현재 없어진 인공 지능 사이트 에 게시되었습니다 .
이 접근법에 사용 된 (자바) 코드는 이제 Code Review게시 되었습니다 .

답변:


7

한 번에 퍼지 로직과 같은 전문가 시스템 입니다. 출력을 기반으로 의사 결정 매개 변수에 대한 피드백을 수행하기 위해 알고리즘을 실행하지 않기 때문에 실제로 배우지는 않습니다. 그러나 피드백 수행이 알고리즘이 AI인지 여부에 대한 유일한 지표는 아닙니다. 지능적으로 보이는 방식으로 행동한다면, 특히 인간이 상대를 상대로 게임을 할 때 중요하다고 주장 할 수 있습니다.

지정한 알고리즘의 종류는 실제로 보험 계산에서 찾을 수있는 매개 변수화 된 방정식입니다. 각 이동 후 입력 공간이 변경되지만 알고리즘은 이전 상태의 메모리가 필요하지 않으므로 각 이동을 새로운 별도의 보드로 취급합니다.

유전자 알고리즘 사용

유전자 알고리즘에는 두 가지 명확한 옵션이 있습니다.

  • 게놈에 대한 매개 변수를 사용하십시오 (제안한대로). 보유한 규칙을 최적화하지만 여전히 전문가 시스템이 남아 있습니다.
  • 사용 학습 분류 시스템 (LCS)를 사용하면 규칙을 선택합니다. LCS는 규칙과 매개 변수를 인코딩하는 유전자 알고리즘 유형입니다. 수렴하는 데 시간이 오래 걸리고 피트니스 기능에 민감합니다. 나는 결과적인 플레이 방식이 더 흥미로울 것이라고 생각합니다.

시뮬레이션 어닐링

이 문제를 해결하는 또 다른 방법은 SA ( Simulated Annealing )를 사용하는 것 입니다. 문제는 제한된 입력 공간이며 주어진 시나리오에서 선택하기에 가장 적합한 제곱을 찾는 함수를 분석적으로 작성할 수 있습니다. Simulated Annealing을 사용하면 매개 변수에 대한 최적의 글로벌을 찾을 수 있습니다.

너무 좋아서

나는 당신이 알고리즘이 최선을 다하기를 원하지만 인간이 그것을 상대하고 있다는 것을 잊지 마십시오. 이러한 종류의 결정 론적 게임을 플레이 할 수있는 전술적으로 완벽한 방법이 있습니다. AI 플레이어가이 게임을 가져 가면 플레이어가 승리한다는 의미만으로도 운이 좋을 것입니다.


당신의 대답은 저에게 많은 공부를주었습니다. 감사합니다! 확실하지는 않지만이 특정 게임을 "결정 론적"으로 분류하는 데 동의합니다.
Simon Forsberg

내가 결정 론적이라고 말하는 이유는 주어진 게임에 대한 가능성의 수가 제한되어 있고 인간 플레이어가 무작위로 선택하는 것처럼 보일 수 있지만, 결정 론적 인 엄격하게 정의 된 공간 내에서 그렇게하고 있기 때문입니다. 경험상 난수 생성기 (또는 제어하지 않는 외부 요소)를 사용하는 경우 확률 적이라는 것이 원칙입니다. 그렇지 않은 경우 결정적입니다.
Dr Rob Lang

글쎄, 지뢰 찾기 필드의 내용을 알기 위해 움직일 때까지 필드의 내용을 알지 못하기 때문에 확률 적입니다.
Simon Forsberg

1
그것이 확률 론적이지 않은 IMHO. 동일한 시작 조건 (숨겨진 보드)이 주어지면 사각형을 클릭 할 때마다 결과가 다를 수 있습니다.
Dr Rob Lang

2
확률 론적 / 결정 론적이며 완벽하게 관찰 가능 / 부분적으로 관찰 가능한 것은 완전히 다른 직교 특성입니다. 정의에 따라 (예 : Russel / Norvig "환경의 다음 상태가 현재 상태 및 에이전트에 의해 실행 된 작업에 의해 완전히 결정되는 경우 ...") 지뢰 찾기는 완전히 관찰 할 수는 없지만 결정적입니다.
Peteris

0

그렇습니다. 포지션의 특정 측면에 따라 점수를 할당하는 기술은 게임을하기 위해 AI를 작성하는 데있어 표준입니다. 예를 들어, 거의 모든 체스 프로그램은 사용 가능한 피스를 기준으로 가장 중요한 위치에 점수를 매기고 위치에 따라 작은 보너스를받습니다 (예 : 서로를 보호하는 폰). 그런 다음 알파-베타와 같은 적대적 검색 알고리즘을 사용하여 최상의 가용 이동을 계산하려고합니다.

큰 분기 요인으로 인해 대적 검색이 어려울 수 있습니다. 어떤 위치에서든 합법적 인 움직임은 알 수없는 사각형을 표시하거나 표시해야합니다. 반면에 휴리스틱으로 분기 요소를 많이 줄일 수 있습니다. 예를 들어, 전혀 모르는 사각형을 표시하거나 표시하는 것이 가장 좋은 방법은 아닙니다. 반대로, 표시되지 않은 일부 광산의 위치를 ​​알고 있다면, 그중 하나를 표시하는 것이 아마도 가장 좋은 움직임 일 것입니다. 조옮김 테이블을 유지하는 것도 도움이 될 것입니다.

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