2009-07-09 9 views
7

मैं एनपी-पूर्ण संसाधन शेड्यूलिंग समस्या को हल करने के लिए simulated annealing का उपयोग कर रहा हूं। प्रत्येक उम्मीदवार के कार्यों के आदेश के लिए मैं कई अलग-अलग लागत (या ऊर्जा मूल्य) की गणना करता हूं। कुछ उदाहरण हैं (हालांकि बारीकियों शायद सवाल के लिए अप्रासंगिक हैं):एकाधिक विशिष्ट लागतों के साथ अनुरूपित एनीलिंग के लिए स्वीकृति संभावना फ़ंक्शन कैसे डिज़ाइन करें?

  • global_finish_time: दिन है कि अनुसूची स्पैन की कुल संख्या।
  • split_cost: अन्य कार्यों द्वारा बाधाओं के कारण प्रत्येक कार्य में देरी होने की संख्या (यह एक बार शुरू होने के बाद किसी कार्य के बाधा को हतोत्साहित करने के लिए है)।
  • deadline_cost: दिनों की स्क्वायर संख्या की राशि जिसके द्वारा प्रत्येक चूक की समयसीमा अतिदेय है।

पारंपरिक स्वीकृति संभावना समारोह इस (अजगर में) की तरह दिखता है:

def acceptance_probability(old_cost, new_cost, temperature): 
    if new_cost < old_cost: 
     return 1.0 
    else: 
     return math.exp((old_cost - new_cost)/temperature) 

अब तक मैं बस, उन्हें जोड़ने इतना है कि मैं में परिणाम फ़ीड कर सकते हैं द्वारा एक में मेरी पहली दो लागत संयुक्त है acceptance_probability। लेकिन मैं वास्तव में deadline_cost के लिए global_finish_time से अधिक प्राथमिकता लेने के लिए पर split_cost पर प्राथमिकता लेने के लिए वास्तव में चाहता हूं।

तो स्टैक ओवरफ़्लो पर मेरा प्रश्न यह है कि: मैं एक स्वीकृति संभावना फ़ंक्शन कैसे डिज़ाइन कर सकता हूं जो एकाधिक ऊर्जा को ध्यान में रखता है लेकिन हमेशा दूसरी ऊर्जा की तुलना में पहली ऊर्जा को अधिक महत्वपूर्ण मानता है, और इसी तरह? दूसरे शब्दों में, मैं old_cost और new_cost में कई लागतों के tuples के रूप में पास करना और एक समझदार मूल्य वापस करना चाहते हैं।

संपादित करें:, प्रस्तावित समाधान मैं यह निष्कर्ष निकाला है कि एक ही रास्ता है कि मेरे लिए काफी अच्छी तरह से काम करता है माइक Dunlavey के सुझाव है के साथ प्रयोग भले ही यह विभिन्न इकाइयों है कि लागत घटकों के साथ कई अन्य कठिनाइयों बनाता है के कुछ दिनों के बाद । मैं संतरे सेब से तुलना करने के लिए व्यावहारिक रूप से मजबूर हूँ।

तो, मैंने मानों को "सामान्यीकृत" करने में कुछ प्रयास किया। सबसे पहले, deadline_cost वर्गों का योग है, इसलिए यह अन्य घटकों को रैखिक रूप से बढ़ते समय तेजी से बढ़ता है। इसे संबोधित करने के लिए मैं समान विकास दर प्राप्त करने के लिए वर्ग रूट का उपयोग करता हूं। दूसरा, मैंने एक ऐसा फ़ंक्शन विकसित किया जो लागत के रैखिक संयोजन की गणना करता है, लेकिन अब तक देखे गए उच्चतम लागत वाले घटक के अनुसार गुणांक को स्वत: समायोजित करता है।

उदाहरण के लिए, यदि उच्चतम लागत का ट्यूपल (ए, बी, सी) है और इनपुट लागत वेक्टर (x, y, z) है, तो रैखिक संयोजन बीसीएक्स + सी + जेड है। इस तरह, इससे कोई फर्क नहीं पड़ता कि यह कितना उच्च जेड प्राप्त करता है, यह 1 मान के x मान से अधिक महत्वपूर्ण नहीं होगा।

