그래프 노드 사이에서 가장자리를 무작위로 생성하는 좋은 방법은 무엇입니까?


10

4X 우주 게임을 위해 랜덤 맵 생성기를하고 있습니다.

게임의 각 노드는 2D 그리드에서 임의의 (x, y) 좌표에 배치됩니다. 노드는 다른 노드에 대한 하나 이상의 양방향 에지를 가질 수 있습니다 (웜홀을 나타냄). 모든 노드에는 하나 이상의 웜홀이 있어야하며 모든 노드는 동일한 그래프에 속해야합니다.

웜홀은 최대 길이를 초과하지 않아야하며 가능하면 웜홀이 서로 교차하지 않아야합니다.

나의 순진한 구현은 모든 노드를 반복하고 노드를 가장 가까운 3 개의 노드에 연결하는 것입니다. 그러나 나는 수많은 하위 그래프로 끝납니다. 노드의 가장자리를 생성하는 좋은 방법은 무엇입니까?


은하계에 노드가 어떻게 흩어져 있습니까? 나는 은하계의 모든 지점 (X, Y)마다 노드가 있다고 가정 할 수 있습니까? 아니면 적어도 그들 중 대부분을 위해?
Ali1S232

모든 좌표에 노드가있는 것은 아닙니다. 약 40 %라고 말할 것입니다.
Extrakun

답변:


9

비슷한 질문에 대한 좋은 답변이 있습니다.

먼저 위의 링크에서와 같이 최소 스패닝 트리를 사용하여 연결된 그래프를 만드십시오. 그는 "최소한"나무를 무작위로 만들기 위해 임의의 가장자리 가중치를 사용할 것을 제안합니다. 그런 다음 가장자리를 무작위로 추가하여 최소 트리가 아닙니다. 임의의 가장자리를 정확히 추가하는 방법은 원하는 그래프 종류에 따라 다릅니다.


실제로 문제가 노드가 모두 동일한 그래프에 속하는지 확인하는 경우 현재 임의 생성 방법 (또는 다른 방법)을 사용하여 그 위에 Prim의 알고리즘을 적용 할 수 있습니다. 하위 그래프가 모두 연결되어 있는지 확인하기 위해 그래프를 최소한으로 변경하려는 경우 이미있는 가장자리의 가장자리 비용을 0으로 설정할 수 있습니다.


매우 좋은 답변이므로 +1하지만 이러한 종류의 세대를 좋아하지 않으므로 앞으로 며칠 안에 더 나은 알고리즘에 대해 생각할 것입니다!
Ali1S232

예, 이에 대한 '올바른'답변은 없습니다. 다른 사람들이 생각해내는 것에 관심이 있습니다.
Philip

주제 외에, 나는 또한 나의 답변에 링크하려고했다! : p
r2d2rigo

이 방법으로 포인트를 얻습니다.
Philip Philip

7

문제의 주요 제약은 두 가지입니다. 1- 연결 그래프 생성; 근위 연결로 작성합니다. 필립의 대답은 다소 귀중하지만 문제의 모든 제약을 해결하지는 못합니다

웜홀은 최대 길이를 초과하지 않아야하며 가능하면 웜홀이 서로 교차하지 않아야합니다.

클라우드에서 포인트를 순진하게 연결하면 이러한 조건이 충족되지 않을 위험이 있습니다.

따라서 문제는 그러한 연결에 대한 근접성만큼 중요한 것은 아닙니다. 그래프의 모든 노드를 다른 모든 노드에 연결하는 것은 쉽지 않지만 전체 그래프의 1- 연결성을 유지하면서 가장 가까운 노드에만 연결하는 것이 좀 더 까다 롭습니다.

이것이 들로네 삼각 분할n 차원으로 만드는 것 입니다. 들로네 삼각 분할 (Delaunay Triangulation)을 사용하는 첫 번째 이유는이 둘을 암시 적으로 수행하기 때문입니다. 두 번째 이유는 다른 방법으로 그래프를 작성하는 것보다 이러한 그래프에서 원하지 않는 가장자리와 정점을 빼는 것이 훨씬 쉽습니다.

  1. 풀 포인트 클라우드를 임의로 생성하십시오.
  2. 들로네 삼각 분할.
  3. 그래프를 구성하십시오 (점 연결). 이 단계에서 전체 그래프 (모든 별)를 먼저 생성 한 다음 4 단계를 수행 할 때 웜홀 연결 영역을 나타내는 마이너로 그래프를 파생 시킬 수 있습니다. 또는 다른 방법으로 웜홀 연결 영역 만 생성 할 수 있습니다. 첫 번째는 수퍼 그래프 노드로, 두 번째 단계에서는 해당 지역의 경계 볼륨 내에 개별 별을 생성합니다 (이러한 경우 들로네 삼각 분할 (Delaunay Triangulation)의 그래프 듀얼-3 차원의 보로 노이 다이어그램을 도출합니다). 이제 근접하게 연결된 스타 클러스터가 있으며 모든 클러스터는 드문 웜홀로 연결되어 있습니다. 토폴로지와 지형은 플레이어에게 적합합니다.
  4. 3 단계에서 선택한 방법에 따라 수퍼 그래프 및 서브 그래프를 구성하는 지능형 방법을 적용하십시오.

이것이 계층 적 프로세스임을 확인하는 것이 중요합니다. 첫 번째 수준은 웜홀 연결을 처리합니다. 두 번째는 표준 선박 드라이브를 사용하여 이동 가능한 거리를 처리합니다. 제약 조건을 만족시키기 위해 한 가지 또는 두 가지 수준 모두에서 들로네를 적용 할 수 있습니다.

순전히 위상 적으로이 작업을 수행하면 갤럭시의 한 쪽이 다른쪽에 연결될 수 있기 때문에 이해가되지 않는 웜홀이 남게됩니다 (아마도 웜홀의 직접적인 경로로 떨어질 수 있음). 토폴로지는 지형이 아닙니다. 후자는 전자에 대한 고려 사항이다. 근접성과 지형에 관심이 있습니다.


들로네 삼각 분할 (Delaunay Triangulation)은 좋은 생각이지만 임의의 가장자리를 만들지는 않습니다. 들로네 삼각 분할 (Delaunay Triangulation)에 의해 생성 된 가장자리에서 가장자리를 무작위로 제거 할 수는 있지만 별도의 그래프를 다시 얻을 위험이 있습니다.
bummzack

@Bummzack "임의의 가장자리를 만들지 않습니다". 그래프 마이너에 대해 들어 본 적이 있습니까? Delaunay를 사용하여보다 어려운 제약 조건을 해결 한 후에는 원하는대로 해당 그래프에서 추가 또는 제거를 수행하는 것이 쉽지 않습니다.
엔지니어

@Bummzack, 방금 다시 업데이트했습니다. 피드백 주셔서 감사합니다.
엔지니어
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.