2012-09-09 11 views
5

का उपयोग कर मैं चाहूँगा सुलझाने:द्विघात प्रोग्रामिंग kernlab से ipop फंक्शन का उपयोग करके निम्नलिखित द्विघात प्रोग्रामिंग समीकरण को हल करने के लिए आर

min 0.5*x'*H*x + f'*x 
subject to: A*x <= b 
Aeq*x = beq 
LB <= x <= UB 

जहां हमारे उदाहरण एच 3x3 मैट्रिक्स में, च 3x1 है, एक 2x3 है, ख 2x1 है , एलबी और यूबी दोनों 3x1 हैं।

संपादित 1 मेरे आर कोड है:

library(kernlab) 
H <- rbind(c(1,0,0),c(0,1,0),c(0,0,1)) 
f = rbind(0,0,0) 
A = rbind(c(1,1,1), c(-1,-1,-1)) 
b = rbind(4.26, -1.73) 
LB = rbind(0,0,0) 
UB = rbind(100,100,100) 
> ipop(f,H,A,b,LB,UB,0) 
Error in crossprod(r, q) : non-conformable arguments 

मैं matlab से पता कुछ इस तरह है:

H = eye(3); 
f = [0,0,0]; 
nsamples=3; 
eps = (sqrt(nsamples)-1)/sqrt(nsamples); 
A=ones(1,nsamples); 
A(2,:)=-ones(1,nsamples); 
b=[nsamples*(eps+1); nsamples*(eps-1)]; 

Aeq = []; 
beq = []; 
LB = zeros(nsamples,1); 
UB = ones(nsamples,1).*1000; 

[beta,FVAL,EXITFLAG] = quadprog(H,f,A,b,Aeq,beq,LB,UB); 

और जवाब 3x1 का एक वेक्टर के बराबर है [0.57 , 0.57,0.57];

हालांकि जब मैं आर पर यह कोशिश, kernlab पुस्तकालय ipop से ipop समारोह का उपयोग कर (च, एच, ए, बी, पौंड, यूबी, 0)) और मैं crossprod (आर, क्यू) में त्रुटि का सामना करना पड़ रहा हूँ: गैर पक्षधर तर्क

मैं किसी भी टिप्पणी

+0

कृपया आपके द्वारा उपयोग किए गए आर कोड को पोस्ट करें, जिसमें आप 'एफ', 'एच',' ए', 'बी',' एलबी' और 'यूबी' कहां परिभाषित करते हैं। – Max

+0

इसे आर फोरम में स्थानांतरित नहीं किया जाना चाहिए? –

+0

@ मैक्स, मैंने कुछ आर कोड – user702846

उत्तर

2

मूल प्रश्न crossprod में त्रुटि संदेश त्रुटि (आर, क्यू) के बारे में पूछता है की सराहना करते हैं: गैर पक्षधर तर्क। जवाब यह है कि r को b के समान आयामों के साथ निर्दिष्ट किया जाना चाहिए। तो यदि b 2x1 है तो r भी 2x1 होना चाहिए।

एक माध्यमिक प्रश्न (टिप्पणियों से) पूछता है कि क्यों मूल प्रश्न में प्रस्तुत सिस्टम मैटलैब में काम करता है लेकिन आर में नहीं। जवाब यह है कि आर और मैटलैब समस्याएं अलग-अलग निर्दिष्ट करते हैं। Matlab समानता बाधाओं से असमानता बाधाओं को अलग से प्रवेश करने की अनुमति देता है। हालांकि आर में बाधाओं को सभी b<=Ax<=b+r (कम से कम kernlab फ़ंक्शन ipop) के रूप में होना चाहिए। तो हम मूल असमानता बाधाओं की नकल कैसे कर सकते हैं? सरल तरीका b बहुत नकारात्मक बनाना है और r'=-b+r बनाने के लिए, जहां r' आपका नया r वेक्टर है। अब हमारे पास अभी भी बाधाओं पर समान ऊपरी सीमा है क्योंकि r'+b=-b+r+b=r। हालांकि हमने बाधाओं पर भी कम बाध्य किया है। मेरा सुझाव यह है कि समाधान सुसंगत है या नहीं, यह देखने के लिए b के लिए कुछ अलग-अलग मानों के साथ सिस्टम को हल करने का प्रयास करना है।

संपादित करें:

यह शायद एक बेहतर तरीका कार्यक्रम को सुलझाने को संभालने के लिए है:

library(quadprog);
dvec <- -f;
Dmat <- H;
Amat <- -t(A);
bvec <- -rbind(4.26,-1.73);
solve.QP(Dmat, dvec, Amat, bvec)

जहां इन परिभाषाओं पहले से परिभाषित आर कोड पर निर्भर हैं।

+0

मैंने विभिन्न बी पर विचार करने के उत्तर की जांच की और परिणाम लगातार दिखता है! – user702846

+0

नया कोड काम नहीं करता है अगर एच पूरी तरह से शून्य मैट्रिक्स है! यह शिकायत करता है कि एच सकारात्मक निश्चित नहीं है, हालांकि यह matlab के तहत काम करता है! – user702846

+0

@ user702846, ऐसा कोई कारण नहीं है कि आप अन्य कोड का उपयोग जारी नहीं रख सकें। 'Resol.QP' फ़ंक्शन को इस तथ्य का उपयोग करना चाहिए कि 'एच' प्रोग्राम को हल करने के लिए सकारात्मक निश्चित है। मैं वर्गबद्ध कार्यक्रमों को हल करने के लिए और अधिक विकल्प देख रहा हूं। – Max

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