2013-03-08 6 views
5

अद्यतन

इस प्रश्न पर पूरी तरह से चर्चा की गई है और OR exchange पर अपडेट किया गया है, जहां मैंने इसे पार किया था।CPLEX पायथन एपीआई प्रदर्शन ओवरहेड?

मूल प्रश्न

जब मैं कमांड लाइन से CPLEX 12.5.0.0 चलाएँ:

cplex -f my_instance.lp 

एक इष्टतम पूर्णांक समाधान 19,056.99 टिक में पाया जाता है।

लेकिन अजगर एपीआई के माध्यम से, बहुत ही उदाहरण पर:

import cplex 
problem = cplex.Cplex("my_instance.lp") 
problem.solve() 

आवश्यक समय अब ​​(5 से अधिक बार धीमी) 97,407.10 टिक के बराबर है।

दोनों मामलों में, मोड समानांतर, निर्धारक, 2 धागे तक है। ताज्जुब है कि इस खराब प्रदर्शन के कुछ अजगर धागा भूमि के ऊपर की वजह से था, मैंने कोशिश की:

problem = cplex.Cplex("my_instance.lp") 
problem.parameters.threads.set(1) 
problem.solve() 

आवश्यक 46,513.04 टिक (जैसे कि, एक कोर का उपयोग दो बार दो का उपयोग कर से अधिक तेजी से गया था!)।

सामान्य रूप से सीपीएलईएक्स और एलपी में नया होने के नाते, मुझे इन परिणामों को काफी भ्रमित लगता है। क्या पाइथन एपीआई प्रदर्शन में सुधार करने का कोई तरीका है, या क्या मुझे कुछ और परिपक्व एपीआई (यानी जावा या सी ++) पर स्विच करना चाहिए?

कमांड लाइन से
Tried aggregator 3 times. 
MIP Presolve eliminated 2648 rows and 612 columns. 
MIP Presolve modified 62 coefficients. 
Aggregator did 13 substitutions. 
Reduced MIP has 4229 rows, 1078 columns, and 13150 nonzeros. 
Reduced MIP has 1071 binaries, 0 generals, 0 SOSs, and 0 indicators. 
Presolve time = 0.06 sec. (18.79 ticks) 
Probing fixed 24 vars, tightened 0 bounds. 
Probing time = 0.08 sec. (18.12 ticks) 
Tried aggregator 1 time. 
MIP Presolve eliminated 87 rows and 26 columns. 
MIP Presolve modified 153 coefficients. 
Reduced MIP has 4142 rows, 1052 columns, and 12916 nonzeros. 
Reduced MIP has 1045 binaries, 7 generals, 0 SOSs, and 0 indicators. 
Presolve time = 0.05 sec. (11.67 ticks) 
Probing time = 0.01 sec. (1.06 ticks) 
Clique table members: 4199. 
MIP emphasis: balance optimality and feasibility. 
MIP search method: dynamic search. 
Parallel mode: deterministic, using up to 2 threads. 
Root relaxation solution time = 0.20 sec. (91.45 ticks) 

परिणाम::

GUB cover cuts applied: 1 
Clique cuts applied: 3 
Cover cuts applied: 2 
Implied bound cuts applied: 38 
Zero-half cuts applied: 7 
Gomory fractional cuts applied: 2 

Root node processing (before b&c): 
    Real time    = 5.27 sec. (2345.14 ticks) 
Parallel b&c, 2 threads: 
    Real time    = 35.15 sec. (16626.69 ticks) 
    Sync time (average) = 0.00 sec. 
    Wait time (average) = 0.00 sec. 
          ------------ 
Total (root+branch&cut) = 40.41 sec. (18971.82 ticks) 

परिणाम

अनुलग्नक

यहाँ 2-सूत्र 'प्रस्तावों का पूरा विवरण, पहले (सामान्य) प्रस्तावना हैं पायथन एपीआई से:

Clique cuts applied: 33 
Cover cuts applied: 1 
Implied bound cuts applied: 4 
Zero-half cuts applied: 10 
Gomory fractional cuts applied: 4 

Root node processing (before b&c): 
    Real time    = 6.42 sec. (2345.36 ticks) 
Parallel b&c, 2 threads: 
    Real time    = 222.28 sec. (95061.73 ticks) 
    Sync time (average) = 0.01 sec. 
    Wait time (average) = 0.00 sec. 
          ------------ 
Total (root+branch&cut) = 228.70 sec. (97407.10 ticks) 

उत्तर

1

आप दोनों मामलों में presolver और कटौती को अक्षम करने का प्रयास कर सकते हैं। फिर प्रयोग करने के लिए प्रयोग फिर से करें कि पाइथन एपीआई खुद को थ्रॉटलिंग प्रदर्शन कर रहा है या नहीं। यदि कटौती को अक्षम करने के बाद प्रदर्शन मैच होता है, तो & डिफ़ॉल्ट पर ट्यूनिंग पाइथन कट पैरामीटर देखें।

मेरी राय में सी ++ प्रदर्शन के लिए पसंदीदा है, लेकिन यह विकास के लिए गंभीर समय जोड़ सकता है। हालांकि मेरी राय हालांकि।

+0

क्षमा करें, एक "उत्तर" हाल ही में हटा दिया गया है, जो पाठक को एक और अधिक अद्यतित चर्चा में रीडायरेक्ट करने के लिए उपयोग किया जाता है। मैंने परिणामस्वरूप लिंक के साथ अपनी पोस्ट अपडेट की। उम्मीद है कि यह जीवित रहेगा ;-) – Aristide

0

इससे संबंधित, मैंने देखा है कि पायथन एपीआई चर के लिए कॉल करने के बाद समस्या बनाने में काफी समय लगता है .add और linear_constraints.add। ऐसा लगता है कि CPXLgetcolindex से बुलाया गया strcmp अधिकांश प्रोफ़ाइल ले रहा है, शायद स्ट्रिंग आईडी को सरणी के माध्यम से रैखिक खोजों का उपयोग करके संभाला जा रहा है? सी ++ समस्या निर्माण में तात्कालिक है।

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