आपकी समस्या प्रतीत नहीं होती है, "कि" एजेंटों "की राशि को ऊर्जा के बिल्कुल असतत हिस्से की आपूर्ति करनी है या प्रत्येक एक मांग के लिए कुछ भी नहीं ...", ठीक है? या तुमने मुझे समझा नहीं। इसलिए मैं अपनी समस्या का बेहतर वर्णन करने की कोशिश करूंगा, क्योंकि मुझे इसका समाधान मिल गया है।
मेरी समस्या में, मेरे पास ऐसे एजेंटों का एक समूह है जहाँ हर एक के पास कुछ निश्चित संसाधनों का बजट होता है, जो कार्यों की लागत को साझा कर सकते हैं, जिन्हें 1 बार "निष्पादित" किया जाना चाहिए या नहीं (कई-से-कई-असाइनमेंट बिना आवश्यकता के) "हर कार्य" निष्पादित करें)। इसका अर्थ है: कार्य x के लिए एजेंटों के आंशिक समाधानों का योग, कार्य x की लागत से कम या बराबर होना चाहिए। उद्देश्य अधिकांश मूल्य वाले कार्यों के सेट को ढूंढना है जो एजेंट भुगतान कर सकते हैं।
मैं gams सॉफ़्टवेयर के साथ काम कर रहा हूं, इसलिए मैं इसे gams-style में वर्णित करता हूं: एक एजेंट, t कार्य पैरामीटर लागत (t), मान (t) पैरामीटर संसाधन (a) सेट करें
पॉजिटिव वैरिएबल y (a, t) (नॉन-इंट), एजेंट का हिस्सा जो टास्क टी उद्देश्य के लिए है:
maxvalue =e= sum((a,t), value(t) * y(a,t) / cost(t) );
agentresource_max_constraint(a).. sum(t, y(a,t)) =l= resources(a);
taskcost_max_constraint.. sum(a, y(a,t)) =l= cost(t);
जैसा कि मैंने लिखा था, मेरे पास एक समाधान था लेकिन आंशिक कार्य समाधानों को अलग करने का तरीका नहीं जानता था। लेकिन अब मुझे पता चला कि मैं एक बाधा का निर्माण कर सकता हूं
बाइनरी वेरिएबल z(t)
taskcost_bin_constraint z(t) =e= sum(a, y(a,t)) / cost(t);
sum(a, y(a,t)) / cost(t)
समीकरण निर्माण में 0 और 1 के बीच कुछ होता है और इस बाधा से, z
1 के लिए 1 और 1 से कम सभी के लिए 0 taskcost_bin_constraint
होता है। इस उद्देश्य के साथ होगा:
maxvalue =e= sum(t, value(t) * z(t));
मैं सोच रहा था लेकिन यह काम करता है और मुझे बाधा के तहत बेहतर समाधान देता है, एक कार्य को पूरा करने या न करने के लिए।
शायद आप भी इस तरह की बाधा जोड़ सकते हैं? मांगों को पूर्ण रूप से पूरा करने के लिए एक अवरोध, 0 और 1 के बीच के मूल्य के साथ एक अभिव्यक्ति में व्यक्त किया गया।