मुझे देखने दो कि क्या मुझे यह सही लगा, लाल चिह्नित ब्लॉक, नीले थे और एल्गोरिथ्म ने एक टी आकार पाया और उन्हें लाल चिह्नित किया, क्या यह सही है? आपका लक्ष्य एक ही रंग के ब्लॉक के साथ जितनी संभव हो उतनी टी आकार ढूंढना है, सही है अब तक मुझे आशा है। वर्तमान में आप उन्हें ढूंढने के बाद उन्हें चिन्हित करते हैं और यह एल्गोरिथम की उपयोगिता को कम कर देता है (क्योंकि आप इष्टतम समाधान को याद नहीं कर सकते हैं)। आप सभी आकृतियों की खोज करने की योजना बना रहे हैं और फिर किसका उपयोग करना है और कौन सा उपयोग नहीं करना है। क्या मैं अब तक सही हूं? कारण कि आप एल्गोरिथ्म होने पर T आकृतियों के अंदर समाहित ब्लॉक की मात्रा को अधिकतम करना चाहते हैं।
यदि मैं सही हूं तो मेरी राय में आपकी स्थिति के लिए इष्टतम समाधान है।
हम Integer Linear Programming का उपयोग करेंगे।
मेरा मानना है कि मैंने अतीत में इसका इस्तेमाल किया था:
http://sourceforge.net/projects/lpsolve/
http://lpsolve.sourceforge.net/5.5/Java/README.html
(आप इसे कई भाषाओं के साथ काम करने के लिए प्राप्त कर सकते हैं, मैंने इसे PHP, Java और C के साथ उपयोग किया है)
हम क्या करेंगे बोर्ड पर हर संभव टी आकार को पंजीकृत करें और फिर कवर किए गए ब्लॉकों की मात्रा को अधिकतम करने के लिए ILP का उपयोग करें। ILP तेजी से जटिल है। अपने बोर्ड के आकार को ध्यान में रखते हुए, यह एक समस्या नहीं होगी। मैंने ILP के साथ ग्राफ़ पर बहुत अधिक जटिल मिनट / अधिकतम प्रश्न चलाए हैं और यह सैकड़ों सेकंड (आपके मामले में यह एक दूसरे के अंश में गिरता है) के साथ पूरा करने के लिए एक सेकंड का एक अंश और 30-90 सेकंड तक ले गया है।
मैं क्या करने की सलाह दूंगा:
- सभी संभव रेखा आकृतियों का पता लगाएं
- एक ही रंग की रेखा आकृतियों के बीच सभी चौराहों का पता लगाएं
- सभी संभव टी आकृतियों को खोजें, सभी चौराहे की खोज करें।
- प्रत्येक T आकार के लिए रैखिक समस्या में एक बूलियन चर को परिभाषित करें (
0 <= Bi <= 1क्योंकि मान पूर्णांक हैं, जो 0 या 1 छोड़ता है।
- टी शेप के प्रत्येक जोड़े के लिए स्थितियां बनाएं जो प्रतिच्छेद करती हैं (
Bi + Bj <= 1)
- उद्देश्य समारोह होगा ("T" आकार (i) * Bi) में ब्लॉक का योग
- सॉल्वर को चलाएं और T के आकृतियों को गहरा करें जहां सॉल्वर के संबंधित बूलियन (s) जहां इष्टतम समाधान में 1 है।
यह मूल्यवान ज्ञान है, मैंने काम की परियोजनाओं के लिए अक्सर रैखिक सॉल्वर का उपयोग किया।
ILP मूल रूप से चयन समस्याओं को हल करने का एक तरीका है जहां आप कुछ रैखिक फ़ंक्शन के लिए अधिकतम या न्यूनतम प्राप्त करना चाहते हैं।
आप यहाँ और अधिक पढ़ सकते हैं, पूर्णांक प्रोग्रामिंग और रैखिक प्रोग्रामिंग का उपयोग करना प्रोग्रामर के लिए एक ही है कि इंटीगर कंप्यूटर के लिए कहीं अधिक जटिल है जिसका परिणाम लंबे समय तक हो सकता है। आपके मामले में नहीं, यह बहुत सरल है और सबसे खराब स्थिति में केवल मिलीसेकंड से कम लेना चाहिए।
मुझे लगता है कि आप यहाँ और अधिक पढ़ सकते हैं:
http://en.wikipedia.org/wiki/Integer_linear_programming#Integer_unknowns
यह इसे अच्छी तरह से समझाता है:
http://fisher.osu.edu/~croxton_4/tutorial/
यह मूल रूप से एक निर्णय समस्या का हल है, ऐसे निर्णय कैसे करें जो आप चाहते हैं कि परिणाम को अधिकतम करें। यह उस फ़ंक्शन को मानता है जो परिणाम को दिखाता है रैखिक है जो आपके विशिष्ट वर्तमान मामले में है। फ़ंक्शन जो इस मामले में परिणाम का न्याय करता है, आपके द्वारा अंधेरा करने के लिए तय किए गए सभी टी आकृतियों के लिए ब्लॉकों को बोता है।
गणितीय रूप से, चर को कैसे सेट किया जाए: हमारे वर्तमान मामले में बूलियन्स (क्या मैं इंडेक्स के साथ टी आकार को गहरा करता हूं या नहीं) हम जो परिणाम चाहते हैं, उसे अधिकतम करने के लिए: टी शेप को गहरा किए बिना संभव के रूप में कई ब्लॉकों को गहरा करना। जब तक आप चाहते हैं परिणाम की गणना एक रेखीय फ़ंक्शन के साथ की जा सकती है जब आपके पास सभी चर सेट होते हैं तो यह इसे हल करेगा। हमारे मामले में, हम जांचते हैं कि हम किस टी आकार को काला करते हैं और उन ब्लॉकों को जोड़ते हैं जो वे कवर करते हैं।

मुझे पता है कि यह तुच्छ नहीं है इसलिए यदि आप छलांग लेने का विकल्प चुनते हैं, तो बेझिझक टिप्पणी करें और मैं विस्तार से बताऊंगा।