पूर्णांक रैखिक प्रोग्रामिंग के लिए बूलियन को कास्ट करें


12

मैं एक पूर्णांक रैखिक कार्यक्रम में, निम्नलिखित बाधा व्यक्त करना चाहता हूं:

y={0if x=01if x≠0.

मेरे पास पहले से ही पूर्णांक चर और मुझे वादा किया गया है कि । पूर्णांक रैखिक प्रोग्रामिंग सॉल्वर के साथ उपयोग के लिए उपयुक्त रूप में, मैं उपरोक्त बाधा को कैसे व्यक्त कर सकता हूं?- 100 ≤ x ≤ 100x,y−100≤x≤100

यह संभवतः कुछ अतिरिक्त चर पेश करने की आवश्यकता होगी। मुझे किन नए चर और बाधाओं को जोड़ने की आवश्यकता है? क्या यह एक नए चर के साथ सफाई से किया जा सकता है? दो?

समान रूप से, यह पूछ रहा है कि बाधा को कैसे लागू किया जाए

y≠0 if and only if x≠0.

इस संदर्भ में जहां मेरे पास पहले से ही बाधाएं हैं और ।0 ≤ y ≤ 1|x|≤1000≤y≤1


(मेरा लक्ष्य https://cs.stackexchange.com/a/12118/755 में एक त्रुटि को ठीक करना है ।)


1
आपने क्या प्रयास किया है? क्या आपने कुछ उदाहरणों के माध्यम से काम करने की कोशिश की है कि क्या आप एक पैटर्न देखते हैं? यदि हाँ, तो क्या आपने अनुमान लगाने की कोशिश की है और फिर इसे साबित करने की कोशिश की है?
— Brika

1
हे! मैं देखता हूं कि आपने वहां क्या किया , @Brika। यदि आप यह देखने के लिए उत्सुक हैं कि मैंने क्या प्रयास किया है, तो यहाँ देखें और साथ ही यह स्पष्टीकरण भी क्यों कि वास्तव में गलत था । यदि आप मेरा अगला प्रयास देखना चाहते हैं, तो मेरा उत्तर देखें । मेरे पुराने प्रश्नों के माध्यम से पढ़ने के लिए धन्यवाद, और अगर उन्हें भविष्य के लिए बेहतर बनाया जा सकता है, तो मुझे आपके पास कोई सुझाव सुनना पसंद होगा!
— डीडब्ल्यू

वह बहुत अच्छा है। ;)
— बृक

जवाबों:


5

मुझे लगता है कि मैं इसे एक अतिरिक्त बाइनरी चर साथ कर सकता हूं :δ∈{0,1}

−100y≤x≤100y
0.001y−100.001δ≤x≤−0.001y+100.001(1−δ)

अपडेट करें

यह मानता है कि एक सतत चर है । यदि हम को पूर्णांक मान के लिए प्रतिबंधित करते हैं, तो दूसरा अवरोध सरल किया जा सकता है: xएक्स वाई - 101 δ ≤ एक्स ≤ - y + 101 ( 1 - δ )x

y−101δ≤x≤−y+101(1−δ)


1
मैंने इसे थोड़ा प्रोग्राम के साथ पूरी तरह से परीक्षण करके इस सही को सत्यापित किया। समाधान के लिए धन्यवाद!
— DW

@ErwinKalvelagen, क्या आप बाइनरी चर डेल्टा के साथ अपने तर्क की व्याख्या कर सकते हैं, उदाहरण के लिए, यदि y = {a: x> 0, b: x <0}, तो अधिक सामान्य स्थिति के लिए।
— निक

1
@Nick बाइनरी वैरिएबल का उपयोग 'OR' निर्माण के लिए किया जाता है। अपने प्रश्न के उत्तर के लिए यहां देखें ।
— इरविन कालवेगन

@ErwinKalvelagen, शानदार जवाब, मैंने आपके प्रश्न पर अपना दृष्टिकोण यहाँ cs.stackexchange.com/questions/64794/… पर लागू करने का प्रयास किया ।
— निक

1
xx

1

0≤x≤NN=100

  1. 0≤z1,z2,z≤1
  2. x−N(1−z1)≤0
  3. −x−Nz1≤−1
  4. −x−N(1−z2)≤0
  5. x−Nz2≤−1
  6. z1+z2−1≤z
  7. z≤z1
  8. z≤z2

z1=1⟺x≤0z2=1⟺x≥0z=z1∧z2


z=1−yx=100y=1z=0z1,z2x−Nz2≤−1x<Nx≤99x=99y=1y=0x−N≤x≤N0≤x≤N

1

t,ut=1x≥0u=1x≤0y=¬(t∧u)

0≤t,u,y≤11+x≤101t≤101+x1−x≤101u≤101−xt+u−1≤1−y1−y≤t1−y≤u

x≤99x≤100x≥−99

@TLW, कि पकड़ने के लिए धन्यवाद! मैंने बग को ठीक करने के लिए अपना उत्तर संपादित किया है। मैंने इसे थोड़ा कार्यक्रम के साथ पूरी तरह से परीक्षण किया और मुझे लगता है कि इसे अभी ठीक होना चाहिए।
— DW
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.