이 질문은 내가 여러 컴퓨터 게임에서 내가 만들고 현재 사용하고 있거나 사용하려고하는 컴퓨터 상대에 대한 접근 방식에 관한 것입니다.
배경
작년에 "Minesweeper Flags"라는 게임의 컴퓨터 상대를 향상 시키려고 할 때 (짧은 설명 : 상대보다 광산 을 더 많이 가져 가야 하는 턴 기반 멀티 플레이어 버전의 Minesweeper ) 알고리즘이 작동하는 방식을 크게 변경했습니다. . if-else-if-else와 같은 접근 방식을 사용하는 대신 지정된 가중치를 가진 "스코어"세트를 사용하여 최상의 움직임을 결정합니다.
지뢰 찾기 플래그와 같은 게임의 경우 광산을 채집 할 확률이 가장 높은 움직임 만 만드는 것이지만 그렇게 간단하지는 않습니다. 컴퓨터의 움직임은 일반적으로 현재 게임 상태에서 특정 이동에 대한 여러 기능에 따라 다릅니다. 기능의 예 :
- 이 움직임이 광산을 득점 할 확률은 얼마입니까?
- 내 상대에게 무엇을 밝힐 확률은 얼마입니까?
시스템 설명
시스템은 기본적으로 다음과 같이 작동합니다.
- "사전 득점자": 현재 게임 상태에 대해 일부 사전 분석이 수행됩니다 (지뢰 찾기 플래그 측면에서, 일반적으로 모든 확률 계산).
- "Scorers": 평범한 채점자들은 각 가능한 이동에 대한 점수를 결정하도록 요청받으며, 각 채점자는 자체 기준에 따라 점수를 적용합니다. 채점자는 수행 된 사전 분석 결과를 확인할 수 있습니다.
- 위 단계에서 계산 된 점수는 함께 합산되어 이동 점수로 설정됩니다.
- 이동은 점수에 따라 정렬되고 순위가 매겨져 같은 점수를 가진 모든 이동이 동일한 순위를 갖습니다.
- "사후 점수": 위 점수의 결과는 사후 점수 자체 규칙에 따라 원하는 방식으로 필드의 점수를 수정할 수있는 "사후 점수"로 보낼 수 있습니다.
사전 득점자, 득점자 (무게 포함) 및 사후 득점자를 결합하면 점수 구성 이라고 합니다. .
결과 예
이것은 지뢰 찾기 플래그에 적용된 점수의 예입니다. 점수가 매겨진지도입니다 :
그리고 이것은 실제 점수 구성의 출력입니다. 가능한 움직임의 순위를 보여줍니다. 여기서 1은 최고 순위이며 흰색으로 강조 표시됩니다.
매우 유연한 코드를 작성함으로써 AI에 대한 이러한 접근 방식을 다른 게임에도 삽입 할 수 있습니다.
장점과 단점
아래는 제가 생각할 수있는이 시스템의 장단점입니다
장점
- AI에 대한 다양한 구성을 작성하는 것은 매우 쉽습니다.
- 유전자 알고리즘과 함께 사용하는 것이 가능합니다. 각 채점자는 관련 가중치를 가지며 가중치는 유전자가 될 수 있습니다.
- 일부 도구를 사용하면 특정 이동이 수행 된 이유와 해당 이동을 주로 담당 한 스코어러를 확인할 수 있습니다.
- 도구를 사용하면 가능한 이동의 전체 점수 / 순위의 맵을 만들 수 있습니다 (위 스크린 샷과 같이).
- 인간이하는 방식에 점수를 적용함으로써 인간이 생각하는 움직임을 시도하는 "#AI_Mirror"를 만들 수 있습니다.
단점
- AI를 최대한 잘 재생하기 위해 점수 구성을 "올바르게"조정하는 것은 매우 어려울 수 있습니다.
질문
내가 만든 시스템은 AI 세계에서 널리 알려져 있습니까? 실제 AI 용어로 무엇을 부를 것입니까?
이 방법이 의미가 있거나 권장 할만한 다른 방법이 있습니까?
점수 구성을 쉽게 조정할 수있는 방법은 무엇입니까?
마지막 질문과 관련하여 유전자 알고리즘을 사용할 가능성을 알고 있으며 SARSA 도 약간 알고 있습니다 (그리고 점수 기록은 해당 사이트의 기능에 대한 가중치 설명이 있지만, 내가 이해 한 내용과 정확히 일치하지는 않습니다. 여기). SARSA의 문제는 게임이 끝날 때까지 보상을 알지 못한다는 것입니다. 가장 좋은 움직임은 종종 보상 (마인)을주지 않는 움직임입니다. 현재 이길 확률은 현재 점수 (당신과 상대방이 채굴 한 횟수)와 현재지도의 모양에 따라 다릅니다.
이 질문은 원래 현재 없어진 인공 지능 사이트 에 게시되었습니다 .
이 접근법에 사용 된 (자바) 코드는 이제 Code Review 에 게시 되었습니다 .