왜 일부 게임이 np-complete입니까?


50

" NP- 완전 문제 목록 "에 관한 Wikipedia 항목을 읽고 슈퍼 마리오, 포켓몬, 테트리스 또는 캔디 크러쉬 사가와 같은 게임이 np- 완전 하다는 것을 알았습니다. 게임의 완성도를 어떻게 상상할 수 있습니까? 답변이 너무 정확할 필요는 없습니다. 게임이 np 완료 될 수 있음을 의미하는 개요를 알고 싶습니다.


4
NP- 완전성에 대한 참조 질문을 참조하십시오 . 귀하의 질문이 스택 교환 형식에 비해 너무 광범위하다고 생각합니다.
Kyle Jones

5
마인 크래프트에서 컴퓨터를 만들 수 있습니다.
djsmiley2k-CoW

4
Magic : The Gathering 카드를 사용하여 계산기 만들기. 큰 재미 :-)
마스트

이것은 당신이 묻는 질문에 대한 답은 아니지만, 너무 밀접하게 관련되어 있음을 지적하는 것이 중요합니다. 잘 알려진 게임 디자이너 (그리고 게임 디자인에서 공식적인 방법을지지하는) Raph Koster는 게임의 계산 복잡성은 게임을 계속 즐기는 데 중요합니다. 그는 "재미"는 본질적으로 위협이없는 환경에서 어려운 과제의 수행을 향상시키기위한 학습에 대한 반응으로 정의하며, 게임과 같은 제한된 시스템에서이를 계속하려면 행동 패턴이있는 시스템에 의존한다고 지적합니다. ..
Jules

... 이러한 예측을 사용할만큼 충분히 빨리 예측하기가 어렵거나 불가능하므로 덜 직접적인 방식 (일반적으로 휴리스틱 사용)으로 학습해야합니다. 복잡성이 높은 문제 (그는 종종 NP Hard를 제안 함)는 이러한 행동 패턴을 생성하는 가장 신뢰할 수있는 방법이며, (올 바르면) 잘 알려진 많은 게임에서 자랄 수 있습니다. 자세한 내용은 이 회의 슬라이드이 책 을 참조하십시오.
Jules

답변:


72

이는 NP-Hard 문제를 인코딩하는 이러한 게임 내에서 레벨이나 퍼즐을 만들 수 있음을 의미합니다. 그래프 색상 문제를 해결하고 관련 Super Mario Bros. 레벨을 만들 수 있으며 그래프가 3 색인 경우에만 해당 레벨을 이길 수 있습니다.

NP-Complete 문제가 게임으로 변환되는 구체적인 방법 을 보려면 "Classic Nintendo Games are (Computationally) Hard" 논문을 추천합니다 . 잘 작성되어 따르기 쉽습니다.

명심해야 할 중요한 점은 NP 경도는 게임을 "명백한"방식으로 일반화해야한다는 것입니다. 예를 들어, 테트리스는 일반적으로 고정 크기의 보드를 가지고 있지만 경도를 증명하려면 게임에서 임의로 큰 보드를 허용해야합니다. 또 다른 예는 Super Mario Bros의 화면 밖의 적입니다. 증거는 화면이없는 적들이 마리오가 다시 오면 존재하지 않고 시작 위치로 재설정되는 대신 화면에있는 것처럼 계속 움직이는 게임의 변형입니다. .


4
그 자체로 답할 가치는 없지만 다음 비디오 강의가 있습니다. course.csail.mit.edu/6.890/fall14/lectures/L05.html- 명백한 설명.
user340082710

4
: 그것은 간결하고 정확하게이 게임은 NP-어려운 말을 의미 정확히 설명하면 링크 된 (! 상당히 흥미있는) 종이에서 정리의 정확한 진술을 포함하여 가치가있을 수 있습니다 여부를 결정하기 NP-어렵다 목표는 일반 슈퍼 마리오 브라더스의 단계의 시작부터 도달
ymbirtt

