퍼지 최소 거친 공통 파티션 알고리즘


9

모양의 두 개의 다른 파티션 (논쟁을 위해, 국가의 두 개의 다른 행정 구역)이 주어지면 두 파티션이 모두 맞는 새로운 파티션을 어떻게 찾을 수 있습니까? 어떻게 오류를 허용합니까?

예를 들어 오류를 무시 하고이 작업을 수행하는 알고리즘이 필요합니다.

퍼지 버전

아마도 이것을 정해진 용어로 표현하는 데 도움이 될 것입니다. 다음 번호 사용 :

위의 파티션을 다음과 같이 표현할 수 있습니다.

A = {{1}, {2}, {3,4,7,8}, {5}, {6}, {9,10,13,14}, {11}, {12}, {15} , {16}}

B = {{1,2,5,6}, {3}, {4}, {7}, {8}, {9}, {10}, {13}, {14}, {11,15} , {12,16}}

점 B = {{1,2,5,6}, {3,4,7,8}, {9,10,13,14}, {11,15}, {12,16}}

A 도트 B를 생성하는 알고리즘은 간단 해 보입니다 (두 요소가 A (B)에서 파티션에 함께 있으면 B (A)에있는 파티션을 병합합니다-A와 B가 같을 때까지 반복하십시오).

그러나 이제이 줄 중 일부가 두 파티션간에 약간 다르 므로이 완벽한 대답이 불가능하고 대신 오류 기준을 최소화하는 최적의 대답을 원합니다.

새로운 예를 들어 보자.

여기 왼쪽 열에는 공통 경계선이없는 두 개의 파티션이 있습니다 (외부 경계 자체 제외). 위의 종류의 유일한 해결책은 사소한 것입니다. 오른쪽 열입니다. 그러나 "퍼지 (fuzzy)"솔루션을 허용하면 전체 영역의 5 %가 경쟁 (즉, 각 조밀 한 파티션의 다른 하위 영역에 할당 됨)과 같이 중간 열이 허용 될 수 있습니다. 따라서 중간 열을 "<= 5 % 오류가있는 최소의 일반 파티션"을 나타내는 것으로 설명 할 수 있습니다.

실제 대답이 맨 위 행, 중간 열 또는 중간 행, 중간 열 또는 그 사이의 파티션인지 여부는 덜 중요합니다.


당신의 작업을 이해하지 못합니다. 두 파티션 의 공통 조 대화 를 찾고있는 것 같습니다 . 그러나 추가 기준이 없으면 대개 많은 솔루션이 있습니다. 예를 들어, 미세 조정이 아닌 조잡한 것이 목표 인 것처럼 보이기 때문에 왜 어디에서 멈췄습니까? 공통 경계 사각형을 그리는 것이 어떻습니까?
whuber

1
고마워, 나는 이것을 잘못 표시했다. 내가 생각하는 것은 가장 일반적인 공통 파티션이거나 아마도 "거칠지 않다"입니다.
EconAndrew

이 경우 결과는 사용자가 그린 것과 매우 다르게 보일 것입니다. 사각형의 4 x 4 체스 판입니다. 이 예에서 나는 당신이 따르고 자하는 규칙을 추론 할 수 없었습니다. 모든 입력 기능에 공통적 인 모든 모서리 를 유지하려고 하십니까? 해결하려는 실제 문제는 무엇입니까? 당신은 우리가 무엇을 귀하의 질문에 이해할 수 있도록 구체적인 예 제공 할 수 에게서는 이되어야를?
whuber

나는 많은 것을 정교화했다-아마도 이것이 도움이 될 것이다. 퍼지의 경우에는 내 질문을 정확하게 지정할 수 없지만, 정확한 경우에는 내가 의미하는 바를 정확하게 알고 있다고 생각합니다 (잘 표현하지 않더라도).
EconAndrew

이러한 노력에 감사드립니다 (+1). 당신의 세트 이론적 표기법의 관점에서, 지역의 파티션이 형성 부분적으로 정렬 된 세트를 : 파티션 A는 A는 정제BB는 A는 조 대화 의 의 모든 설정하면, A는 하나의 부분 집합 B가 . 결합 작업은 AB 의 가장 일반적인 공통 조도 인 것으로 보입니다 . 퍼지 버전을 해결하는 한 가지 방법은 GIS의 기능을 활용하여 매달려와 은색을 제거하여 두 계층 간의 작은 불일치를 수정 한 다음 퍼지가 아닌 작업을 수행하는 것입니다.
whuber

답변:


2

다각형 경계의 차이와 경계 간의 대칭 차이를 평가하거나 다음과 같이 상징적으로 표현하면됩니다.

Difference(a, SymDifference(a, b))

다음 두 줄과 이미지에서 MultiLinestrings로 표시되는 형상 ab를 가져옵니다 .

MULTILINESTRING((0 300,50 300,50 250,0 250,0 300),(50 300,100 300,100 250,50 250,50 300),(0 250,50 250,50 200,0 200,0 250),(50 250,100 250,100 200,50 200,50 250),(100 300,200 300,200 200,100 200,100 300),(0 200,100 200,100 100,0 100,0 200),(100 200,150 200,150 150,100 150,100 200),(150 200,200 200,200 150,150 150,150 200),(100 150,150 150,150 100,100 100,100 150),(150 150,200 150,200 100,150 100,150 150))
MULTILINESTRING((0 300,100 300,100 200,0 200,0 300),(100 300,150 300,150 250,100 250,100 300),(150 300,200 300,200 250,150 250,150 300),(100 250,150 250,150 200,100 200,100 250),(150 250,200 250,200 200,150 200,150 250),(0 200,50 200,50 150,0 150,0 200),(50 200,100 200,100 150,50 150,50 200),(0 150,50 150,50 100,0 100,0 150),(50 150,100 150,100 100,50 100,50 150),(100 200,150 200,150 100,100 100,100 200),(150 200,200 200,200 100,150 100,150 200))