यह लागत कार्य में "जागियों" बनाता है क्योंकि नई अधिकतम लागतें खोजी जाती हैं। उदाहरण के लिए, यदि सी ऊपर जाता है तो बीसीएक्स और साइ दोनों एक दिए गए (एक्स, वाई, जेड) इनपुट के लिए अधिक होंगे और इसलिए लागत के बीच अंतर होंगे। एक उच्च लागत अंतर का मतलब है कि स्वीकृति संभावना कम हो जाएगी, जैसे कि तापमान अचानक एक अतिरिक्त कदम कम हो गया था। अभ्यास में हालांकि यह कोई समस्या नहीं है क्योंकि अधिकतम लागत शुरुआत में केवल कुछ ही बार अपडेट की जाती है और बाद में नहीं बदलती है। मेरा मानना ​​है कि यह सैद्धांतिक रूप से एक सही परिणाम में अभिसरण साबित हो सकता है क्योंकि हम जानते हैं कि लागत कम मूल्य की ओर बढ़ जाएगी।

एक चीज जो अभी भी मुझे कुछ उलझन में रखती है वह तब होता है जब अधिकतम लागत 1.0 और उससे कम होती है, 0.5 कहें। अधिकतम वेक्टर (0.5, 0.5, 0.5) के साथ यह रैखिक संयोजन 0.5 * 0.5 * x + 0.5 * y + z, i.e.प्राथमिकता का क्रम अचानक उलट दिया गया है। मुझे लगता है कि इससे निपटने का सबसे अच्छा तरीका अधिकतम वेक्टर का उपयोग सभी मानों को दिए गए श्रेणियों को स्केल करने के लिए करना है, ताकि गुणांक हमेशा एक जैसा हो (कहें, 100x + 10y + z)। लेकिन मैंने अभी तक कोशिश नहीं की है।

+0

मुझे यह जानने में दिलचस्पी होगी कि यह एक उद्योग या अकादमिक समस्या है या नहीं। सादर –

+1

यह अकादमिक नहीं है। मैं इसे एमएस प्रोजेक्ट के विकल्प के रूप में उपयोग कर रहा हूं। कार्यक्रम का मुख्य लक्ष्य इस सवाल का जवाब देना आसान बनाता है कि "आपकी टीम हमारे सॉफ़्टवेयर में फीचर एक्स कब जोड़ सकती है?" – flodin

+1

मुझे पता है कि यह प्रश्न साल पुराना है, लेकिन किसी और के लिए जो इस पृष्ठ पर Google के माध्यम से ठोकर खा रहा है ... अस्पष्ट तर्क में भारित योग तार्किक-या के बराबर है, इसलिए आप प्रभावी ढंग से कह रहे हैं "अगर स्थिति ए * या * शर्त बी आदि "। आप वास्तव में क्या चाहते हैं ए * और * बी * और * सी, और ऐसा करने के लिए आप गुणा का उपयोग करते हैं। कुछ चेतावनी हैं (उदाहरण के लिए आपके वजन अब शक्तियों की आवश्यकता है) लेकिन यह उस गड़बड़ी से कहीं बेहतर है जो आप विशेष मामले की कोशिश कर रहे हैं। अधिक जानकारी के लिए विकी "भारित योग मॉडल" और "भारित उत्पाद मॉडल"। –

उत्तर

2

mbeckish सही है।

क्या आप विभिन्न ऊर्जा का रैखिक संयोजन बना सकते हैं, और गुणांक समायोजित कर सकते हैं?

संभावित रूप से उन्हें अंदर और बाहर लॉग-इन कर रहा है?

मैंने मेट्रोपोलिस-हेस्टिंग्स का उपयोग करके कुछ एमसीएमसी किया है। उस स्थिति में मैं किसी विशेष राज्य (इसके प्राइवर्स दिए गए) की (गैर-सामान्यीकृत) लॉग-संभावना को परिभाषित कर रहा हूं, और मुझे लगता है कि मैं जो चाहता हूं उसके बारे में अपनी सोच को स्पष्ट करने का एक तरीका ढूंढता हूं।

+0

विभिन्न मात्राओं में हमेशा संगत इकाइयां नहीं होती हैं। उदाहरण के लिए डेडलाइन वैल्यू को कम से कम स्क्वायर प्रकार के ऑप्टिमाइज़ेशन के लिए स्क्वायर किया जाता है, यानी मैं 1 कार्य को 3 दिनों में देरी करने के बजाय 3 कार्यों में देरी करना पसंद करता हूं। मैंने यह माना है लेकिन मुझे डर है कि मैं कई सीमा मामलों में भागूंगा जहां सिस्टम सही काम नहीं कर रहा है क्योंकि मैंने गुणांक को "सही" नहीं बनाया है (यदि ऐसी कोई चीज भी है)। Mcbeckish – flodin

+0

@flodin का उत्तर भी देखें: आप चाहते हैं कि आपकी समग्र ऊर्जा सतह निरंतर रहे, इसलिए मैं आईएफ स्टेटमेंट्स से शर्मिंदा रहूंगा। इसके अलावा, आप इसे सुंदर nonlinear बना सकते हैं, जैसे सीमा मामलों से एक वर्ग कानून प्रतिकृति - बस एक विचार। –