아마도 관련이 없지만 최신 포켓몬 게임 (일과 달)에서는 적 트레이너가 더 이상 플레이어를 향해 싸우지 않기 때문에 기사의 증거가 더 이상 사실이 아닙니다 (적어도 그대로).
simonalexander2005

2
NP-Complete가 되려면 NP-Hard 문제를 인코딩 할 수 있어야하고 NP에 있어야합니다. 위의 답변에서 두 번째 조항이 누락되었습니다.
Yakk

이 답변은 기술적으로는 좋지만 처음에는 질문을 할 정도로 알 수없는 사람에게 문제를 조명합니까? 난 정말 그렇게 생각하지 않습니다 ...
MaxW

20

나는 솔직히 그러한 주장을하는 사람들이 어떤 종류의 모델을 사용하는지 모른다. 그러나 나에게 합리적인 것처럼 보이는 것은 -게임 상황에 대해 무언가를 결정하는 에 대해 이야기 하는 것입니다.NP

Tetris를 예로 들어 봅시다. 내가 말할 수있는 인용 한 사람들 중 유일하게 테트리스이기 때문입니다. 테트리스는 "완벽한 클리어"라는 규칙을 가지고 있는데, 한 조각의 드롭이 보드를 완전히 지우면 플레이어에게 큰 보너스를줍니다. 정렬 된 시퀀스 와 정수 주어지면 적어도 완벽한 클리어 를 달성하는 조각에 대한 합법적 인 이동 시퀀스가 ​​존재 하는지 궁금 할 것 입니다. 이와 같은 문제 설명은 복잡도 이론의 도구로 모델링 할 수있는 충분히 추상적입니다.k P k{Pi}kPk

간단히 말해, " -complete"는 한 가지만을 의미하며, "Super Mario is -complete" 와 같은 멋진 주장은 실제 진술을하기 전에 공식적인 진술로 번역해야합니다. 감각.N PNPNP


1

간단한 손동작 설명은 다음과 같습니다.

이러한 게임은 게임 과정에서 플레이어의 행동을 "실행"하고 성공 여부를 확인하는 것이 효율적으로 수행 될 수 있기 때문에 NP 에 있습니다. 선형 또는 -ish).O(nlog(n))

이러한 게임은 플레이어의 행동이 매우 표현력이 풍부하기 때문에 NP가 어렵습니다 . 어떤 시점에서든 플레이어는 제한적이며 고정 된 수의 가능한 행동 만 가질 수 있지만, 게임 기간 동안 기하 급수적 인 행동이나 전략을 만들 수 있습니다. 플레이어의 행동의 타당성 / 혜택 / 정확성에 대한 간단한 조건이나 논리적 인 공식을 지역적으로 제공 할 수 있지만, 전 세계적으로 큰 조합 회로 또는 k-CNF 공식과 유사한 효과를 얻을 수 있습니다.

바라건대 이것은 직관적 인 의미가 있으며 CS 이론의 종을 충분히 울립니다.

추신-일부 게임은 그보다 훨씬 더 (계산적으로) 복잡합니다. 예를 들어, Hex , GoReversi 보드 게임 은 PSPACE-complete입니다. 그것은 반드시 승리 전략을 위해 만족시켜야 할 공식이 반복적으로 교체되는 정량 자 공식이기 때문입니다. 이것은 플레이어 1에 의한 이동이 존재하므로 플레이어 2에 의한 모든 이동에 대해 플레이어 1에 의한 이동 등이 있습니다. 그와 같은 모든 동작이 재생되면 플레이어 2의 움직임 중 일부가 유효하지 않거나 플레이어 1이 유효한 순서를 갖습니다. NP 게임에서는 일반적으로 한 명의 플레이어의 행동 / 전략 / 이동 선택입니다.


"희망적으로 이것은 직관적 인 의미가 있습니다"– 저에게는 그렇지 않습니다
Raphael

1

