지형 생성기 진화


12

방금 이 질문 을했는데 절차 게임 콘텐츠 제작을 위해 유전자 프로그래밍 ( GP )을 사용하는 것은 실제로 이루어지지 않은 것으로 보입니다 . 나는 그것을 바꾸고 싶다.

새로운 지형 생성기를 찾기 위해 GP를 배포 할 수 있다고 확신합니다. 내가 얻는 질문은 어떻게 달성 될 수 있습니까?

모든 GP에는 모든 GP에 대해 일반화 할 수있는 몇 가지 기본 부분이 있습니다 (부모 선택, 재조합, 돌연변이, 생존). 나는 그들 스스로 알아낼 수 있습니다. 문제는 특정 부품에서 발생합니다. 이것들은 코드에서 문제를 나타내는 방법 (일반적으로 트리를 사용함)과 생성기가 얼마나 좋은지 평가하는 방법입니다 (하나 이상의 값일 수 있음).

간단히 말해서 질문 :

  • 트리로 파싱 할 수있는 방식으로 지형 생성기를 어떻게 표현 하시겠습니까?

  • 이것이 어떤 종류의 지형을 생성해야합니까? (하이트 맵, 정점 그래프, ...)

    하이트 맵을 기반으로하는 것이 적을수록 좋습니다.

  • 솔루션의 적합성을 평가하는 데 무엇이 사용됩니까?

    예 : 흥미로운 지형을 원하므로 지형의 각 정점에 대한 법선의 평균 변화 값 중 하나를 가질 수 있습니다.


1
GP를 원하지 않지만 GA를 원한다고 생각합니다. 예를 들어, 소음을 생성하는 알고리즘은 실제로 생성하기가 어렵고이를 만족시키는 시스템을 만드는 것보다 피트니스 기능을 만드는 것이 더 어렵습니다. GA는 기존 시스템의 매개 변수를 조정하는 데 더 적합합니다.
DampeS8N

GP는 인간이 실제로 생각하지 않는 흥미로운 솔루션을 만듭니다. 그게 내가 찾는 것입니다. GP는 사용하기가 어렵고 이것은 아마도 업계에서 이것을 사용하는 가장 좋은 방법은 아니지만 아마도 밝혀지면 큰 타당성을 보여줄 것입니다.
Alex Shepard

답변:


11

Karl Sims의 유전자 이미지 와 비슷한 접근법으로 운이 좋을 수도 있습니다 .

그는은 LISP 같은 언어와 같은 어떤 연산자의 출력은 약간의 쉐이더 언어로 유사에 이미지에 영향을 미칠 활용 될 수있다 (예. 스칼라가 될 것 그레이 스케일 값 사업자의 간단한 세트를 사용하는 vector3RGB, 등 ... ).

나는 그것이 구현 일이라고 생각하지만, 아마도 당신이 원하는 것은 그의 키워드입니다. (iirc) 모든 기본 사항을 포함합니다 :

  • 삼각 함수 ( sin, cos, tan등)
  • 위치 ( x, y)
  • 기본 수학 연산자 ( sqrt, pow, abs, inverse)
  • 소음 기능 ( fBm, noise2, noise3)
  • 다른 도형 ( mandelbrot, julia)
  • 보간 함수 ( lerp, quad, step, smoothstep)

(위의 일부는 그의 구현에 있지 않을 수도 있습니다. 오래 전에 그의 작품을 발견했으며 실제로 몇 년 동안 묘사 한 것에 대해 몇 가지 시도를 했으므로 메모리가 누출 될 수 있습니다.)

흥미롭고 빠르게 유지

나는 죽은 진화의 양을 크게 줄인 다층 접근법으로 약간의 행운을 얻었습니다.

  1. 각 연산자에 대해 일련의 범위가 생성됩니다 (또는 이전 라운드에서 변경됨).
    • 이들은 이상적으로 각 기능에 대해 "정상"범위 내에서 값을 유지하지만 놀랍게도 유용한 결과를 갖는 범위로 진화 할 수 있습니다.
  2. 몇 개의 알고리즘 트리를 생성
    • 이들 각각에 대해 임의의 위치에서 몇 개의 하이트 맵을 생성하고 적합성을 평가합니다.
    • 우리가 좋은 경기를 많이한다면이 지점을 조금씩 내려 가면서 각 어린이마다 1 단계 의 범위를 약간 교란시킵니다.
    • 그렇지 않으면 범위가 잘못되었을 수 있습니다. 1 단계 로 돌아가십시오.

