2013-08-27 7 views
5

मैं राज्य समीकरण मैट्रिक्स से भी कम की eigenvalues ​​रखने एक nonlinear फिल्टर MATLAB अनुकूलन Toolboox में fmincon का उपयोग कर के मापदंडों का अनुमान लगाने के कोशिश कर रहा हूँ,। 'SQP' कलन विधि का उपयोग fmincon के लिए दस्तावेज़ का कहना है कि यह सब पुनरावृत्तियों में बाधाओं का सम्मान करता है, और अभी तक मेरी कोड के पहले यात्रा पर यह एक बिंदु अस्थिर eigenvalues ​​जिसका अर्थ है की कोशिश करता है। मैं इन पैरामीटर मानों पर फ़िल्टर नहीं चला सकता, और इसलिए मेरा कोड क्रैश हो जाता है।प्रत्येक चरण में fmincon सम्मान बाधाओं को कैसे बनाया जाए?

प्रलेखन वास्तव में मतलब है कि 'AlwaysHonorConstraints' केवल असमानता की कमी के रूप में वैक्टर (पौंड और यूबी) में पारित करने के लिए लागू होता है करता है? क्या यह सुनिश्चित करने का कोई तरीका है कि प्रत्येक चरण में गैर-रैखिक बाधाएं संतुष्ट हों?

c = @(x) max(abs(eig(reshape(x(8:16), 3, 3)))) - 1; 
ceq = @(x) [];     
nonlcon = @(x) deal(c(x), ceq(x)); 

obj = @(x) -unscented_kalman1(x, fulldiv, crsp_allEverything); 

fminconOptions = optimset('Display', 'iter-detailed', 'Algorithm', 'sqp', ... 
'TolX', errTol, 'UseParallel', 'always', 'AlwaysHonorConstraints', 'bounds'); 

maxX = fmincon(obj, x0, [], [], [], [], [], [], nonlcon, fminconOptions); 

धन्यवाद:

यहाँ मेरी कोड के प्रासंगिक टुकड़ा है!

+1

जब आप कहते हैं "मेरे कोड के पहले पुनरावृत्ति पर यह अस्थिर eigenvalues ​​का मतलब एक बिंदु की कोशिश करता है" क्या आपका मतलब 'x0' का उपयोग कर 'fmincon' का पहला पुनरावृत्ति है? क्या आपने अलग-अलग शुरुआती मूल्यों की कोशिश की है? आप 'x0' को क्या सेट करते हैं? – user1884905

उत्तर

2

The documentation वास्तव में कहा गया है कि 'AlwaysHonorConstraints' विकल्प बाध्य केवल कमी के lb और ub होती है, इसलिए। दूसरे शब्दों में, fmincon संभव क्षेत्र के रूप में पूरे डोमेन [lb ub] मानता है और किसी भी और सभी रैखिक और गैर रेखीय की कमी पर ध्यान नहीं देता।

कुछ समय पहले मैंने optimize लिखा था, जो fminsearch पर आधारित है और on the file exchange पर उपलब्ध है। अब, यह एक लंबे समय पहले है, तो मैं misremember सकता है, लेकिन मैं एक विकल्प ('superstrict') कि संभव क्षेत्र के बाहर से बचा जाता है उद्देश्य समारोह के किसी भी मूल्यांकन, रैखिक और गैर रेखीय की कमी सहित लागू करने याद है। आप इसे आज़मा सकते हैं।

function unscented_kalman1(x, ...) 

    %// evaluate constraint (yes, also here, unfortunately) 
    c = @(x) max(abs(eig(reshape(x,2,2)))) - 1; 
    penalties = c > 0; 

    %// modify x by thresholding 
    if penalties   
     x = ... %// [MODIFY x SUCH THAT IT LIES INSIDE THE FEASIBLE REGION] 
    end 

    %// ... remainder of the function here 

    %// then finally: 
    y = ... %// [THE OUTCOME OF THE FUNCTION]; 

    if penalties 
     y = y + c.^3; %// ...or something similar 
    end 

end 

यह यह संभव अपने फिल्टर को चलाने के लिए करता है, लेकिन उद्देश्य के लिए एक ज्यादा उच्च मूल्य लौटने:

लेकिन, fmincon के लिए चिपके हुए, एक संभावित समाधान, unscented_kalman1 जैसे शामिल करने के लिए दंड को संशोधित करने के लिए है जब बाधाएं टूट जाती हैं तो कार्य करें। व्यवहार्य क्षेत्र में यह "बल" fmincon है।

लें देखभाल कि हालांकि जुर्माना समारोह आप का उपयोग discontinuities परिचय नहीं है। जैसे

y = y + 1e8*c; 

, अनुकूल नहीं किया जाएगा क्योंकि yसिर्फ संभव क्षेत्र के अंदर है अगर, दिए गए मान बस y है, लेकिन अगर यह तो सिर्फ अगले चरण में क्षेत्र के बाहर, यह कुछ अचानक लाखों से कूद। यह समस्याग्रस्त है, क्योंकि fmincon में एसक्यूपी y के पहले और दूसरे डेरिवेटिव का उपयोग करता है, जो कि इस तरह की असंतुलन के पड़ोस में लाखों लोगों की ओर जाता है, जो अगले पुनरावृत्ति को खराब कर देता है।

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