फजी कम से कम मोटे विभाजन एल्गोरिथ्म


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

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

और ए डॉट बी के निर्माण के लिए एल्गोरिथ्म सीधा लगता है (जैसे कुछ, यदि दो तत्व एक विभाजन में ए (बी) में हैं तो वे विभाजन को मर्ज करते हैं जो वे बी (ए) में हैं - ए और बी के बराबर होने तक दोहराएं)।

लेकिन अब कल्पना करें कि इनमें से कुछ लाइनें दो विभाजनों के बीच थोड़ी भिन्न हैं, जिससे यह सही उत्तर संभव नहीं है, और इसके बजाय मैं कुछ त्रुटि मानदंड को न्यूनतम करने के लिए इष्टतम उत्तर चाहता हूं।

एक नया उदाहरण लें:

यहां बाएं कॉलम में हमारे पास दो विभाजन हैं, जिनमें कोई भी सामान्य रेखा नहीं है (बाहरी सीमा के अलावा)। उपरोक्त प्रकार का एकमात्र संभव समाधान तुच्छ एक, सही स्तंभ है। लेकिन अगर हम "फजी" समाधानों की अनुमति देते हैं, तो मध्य स्तंभ अनुमेय हो सकता है, कहने के साथ कुल क्षेत्र का 5% भाग (यानी प्रत्येक मोटे विभाजन में एक अलग उप-वर्ग को आवंटित) किया जाता है। इसलिए हम मध्य स्तंभ का वर्णन "<= 5% त्रुटि के साथ कम से कम मोटे विभाजन" के रूप में कर सकते हैं।

क्या वास्तविक उत्तर तो शीर्ष पंक्ति, मध्य स्तंभ या मध्य पंक्ति, मध्य स्तंभ - या बीच में कुछ का विभाजन कम महत्वपूर्ण है।


मुझे आपके ऑपरेशन की समझ नहीं है। ऐसा लगता है कि आप दो विभाजन के एक आम तालमेल की तलाश कर रहे हैं । अतिरिक्त मानदंडों के बिना, हालांकि, आमतौर पर कई समाधान होंगे। उदाहरण के लिए, जब से (शोधन के बजाय) आपका लक्ष्य होना प्रतीत होता है, तो आपने क्यों किया था? सिर्फ सामान्य बाउंडिंग स्क्वायर क्यों नहीं खींचते?
whuber

1
धन्यवाद, मैंने इसे गलत समझा है। मुझे लगता है कि मेरा मतलब है कि सबसे अच्छा आम विभाजन है, या शायद "कम से कम मोटे"।
इकोनड्रूव

उस स्थिति में परिणाम आपके द्वारा तैयार किए गए कार्यों से बहुत भिन्न होगा। यह चौकों का 4 x 4 चेसबोर्ड होगा। इस एक उदाहरण से मैं आपके द्वारा पालन किए जाने वाले नियम को कम करने में असमर्थ रहा हूं। शायद आप सभी किनारों को सभी इनपुट सुविधाओं के लिए सामान्य रखने की कोशिश कर रहे हैं ? वास्तविक समस्या क्या है जिसे आप हल करने की कोशिश कर रहे हैं? क्या आप हमें यह समझने में मदद करने के लिए एक ठोस उदाहरण प्रदान कर सकते हैं कि आपका प्रश्न क्या होना चाहिए?
whuber

मैंने बहुत विस्तार किया है - शायद इससे मदद मिलेगी। यह सच है कि फ़ज़ी मामले में मैं अपने प्रश्न को ठीक से निर्दिष्ट नहीं कर सकता, लेकिन मुझे लगता है कि सटीक मामले में मुझे ठीक-ठीक पता है कि मेरा क्या मतलब है (भले ही मैं इसे अच्छी तरह से व्यक्त नहीं कर रहा हूं)।
इकोनड्रूव

उन प्रयासों (+1) के लिए धन्यवाद। अपने सेट-सैद्धांतिक अंकन के संदर्भ में, एक क्षेत्र के विभाजन एक फार्म आंशिक रूप से आदेश दिया सेट : विभाजन एक एक है शोधन की बी , और बी एक है coarsening की एक , जब में हर सेट एक में एक के एक सबसेट है बी । आपके संयोजन का संचालन और बी का सबसे अच्छा सामान्य समन्वय प्रतीत होता है । अपने फजी संस्करण से निपटने का एक तरीका यह होगा कि दो परतों के बीच छोटी विसंगतियों को ठीक करने के लिए जीआईएस की क्षमताओं का दोहन किया जाए और फिर गैर-फजी ऑपरेशन किया जाए।
whuber

जवाबों:


2

आप बहुभुज की सीमा के अंतर को उनकी सीमाओं के बीच सममित अंतर के मूल्यांकन के द्वारा कर सकते हैं, या जो प्रतीक व्यक्त किए गए हैं:

Difference(a, SymDifference(a, b))

अगली दो पंक्तियों और छवियों पर मल्टीलेस्ट्रेस के रूप में व्यक्त ज्यामितीय a और b को लें :

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

ए ख

सममितीय अंतर, जहाँ a और b के भाग प्रतिच्छेद नहीं करते हैं, वह है:

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

और अंत में, एक या बी और सममित अंतर के बीच के अंतर का मूल्यांकन करें :

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 के साथ दिखाया गया है, दो MultiPolygons लें, और एक 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) आर्कगिस यूनियन टूल बी के संदर्भ में यूनियन डेटासेट मर्ज किए गए टेबल से सबसे पहले लेते हैं और सी के अंदर दूसरों के चेक अंश) दूसरों को आंशिक रूप से अधिक सीमा के साथ हटाते हैं, जैसे 90%। यह कैसा है?
फेलिक्सिप

मुझे नहीं पता, क्योंकि मुझे पता नहीं चला है कि प्रश्न वास्तव में अभी तक क्या पूछ रहा है।
whuber

सबसे बड़े संभव ब्लॉकों का उपयोग कर क्षेत्र बनाओ। यह मेरी समझ का सवाल है
19:59 पर फेलिक्सआईपी

इसका समाधान एकल ब्लॉक (उन सभी का संघ) का उपयोग करना है!
whuber
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.