Algoritma partisi umum fuzzy paling kasar

9

Dengan dua partisi bentuk yang berbeda (demi argumen, dua divisi administrasi negara yang berbeda), bagaimana saya bisa menemukan partisi baru yang cocok untuk kedua partisi tersebut, memungkinkan (dan mengoptimalkan) beberapa kesalahan?

Misalnya, mengabaikan kesalahan, saya ingin algoritma yang melakukan ini:

Versi non-fuzzy

Mungkin membantu untuk mengungkapkan ini dalam ketentuan yang ditetapkan. Menggunakan penomoran berikut:

Saya dapat mengekspresikan partisi di atas sebagai:

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}}

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

dan algoritma untuk menghasilkan A dot B tampak langsung (seperti, jika dua elemen berada dalam sebuah partisi bersama dalam A (B) menggabungkan partisi mereka di dalam B (A) - ulangi sampai A dan B sama dengan).

Tetapi sekarang bayangkan beberapa baris ini sedikit berbeda antara dua partisi, sehingga jawaban sempurna ini tidak mungkin, dan sebagai gantinya saya ingin subjek jawaban optimal untuk meminimalkan beberapa kriteria kesalahan.

Ambil contoh baru:

Di sini, di kolom kiri kita memiliki dua partisi tanpa garis yang sama (terlepas dari perbatasan luar itu sendiri). Satu-satunya solusi yang mungkin dari jenis di atas adalah yang sepele, kolom kanan. Tetapi jika kita mengijinkan solusi "fuzzy", maka kolom tengah mungkin diperbolehkan, dengan mengatakan 5% dari total area yang diperebutkan (yaitu dialokasikan untuk subarea yang berbeda di setiap partisi kasar). Jadi kita dapat menggambarkan kolom tengah sebagai mewakili "partisi umum paling kasar dengan <= 5% kesalahan".

Apakah jawaban yang sebenarnya adalah kemudian partisi di baris atas, kolom tengah atau baris tengah, kolom tengah - atau sesuatu di antaranya, kurang penting.

EconAndrew
sumber
Saya tidak mengerti operasi Anda. Tampaknya Anda mencari penyatuan umum dua partisi. Namun, tanpa kriteria tambahan, biasanya akan ada banyak solusi. Misalnya, karena kasar (bukan perbaikan) tampaknya menjadi tujuan Anda, mengapa berhenti di mana Anda melakukannya? Mengapa tidak menggambar garis batas yang umum?
whuber
1
Terima kasih, saya salah memberi label tentang ini. Apa yang saya maksud adalah partisi umum terbaik , atau mungkin "paling tidak kasar".
EconAndrew
Dalam hal ini hasilnya akan terlihat sangat berbeda dari apa yang telah Anda gambar. Itu akan menjadi 4 x 4 papan catur kotak. Dari satu contoh ini saya tidak dapat menyimpulkan aturan yang ingin Anda ikuti. Mungkin Anda mencoba untuk menjaga semua sisi umum untuk semua fitur input? Apa masalah sebenarnya yang Anda coba selesaikan? Bisakah Anda memberikan contoh konkret untuk membantu kami memahami apa pertanyaan Anda seharusnya ?
whuber
Saya telah menguraikan banyak - mungkin ini akan membantu. Memang benar bahwa dalam kasus fuzzy saya tidak dapat secara tepat menentukan pertanyaan saya, tetapi saya pikir dalam kasus yang tepat saya tahu persis apa yang saya maksud (bahkan jika saya tidak mengungkapkannya dengan baik).
EconAndrew
Terima kasih atas upaya tersebut (+1). Dalam hal notasi set-teori Anda, partisi suatu daerah membentuk set sebagian memerintahkan : partisi A adalah penyempurnaan dari B , dan B adalah pengkasaran dari A , ketika setiap set di A adalah himpunan bagian dari satu di B . Operasi Anda menggabungkan muncul menjadi pengasaran umum terbaik dari A dan B . Salah satu cara untuk mengatasi versi fuzzy Anda adalah dengan mengeksploitasi kemampuan GIS untuk menghilangkan dangles dan sliver untuk memperbaiki perbedaan kecil antara dua lapisan dan kemudian melakukan operasi non-fuzzy.
whuber

Jawaban:

2

Anda dapat melakukan ini dengan mengevaluasi perbedaan batas poligon dengan perbedaan simetris antara batas mereka, atau dinyatakan secara simbolis sebagai:

Difference(a, SymDifference(a, b))

Ambil geometri a dan b , dinyatakan sebagai MultiLinestrings selama dua baris dan gambar berikutnya:

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))

Sebuah b

Perbedaan simetris, di mana bagian a dan b tidak berpotongan, adalah:

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))

symdiff

Dan akhirnya, evaluasi perbedaan antara a atau b dan perbedaan simetris:

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

Anda dapat mengimplementasikan logika ini dalam GEOS (Shapely, PostGIS, dll.), JTS, dan lainnya. Perhatikan bahwa jika geometri input adalah poligon, maka batas-batasnya perlu diekstraksi, dan hasilnya dapat dipoligonisasi. Misalnya, ditunjukkan dengan PostGIS, ambil dua MultiPolygons, dan dapatkan hasil 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)))

Perhatikan bahwa saya belum menguji metode ini secara luas, jadi anggap ini sebagai gagasan sebagai titik awal.

Mike T
sumber
Bisakah Anda secara eksplisit tentang bagaimana algoritma ini menangani versi fuzzy dari masalah yang ditanyakan, atau bagaimana itu bisa disesuaikan dengan versi itu?
whuber
0

Algoritma bebas kesalahan.

Set pertama: masukkan deskripsi gambar di sini Set kedua: masukkan deskripsi gambar di sini

Gabungkan 2 set dan urutkan berdasarkan urutan berdasarkan area. Pilih baris dalam tabel (atas => bawah) hingga total area = total area (16 dalam kasus ini) tercapai:

masukkan deskripsi gambar di sini

Baris terpilih membuat jawaban Anda:

masukkan deskripsi gambar di sini

Kriteria akan menjadi perbedaan antara area akumulasi dan total aktual.

FelixIP
sumber
Sepertinya ini hanya akan berfungsi dengan benar dalam keadaan yang sangat khusus. Bagaimana Anda menjamin bahwa Anda akan berakhir dengan partisi wilayah umum yang tidak tumpang tindih dan lengkap?
whuber
Benar. Langkah-langkah tambahan a) dataset serikat dalam hal alat arcgis Union b) mengambil terbesar pertama dari tabel gabungan dan memeriksa fraksi orang lain di dalam c) menghapus orang lain dengan fraksi ambang batas yang lebih besar, misalnya 90%. Bagaimana ini?
FelixIP
Saya tidak tahu, karena saya belum tahu apa pertanyaan sebenarnya yang diajukan.
whuber
Tata rias menggunakan blok terbesar. Ini adalah pemahaman saya tentang pertanyaan
FelixIP
Solusi untuk itu adalah dengan menggunakan satu blok (penyatuan semuanya)!
whuber