하나...

피트니스 알고리즘을 건너 뛰었습니다. Karl Sims의 "비 자연적 선택"접근 방식을 주로 사용했습니다. 여기서 카이의 전동 공구로 채워진 자손의 중간 광장에서 현재 세대를 볼 수 있습니다. 무슨 뜻인지의 이미지 ) ..

그러나 아마도 인공위성 이미지의 일부 이미지와 특정 품질의 인공 이미지 몇 개가있을 수 있으며 테스트중인 지형과 비교하여 웨이블릿 또는 2D FFT 분석을 사용할 수 있습니까?

이것은 흥미로운 주제이지만, 당신이 :)에 대한 답변이 필요한지 의심합니다.

편집 : 아. 내가 새로운 사용자이기 때문에 많은 링크를 제거해야했습니다 :-|


이것은 내가 얻은 것과 똑같은 것으로 이끄는 것처럼 보입니다. 알고리즘은 지속적인 무작위 콘텐츠 생성을위한 것이 아니라 단일 또는 제한된 결과 집합으로 세대를 훈련시키는 데 도움이되며 여전히 인간이 선택해야합니다.
James

내가 체력을 구할 수있는 것은 결과에 대한 통계적 분석에 근거해야합니다. 내가 생각해 낼 수있는 요인은 생성 된 여러 지형에 대해 평균화 된 단일 생성 지형 내부의 분산 양 (최대)과 표준 편차 (최소화, 분산 안정성) 값입니다. 그러나 생성 된 두 지형 사이의 평균 높이 변화를 최대화해야 할 것 같습니다.
Alex Shepard

1
@Alex 아마이 논문 도 흥미로울 것입니다. 나는 당신이 머리에 언급 된 기술 중 일부를 돌리면 피트니스를 안내하는 데 사용할 수 있다고 생각합니다. (또는 그것은 당신이 원하는 것 일 수도 있습니다 :)
pentaphobe

@phobius WOAH !! 멋있는. 좀 더 탐구해야하지만 실제로는 유망합니다. 이제 검색 문제로 바꾸려면 ...
Alex Shepard

2

이 질문에 대답 할 수 있을지 모르겠지만 충분한 답변이 도움이 될 수있는 이유에 대한 설명이 있습니다. 간단히 말해서, 답변 :

  • 지형의 특정 측면이 단순히 데이터 값을 기반으로 할 수있는 지형 생성을 선택하려고합니다. 이것은 어렵지 않지만 지형 생성을 선택해야합니다. 내가 일하고있는 지역은 복셀 세대이기 때문에 샘플링 속도, 터널링 패스, 고도 레벨 등은 데이터에 넣고 '진화'할 수있는 것들입니다.
  • 첫 번째 부분과 손을 잡고갑니다. 다른 속성을 설정할 수 있다면 어떤 형태의 세대를 사용하든 상관 없습니다. 이 선택은 만들고자하는 게임 유형과 더 관련이 있습니다.
  • 이것이 고장난 곳입니다. 나는 실제로 세상을 바라보고 "아 그거 좋네요"라는 사람을 제외하고 이것을 측정하는 방법을 생각할 수 없습니다. 그러나 이것은 자체 자체 반복을 수행하는 컴퓨터를 제거합니다. 이것은 또한 여러분이이 세대의 형태를 사용하여 결국 단일 세계를 만들어 내고 매번 임의의 세계와 달리 '최상의'세계를 찾는다는 것을 의미합니다.

유전자 알고리즘은 일반적으로 규칙을 통해 환경을 정의 할 수있는 알려진 문제를 해결하는 데 사용됩니다. 그런 다음 규칙에 반응하는 방식에 영향을주는 다양한 속성을 나타내는 데이터 세트를 만들 수 있습니다. 그런 다음 컴퓨터는 초기 데이터 세트와 함께 '라운드'를 재생하고 상위 X 번호를 선택하고 쌍을 이루고 나서 값을 혼합 한 다음 다른 라운드를 수행합니다. 트롤이 일반적으로 환경에서 잘하는 일련의 가치를 찾으십시오 (사냥하거나 먹을 수 있거나 마을 사람들과 떨어져있을 수 있습니다). 전리품을 모아서 원하는 모든 반짝이는 물건을 모을 수 있습니다.