0

यह "प्राथमिकता लेता है" से आपका क्या मतलब है इस पर निर्भर करता है। उदाहरण के लिए, यदि deadline_cost 0.001 से नीचे चला जाता है, लेकिन global_finish_time लागत 10000 तक बढ़ जाती है? क्या आप 1.0 लौटते हैं, क्योंकि deadline_cost कम हो गया है, और यह किसी और चीज पर प्राथमिकता लेता है? ऐसा लगता है कि यह एक निर्णय कॉल है जो केवल आप कर सकते हैं, जब तक कि आप इस परियोजना पर पर्याप्त पृष्ठभूमि जानकारी प्रदान न कर सकें ताकि अन्य लोग अपने स्वयं के सूचित निर्णय कॉल का सुझाव दे सकें।

If (new deadline_cost > old deadline_cost) 
    return (calculate probability) 

else if (new global finish time > old global finish time) 
    return (calculate probability) 

else if (new split cost > old split cost) 
    return (calculate probability) 

else 
    return (1.0) 
पाठ्यक्रम तीन स्थानों पर आप की गणना संभावना एक अलग समारोह इस्तेमाल कर सकते हैं में से प्रत्येक के

:

+0

हां, वैश्विक समाप्ति समय की तुलना में समय सीमा हमेशा अधिक महत्वपूर्ण होती है। यहां तक ​​कि अगर वैश्विक खत्म समय 10000 तक बढ़ जाता है, तो भी मैं चाहता हूं कि सिस्टम कम समय सीमा के पक्ष में है। इस सवाल में मैंने व्याख्या करने की कोशिश की, मुझे खेद है कि यह स्पष्ट नहीं था। – flodin

1

मैं की तर्ज पर कुछ पर विचार करेंगे।

+0

मैं इसे आज़माउंगा और आपको वापस ले जाऊंगा। मैं कुछ इसी तरह के बारे में सोच रहा था लेकिन इस तथ्य में एक संभावित समस्या को देखते हुए कि पहले मान में एक अंतर एक्स समान मूल्य को दूसरे मान में अंतर एक्स के रूप में दर्शाता है। सहजता से दूसरे मूल्य में एक अंतर को उस मान का प्रतिनिधित्व करना चाहिए जो कुछ अर्थों में असीम रूप से छोटी संभावना है। यहां एक समस्या यह है कि परीक्षण और त्रुटि के माध्यम से स्वयं को समझना मुश्किल है कि आपका एल्गोरिदम ध्वनि है।यह साधारण मामलों के लिए काम कर सकता है लेकिन जटिल परिदृश्यों में अजीब व्यवहार बना सकता है। मैं विधि की कुछ सैद्धांतिक पुष्टि की कामना करता हूं। – flodin

+0

मुझे लगता है कि यह एक उदारवादी दृष्टिकोण है जो एनपी-पूर्ण समाधानों में असामान्य नहीं है। –

+0

मैंने इसे आजमाया है और यह काफी अच्छे समाधान पैदा कर रहा है। एक मुद्दा यह है कि एक बार सर्वोच्च प्राथमिकता घटक एक इष्टतम मूल्य पर बस गया है, तो एल्गोरिदम भी कम तापमान पर भी उस समाधान से बाहर निकलने की संभावना है। यह तर्कसंगत है क्योंकि (0, 0) से (1, 0) में जाने से ठीक वही संभावना है (0, 0) से (0, 1) तक चलती है। मैं थोड़ी देर के लिए खुला प्रश्न छोड़ दूंगा और यह देखने के लिए प्रयोग करना जारी रखूंगा कि कुछ बेहतर हो रहा है या नहीं। निचले प्राथमिकता वाले घटक का मूल्यांकन करते समय मैं संभावना में कुछ प्रकार के परिमाण अंतर पर विचार कर रहा हूं। – flodin

1

मैं बहु उद्देश्य विकासवादी एल्गोरिथ्म (MOEA) से एक संकेत लेते हैं और इसे संक्रमण यदि सभी उद्देश्यों की एक साथ acceptance_probability समारोह आप दे दी है साथ पारित होगा। इसके परिणामस्वरूप पारेटो मोर्चे की खोज करने का असर मानक सिम्युलेटेड एनीलिंग समान ऊर्जा समाधानों के पठारों की पड़ताल करता है।

हालांकि, यह पहली बार प्राथमिकता लेने के विचार को छोड़ देता है।

आपको शायद अपने पैरामीटर को ट्विक करना होगा, जैसे इसे उच्च प्रारंभिक तापमान देना।

संबंधित मुद्दे