싱글 플레이어 게임의 경우, 항상 "플레이어를위한 승리 전략이 있습니까?"라는 질문을 할 수 있으며,이 질문에는 다항식 시간으로 확인할 수있는 "예"라는 대답이 있으며 NP가 완벽 할 수 있습니다.

2 인 게임의 경우 A에 대한 이동이 승리 이동인지 확인하기 위해 B의 모든 응답에 대해 A에 대한 승리 이동이 다시 있음을 증명해야하기 때문에 다항식 시간으로 답변을 확인할 수없는 경우가 많습니다. 곧.


0

가능한 해결책은 유한 한 수의 입력 (각 입력 프레임에서 k 버튼 중 하나를 선택할 수 있으며 문자로 각 프레임의 버튼 선택을 나타냅니다)이기 때문에 확실히 NP에 있습니다. 윈 스크린. 우리는이 게임이 전에 이겼다는 것을 알고 있으므로 해결책이 있다는 것을 알고 있습니다. NTM은 테이프를 통해 길이 n의 정확한 인증서를 마술처럼 추측합니다. 그런 다음 입력으로 Super Mario를 시뮬레이트하고 확인합니다. 다항식 시간으로 검증을 수행 할 수 있습니다 (실제로 선형 인 경우 솔루션이 정확하면 정확히 n 개의 프레임이 소요됩니다).