나는 당신이 성취하려고하는 것이 지형 생성 영역에 적용 가능한지 확실하지 않습니다. 내가 생각 해낼 수있는 유일한 것은 당신이 세계를 계획하고 싶지는 않지만 AI 경로가 멋지게 계산 될 수있는 것과 같은 것을 만들기를 원했던 게임 콘텐츠 종류의 평가입니다. 그러나 이것으로도 단일 세계 또는 최소한의 세계를 찾고 있습니다.


아 .. 진화 알고리즘과 유전자 프로그램을 혼동하고 있다고 생각합니다. EA는 입력을 최적화하고 알고리즘을 조정하는 데 사용됩니다. GP는 알고리즘 자체를 구축하는 데 사용되며 이것이 내가 찾고있는 것입니다. 그래도 좋은 대답입니다. 참고로 이러한 지형은 현실적이지 않아도 재미있을뿐입니다.
Alex Shepard

프로그래밍 방식으로 '관심있는'을 정의 할 수 없다면, 내가 대답하려고하는 문제가 생길 것입니다.
James

0

이것이 어떤 종류의 지형을 생성해야합니까? (하이트 맵, 정점 그래프, ...)

꼭 정점 그래프 (메시)는 저장 공간이 작고 필요에 따라 래스터 화 (테셀레이션) 할 수 있습니다.

트리로 파싱 할 수있는 방식으로 지형 생성기를 어떻게 표현 하시겠습니까?

세포 성 오토마타. 두 가지 구현을 생각할 수 있습니다.

  1. 유한 세트의 요소가있는 규칙 세트 오토마타 (카운터 또는 유휴 시간과 같은 현재 상태가 고려되는 경우).

    • 각 노드는 임의의 상태로 초기화됩니다
    • 각 노드에는 솔버 인스턴스가 연결되어 있습니다.
    • 각 솔버는 규칙이 없거나 이상적인 상태에 도달 할 때까지 다음 상태를 계속 계산합니다 (여기에서 완료).
    • 다음의 모든 상태가 먼저 계산 된 후 다음 계산이 시작되기 전에 한 번에 모두 적용되므로 계산 순서는 중요하지 않습니다.

규칙 세트 자체는 분기 의사 결정 트리 또는 간단한 명령 배치로 표시 될 수 있습니다 (작동하는지 확실하지 않음)

모든 노드에 대해 하나의 규칙 세트 만 있습니다.

  1. 세계 건축업자. 모든 단일 노드에 솔버를 적용하는 대신 여러 개의 솔버 만 만들어 메쉬를 탐색 할 수 있습니다.

    • 각 빌더에는 고유 한 규칙 세트가 있습니다.
    • 다른 빌더가 점유 한 노드에 들어 가지 못하게하십시오.
    • 각 빌더는 트리의 분기로 표시 될 수 있습니다
    • 진화 빌더 중에 복제 할 수 있습니다

그럼에도 불구하고 두 번째 접근법은 첫 번째 접근법으로 뒷받침되어야합니다. 초기 임의성이 부드럽게되어야하며 빌더가 트릭을 수행 할 수 있는지 확실하지 않습니다. 모든 살아있는 세포에는 결국 미토콘드리아가 있습니다.

솔루션의 적합성을 평가하는 데 무엇이 사용됩니까?

결과 지형의 무결성-엉망으로 보이지 않아야합니다. 그리고 다양성-일반적으로 가능한 많은 변형이 가능한 한 많이 표현되기를 원합니다 (한 가장자리에서 다른 가장자리로 평평한 황무지는 재미가 없습니다). 어쩌면 이웃 노드가 서로 맞는지와 같은 더 복잡한 것 (사막 한가운데의 툰드라, 무엇?)

여분의 시간이 있거나있는 경우 메쉬 생성기로 내 자신을 위해 시도해야합니다 =)

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