Wednesday, 15 April 2015

Matrix chain Multiplication in prolog -


मेरे पास मैट्रिक्स गुणन समस्या का निम्न समाधान है।

  matMul ([X] ओएस (0, एक्स))। मैटुल (एल, ओ (ए, एम (ए, डी (डी 1, डी 2))): - संलग्न ([एल 1 | एल 1 एस], [एल 2 | एल 2 एस], एल), मैटूल ([एल 1 | एल 1 एस], ओएस ए 1, एम (_, डी (डी 1, सी 1))), मैटूल ([एल 2 | एल 2 एस], ओएस (ए 2, एम (_, डी (डी, डी 2))), ए ए 1 + ए 2 + (डी 1 * सी 1 * डी 2)  

यह प्रोग्राम मुझे सभी संभावित समाधान देता है

 ? - मैटूल ([एम (ए, डी (5,4)), एम (ए, डी (4,6)), एम (ए, डी (6,2)) , एम (ए, डी (2,7)), ए)। ए = ओएस (392, मी (ए, डी (5, 7))); ए = ओएस (244, मी (ए, डी (5, 7))); ए = ओएस (414, मी (ए, डी (5, 7))); ** ए = ओएस (158, मी (ए, डी (5, 7)); ** ए = ओएस (250, एम (ए, डी (5, 7))); असत्य।  

जैसा कि हम देख सकते हैं, उनमें से एक इष्टतम है मैं क्या करना चाहूंगा, यह एक ही इष्टतम समाधान को पाने के लिए एक को संशोधित करता है।

अगर कोई इसे प्राप्त करने के लिए कोई भी संकेतक / सुझाव दे सकता है, तो यह वास्तव में मददगार होगा।

धन्यवाद।

ऐसा करने का त्वरित तरीका setof / 3 क्योंकि यह आरोही क्रम में है:

  इष्टतम_सोल्यूशन (मैट्रिक्स, ए): - सेटफ (ओएस (एक्स, एम), मैटूल (मैट्रिक्स, ओएस (एक्स, एम)), एस) , एस = [ए | _] % पहला तत्व चुनें, जिसमें सबसे कम एक्स  

setof / 3 का उपयोग करते समय किया जाएगा।

फिर इसे क्वेरी करें :

<पूर्व> | ? - इष्टतम_सोल्यूशन ([एम (ए, डी (5,4)), एम (ए, डी (4,6)), एम (ए, डी (6,2)), एम (ए, डी (2,7 ))], ए)। ए = ओएस (158, मी (ए, डी (5,7))) हाँ

No comments:

Post a Comment