NP- 완전성을 나타 내기 위해 레벨 생성기 (임의의 코드 실행 https://www.youtube.com/watch?v=IOsvuEA2h4w ) 로 3-Sat 검사기를 구축하여 3-SAT를 줄일 수 있습니다 .

따라서 3-SAT CNF 입력이 있으며 올바른 형식을 먼저 확인해야합니다. 형식이 잘못되면 하나의 '점프'입력으로 변환하면됩니다 (점프를 수행하여 한 프레임 내에서 Super Mario를 이길 수는 없습니다).

3-CNF 입력의 길이를 n이라고합니다.

형식이 올바르게 지정되면 여러 입력으로 변환하여 3-CNF 검사기를 빌드하고 (항상 같은 길이의 코드 k) 3-CNF를 입력 문자열로 변환하여 특정 3- 체커의 CNF (O (n))이며 모든 가능한 솔루션을 무차별 검사합니다. 모든 솔루션을 거친 후에도 아무것도 발견되지 않으면 유휴 상태이며 아무것도하지 않습니다. 게임을 다시 시작하고 Super Mario가 알려진 솔루션을 사용하여 게임을 이깁니다 (코드 길이는 j 임). 따라서 우리의 변환은 O (n)에 있으므로 다항식 시간 내에 있습니다.

CNF의 형식이 잘못되면 우리는 이기지 못합니다 (정의 적으로 우리가 실행 한 후 한 프레임을 얻지 못하면 입력이 이기지 않습니다). CNF가 만족스럽지 않으면 우리는 이기지 못합니다 (레벨 생성기에서 한 프레임 동안 유휴하여 이길 수는 없습니다, 우리는 코드에서이를 보장했습니다). CNF가 만족스러운 경우, 체커는 솔루션이 다시 시작되고 게임에서 승리 함을 발견합니다. 따라서 3-Sat의 Super Mario 로의 다항식 감소가 완료되었으며 Super Mario가 NP-complete임을 증명했습니다.

(어딘가에서 이것을 망쳐 놓지 않기를 바랍니다. 3-CNF가 너무 길면 스토리지 문제가 발생하지만 제한된 컨텍스트는 일반적으로 이러한 맥락에서 무시됩니다.)


"글쎄, 가능한 솔루션은 입력 수가 한정되어 있기 때문에 확실히 NP에 있습니다."NP가 되려면 입력 크기에 다항식으로 경계를 정해야합니다. 유한 한 것만으로는 충분하지 않습니다.
David Richerby

0

이전 버전에 대한 의견을 제시하기 위해이 답변을 다시 작성했습니다.

게임에 중점을 두지 않는 NP-completeness에 대한 Wikipedia 정의를 읽은 것으로 가정합니다 . NP- 완전성과 게임 이론의 정확한 의미를 간단히 설명하고 NP-Complete 게임의 본질을 설명하겠습니다.

대체 움직임이있는 2 인 게임을 고려해 봅시다. 더 제한적으로 이것은 본질적으로 조합 게임 에 관한 것 입니다. 기본적으로 당신이 할 수있는 몇 가지 움직임을 가지고 있고 당신은 그들 중 하나를 선택해야하는 게임. 당신은 "완벽하게"놀고 싶다는 것은 결코 "나쁜"행동을하지 않을 것임을 의미합니다. 허용되는 동작 중에서 가장 적합한 동작을 선택하려고합니다. (물론 상대는 같은 목표를 가지고 있습니다 ...)

완벽한 플레이가 항상 승리한다는 의미는 아닙니다. 게임의 규칙은 첫 번째 또는 두 번째 플레이어가 이길 수 있습니다. 또한 Tic-Tac-Toe와 같은 일부 게임은 무승부로 끝나야합니다. 따라서 무엇을 "완벽한 플레이하는 것은"이 논의에 의미이다 :
(1) 승리 위치에있을 다음은 "나쁜"이동했기 때문에 게임을 잃게 않을거야 그건
당신이 얻을 수있는 기회를 놓치지 않을 것 (2) 그러한 기회가 발생하면 승리 위치로.

게임의 현재 상태를 고려할 때 "효율적인 알고리즘"을 사용하여 최상의 움직임을 계산할 수 있습니다. 반면에 전체 게임 트리를 검색해야하는 알고리즘은 "비효율적 인 알고리즘"입니다.

이제 "효율"을 좀 더 공식적으로 정의 해 보자. 나는 이것을 조금 단순화 할 것이지만 본질은 정확하다. 다음 이동을 선택하기 위해 수행해야하는 계산의 수 고려하고, 각 이동의 평균은 하나의 가능성 ( 분지 계수 )을 가지며 게임에 이동이 남아 있다는 것을 고려 하십시오. 개념은 노력으로 변환 할 수 있도록 각각의 연산이 동시에 걸리는 또한 시간 복잡도 , 대신 원시 계산.B N TCBnT

  • "효율적인 알고리즘"은 다음과 같습니다 : 여기서 는 "작은 정수"입니다. 아는 실제 숫자입니다. 따라서 효율적인 알고리즘은 다항식 이므로 다항식 시간으로 실행됩니다 .
    αTaBa+bBα1+cBα2+...+hB0
    α
  • "비효율적 인 알고리즘"은 알고리즘은 지수 시간 (즉, 비 다항식 시간)으로 실행됩니다 . 여기서 요점은 이 커질수록 조합 폭발 결과 가된다는 것 입니다.
    nTaBn
    n

이제 중요한 점은 NP- 완료된 게임에 완벽하게 작동하는 효율적인 다항식 시간 알고리즘을 가질 수 없다는 것입니다 . NP- 완전 문제를 완벽하게 재생하려면 정의에 따라 비 다항식 시간에 실행되는 비효율적 인 알고리즘으로 해결해야합니다.

실행 시간은 사람이 인식하는 응답 시간이 아니라 고유 계산 수에 관한 것입니다. Tic-Tac-Toe와 같은 작은 게임의 경우 컴퓨터는 미래의 모든 가능한 움직임을 재생할 수 있으며 인간이 인식하는대로 빠르게 반응 할 수 있습니다.

들어 다항식 시간 알고리즘을 만들 수 있습니다. 게임의 어느 시점에서나 알고리즘은 어떤 플레이어가이기는 움직임과 그 움직임을 계산할 수 있습니다.

반면 Qubic 게임을 보자 . (3D 그리드에서 4 줄을 만들려고합니다. 따라서 4x4x4 그리드에서는 기본적으로 틱택 토입니다.) Qubic은 NP-complete이므로 다음 완벽한 움직임을 계산하는 다항식 시간 알고리즘이 없습니다. 현재이기는 움직임을 알 수있는 유일한 방법은 두 선수의 가능한 모든 움직임을 시도하여 특정 움직임이 승자인지 적어도 패자인지 확인하는 것입니다.

실제로 Qubic의 전체 게임 트리는 작기 ​​때문에 완벽하게 재생할 수있는 컴퓨터 프로그램으로 인코딩 될 수 있습니다. 인코딩의 의미는 전체 게임 트리가 탐색되었고 모든 움직임이 사전에 해결되었다는 것입니다. 따라서 프로그램은 기본적으로 현재 보드 상태를 사용하여 빠른 데이터베이스 호출을 수행하고 이동할 때마다 트리 검색을 수행하지 않고도 해당 보드 상태에 대한 최상의 이동을 얻을 수 있습니다. 이것은 실제로 우리의 목적을위한 "속임수"입니다.

이제 체스 게임 프로그램의 다른 기능을 무시하고 평가 기능 을 논의 하기 위해 체스 에 대해 설명 하겠습니다 . 체스는 여전히 해결되지 않은 게임 입니다. 첫 번째 또는 두 번째 플레이어가 이길 것인지는 알 수 없습니다. 보드 포지션을 부여받을 수 없으며 누가 이길 것인지 확실하게 예측할 수 없습니다. 실제로 체스에는 큰 게임 트리가있어 전체 게임 트리를 검색하는 것은 불가능합니다. 현재 컴퓨터보다 10 배에서 100 배 더 빠르지 만 수십억 배 빠른 컴퓨터가 필요합니다. 양자 컴퓨팅 이이 고르 디안 매듭을 뚫을 수 있다는 희망 이 있습니다.

체스 평가 기능은 다음 가능한 각 움직임에 가장 좋은 움직임이 될 가능성을 부여하는 것으로 생각하십시오. 체스 프로그램은 평가 기능과 미리보기를 결합하는 것입니다. 따라서 프로그램은 "좋은"점수가 보드 위치에 도달 할 수있을 때까지 가능한 모든 향후 움직임을 살펴 봅니다. 컴퓨터는이 방법으로 트리를 통해 가능한 모든 경로를 평가 한 다음 최고 점수를 가진 경로를 선택합니다. 검색중인 모든 경로에 대한 검색이 끝나지 않았으므로 모든 체스 프로그램은 궁극적으로 불완전한 평가 기능을 사용합니다. (게임이 끝나갈 즈음이면 컴퓨터는 앞으로 가능한 모든 움직임을 볼 수 있습니다.) 이는 어느 시점에서 프로그램이 승리 한 위치에 있더라도 프로그램을 이길 수 있음을 의미합니다.


"NP- 완료된 게임에 대해 효율적인 알고리즘, 다항식 시간을 갖는 것은 / 불가능하다. NP- 완전 문제는 정의상 비 다항식 시간에서 실행되는 비효율적 인 알고리즘에 의해 해결되어야한다." -맞지 않아요. 다항식 시간에 NP- 완전 문제를 해결할 수 있는지 여부는 알려져 있지 않습니다. 대부분의 연구자들은 답이 "아니오"라고 강력하게 기대하지만 확실하게 알 수 없으며 정의에 의한 것은 아닙니다. NP-complete 의 실제 정의에 대해 더 많은 시간을 할애하는 것이 좋습니다 . 이 사이트와 Wikipedia에서 일부 리소스를 찾을 수 있습니다.
DW

@DW-예, 나는 대답을 조금 바보로 만들었습니다. 나는 첫 번째 단락에서 말했다. Qubic 아래의 비트를 읽으면 다항식 시간 알고리즘을 "작은"게임에 어떻게 사용할 수 있는지 설명했습니다. OP가 NP- 완전성 및 게임 이론에 관한 책을 쓰지 않는다는 것을 이해하려고 노력했습니다.
MaxW

@@ DW-암묵적으로 완벽한 놀이를하고 있다고 생각했습니다. 그 자격을 명시 적으로 추가했습니다.
MaxW
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.