ㅏ 비

ab의 일부가 교차하지 않는 대칭 차이 는 다음과 같습니다.

MULTILINESTRING((50 300,50 250),(50 250,0 250),(100 250,50 250),(50 250,50 200),(150 150,100 150),(200 150,150 150),(150 300,150 250),(150 250,100 250),(200 250,150 250),(150 250,150 200),(50 200,50 150),(50 150,0 150),(100 150,50 150),(50 150,50 100))

교향곡

마지막으로 a 또는 b 와 대칭 차이 의 차이를 평가하십시오 .

MULTILINESTRING((0 300,50 300),(0 250,0 300),(50 300,100 300),(100 300,100 250),(50 200,0 200),(0 200,0 250),(100 250,100 200),(100 200,50 200),(100 300,150 300),(150 300,200 300,200 250),(200 250,200 200),(200 200,150 200),(150 200,100 200),(100 200,100 150),(100 150,100 100),(100 100,50 100),(50 100,0 100,0 150),(0 150,0 200),(150 200,150 150),(200 200,200 150),(150 150,150 100),(150 100,100 100),(200 150,200 100,150 100))

diff_symdiff

GEOS (Shapely, PostGIS 등), JTS 등에서이 로직을 구현할 수 있습니다. 입력 지오메트리가 다각형 인 경우 경계를 추출해야하며 결과를 다각형화할 수 있습니다. 예를 들어 PostGIS와 같이 두 개의 MultiPolygon을 가져 와서 MultiPolygon 결과를 얻습니다.

SELECT
  ST_AsText(ST_CollectionHomogenize(ST_Polygonize(
    ST_Difference(ST_Boundary(A), ST_SymDifference(ST_Boundary(A), ST_Boundary(B)))
  ))) AS result
FROM (
  SELECT 'MULTIPOLYGON(((0 300,50 300,50 250,0 250,0 300)),((50 300,100 300,100 250,50 250,50 300)),((0 250,50 250,50 200,0 200,0 250)),((50 250,100 250,100 200,50 200,50 250)),((100 300,200 300,200 200,100 200,100 300)),((0 200,100 200,100 100,0 100,0 200)),((100 200,150 200,150 150,100 150,100 200)),((150 200,200 200,200 150,150 150,150 200)),((100 150,150 150,150 100,100 100,100 150)),((150 150,200 150,200 100,150 100,150 150)))'::geometry AS a,
    'MULTIPOLYGON(((0 300,100 300,100 200,0 200,0 300)),((100 300,150 300,150 250,100 250,100 300)),((150 300,200 300,200 250,150 250,150 300)),((100 250,150 250,150 200,100 200,100 250)),((150 250,200 250,200 200,150 200,150 250)),((0 200,50 200,50 150,0 150,0 200)),((50 200,100 200,100 150,50 150,50 200)),((0 150,50 150,50 100,0 100,0 150)),((50 150,100 150,100 100,50 100,50 150)),((100 200,150 200,150 100,100 100,100 200)),((150 200,200 200,200 100,150 100,150 200)))'::geometry AS b
) AS f;
                               result
--------------------------------------------------------------------------------
MULTIPOLYGON(((0 300,50 300,100 300,100 250,100 200,50 200,0 200,0 250,0 300)),((100 250,100 300,150 300,200 300,200 250,200 200,150 200,100 200,100 250)),((0 200,50 200,100 200,100 150,100 100,50 100,0 100,0 150,0 200)),((150 200,200 200,200 150,200 100,150 100,150 150,150 200)),((100 200,150 200,150 150,150 100,100 100,100 150,100 200)))

나는 것을 참고 하지 광범위하게이 방법을 테스트, 그래서 시작 지점으로 아이디어 이러한 걸릴.


이 알고리즘이 문제 의 퍼지 버전을 처리하는 방법 또는 해당 버전에 적용 할 수있는 방법에 대해 명시 적 입니까?
whuber

0

오류없는 알고리즘.

첫 번째 세트 : 여기에 이미지 설명을 입력하십시오 두 번째 세트 : 여기에 이미지 설명을 입력하십시오

2 세트를 병합하고 영역별로 내림차순으로 정렬합니다. 총 면적 = 총 면적 (이 경우 16)에 도달 할 때까지 테이블에서 행 (위쪽 => 아래쪽)을 선택하십시오.

여기에 이미지 설명을 입력하십시오

선택된 행이 답변합니다.

여기에 이미지 설명을 입력하십시오

기준은 누적 영역과 실제 총계의 차이가 될 것입니다.


이것은 매우 특별한 상황에서만 올바르게 작동하는 것처럼 보입니다. 공통 영역의 겹치지 않는 철저한 파티션으로 끝나는 것을 어떻게 보장합니까?
whuber

옳은. 추가 단계 a) arcgis Union 도구 측면에서 연합 데이터 집합 b) 병합 된 테이블에서 가장 큰 데이터를 가져 와서 다른 사람의 비율을 확인합니다. c) 더 큰 임계 값 (예 : 90 %)을 가진 사람을 제거합니다. 방법이있다?
FelixIP

나는 질문이 실제로 무엇을 요구하는지 알지 못했기 때문에 모른다.
whuber

가장 큰 블록을 사용하여 영역을 구성하십시오. 이것은 내 질문에 대한 나의 이해입니다
FelixIP

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