मैं कुछ ऐसा करने की कोशिश कर रहा हूं जो तर्कसंगत रूप से करना संभव हो। हालांकि, मुझे यकीन नहीं है कि रैखिक प्रोग्रामिंग के दायरे में इसे कैसे किया जाए। मैं जेडएमपीएल/एससीआईपी का उपयोग कर रहा हूं, लेकिन इसे सबसे ज्यादा पढ़ने योग्य होना चाहिए।एक चर द्वारा एक सेट इंडेक्स करने के लिए संभव है?
set I := {1,2,3,4,5};
param u[I] := <1> 10, <2> 20, <3> 30, <4> 40, <5> 50;
var a;
var b;
subto bval:
b == 2;
subto works:
a == u[2];
#subto does_not_work:
# a == u[b];
मुझे यकीन है कि चर a
u
में सूचकांक b
पर मूल्य के बराबर है बनाने की कोशिश कर रहा हूँ। तो उदाहरण के लिए, मैं सुनिश्चित करता हूं कि b == 2
और फिर मैं उस बाधा को सेट करने का प्रयास करता हूं जो a == u[b]
है, लेकिन यह काम नहीं करता है। यह शिकायत करता है कि मैं एक चर के साथ अनुक्रमण करने की कोशिश कर रहा हूँ। मैं केवल a == u[2]
करने में सक्षम हूं, जो a
20
के बराबर बनाता है।
क्या एक चर द्वारा निर्दिष्ट सूचकांक पर आसानी से u
तक पहुंचने का कोई तरीका है? किसी भी मदद/मार्गदर्शन के लिए धन्यवाद।
संपादित: मुझे लगता है आम सहमति है कि यह संभव है क्योंकि यह अब एक एल.पी. हो जाता है नहीं है। उस स्थिति में, क्या कोई इसे लिखने का एक और तरीका सोच सकता है ताकि b
के मूल्य के आधार पर, मैं सेट u
से संबंधित मान प्राप्त कर सकता हूं? इसे सीधे अनुक्रमणित करने से बचना होगा।
समाधान: राम से प्रतिक्रिया के आधार पर मैं इसे आज़माने के लिए कर रहा था और पाया कि यह निश्चित रूप से एक व्यवहार्य और रैखिक समाधान था। धन्यवाद, राम! यहाँ ZMPL में नमूना समाधान कोड है:
set I := {1,2,3,4,5};
param u[I] := <1> 10, <2> 20, <3> 30, <4> 40, <5> 50;
var a;
var b;
var y[I] binary;
subto bval:
b == 4;
subto only_one:
sum <i> in I : y[i] == 1;
subto trick:
b == (sum <i> in I : y[i] * i);
subto aval:
(sum <i> in I : u[i]*y[i]) == a;
असभ्य नहीं होना चाहिए, लेकिन कोई आम सहमति की आवश्यकता नहीं है। यह रैखिक नहीं है क्योंकि यह रैखिक की परिभाषा को पूरा नहीं करता है। – raoulcousins
कूल, धन्यवाद! खुशी है कि हमें सर्वसम्मति की आवश्यकता नहीं है। – gnychis