मैं सीवीएक्सओपीटी में सीखने के अभ्यास के रूप में निम्नलिखित कोशिश कर रहा हूं। मैंने असमानता बाधाओं को दूर करके और कुछ और समानता बाधाओं को जोड़कर उदाहरण कोड here में मामूली संशोधन किए हैं।सीवीएक्सओपीटी केवल समानता बाधाओं के साथ
from cvxopt import solvers, blas, matrix, spmatrix, spdiag, log, div
solvers.options['show_progress'] = False
import numpy as np
np.random.seed(1)
# minimize p'*log(p)
# subject to
# sum(p) = 1
# sum(p'*a) = target1
# sum(p'*max(a-K,a^2)) = target2
a = np.random.randint(20, 30, size=500)
target1 = 30
target2 = 0.60
K = 26
A = matrix(np.vstack([np.ones(500), a, np.array([max(x-K,x*x) for x in a])]))
b = matrix([1.0, target1, target2])
n = 500
def F(x=None, z=None):
if x is None: return 0, matrix(1.0, (n,1))
if min(x) <= 0: return None
f = x.T*log(x)
grad = 1.0 + log(x)
if z is None: return f, grad.T
H = spdiag(z[0] * x**-1)
return f, grad.T, H
sol = solvers.cp(F, A=A, b=b)
p = sol['x']
लेकिन जब मैं प्रदर्शन निम्नलिखित:
np.sum(p)
243.52686763225338
यह अनुकूलन के पहले बाधा उल्लंघन किया है। मैं यह समझने में सक्षम नहीं हूं कि यहां क्या गलत हो रहा है। (कृपया ध्यान दें के बाद से मैं यादृच्छिक संख्या का उपयोग कर रहा चर a
अपने np.sum(p)
विभिन्न मूल्यों का उत्पादन करेगा उत्पन्न करने के लिए, लेकिन आप मेरा रूप में एक ही उल्लंघन का पालन करना चाहिए।
यहां तक कि अगर मैं मूल लिंक से असमानता की कमी रखने के लिए और दो अतिरिक्त समानता जोड़ने बाधाओं, समानता की कमी का उल्लंघन होता है
किसी अन्य पैकेज मैं मज़बूती से उपयोग कर सकते हैं जो बनाए रखा है एक पैकेज यानी वहाँ है
संपादित करें:।? अगर कोई उपयुक्त समाधान नहीं है, नहीं वहाँ एक संदेश होना चाहिए कि कोई व्यवहार्य समाधान नहीं मिला?
समस्या दो अतिरिक्त समानता बाधाओं के कारण अक्षम है। समाधान का निरीक्षण करें और आप देख सकते हैं कि इसकी अज्ञात स्थिति है और यह अक्षम है। – tihom