मैं पाइथन के scipy.optimize का उपयोग कर निम्न फ़ंक्शन को अधिकतम करने की कोशिश कर रहा हूं। हालांकि, बहुत कोशिश करने के बाद, यह काम नहीं लग रहा है। फ़ंक्शन और मेरा कोड नीचे चिपकाया गया है। मदद के लिए धन्यवाद!पायथन (scipy.optimize) के साथ अनुकूलन
समस्या
Maximize [sum (x_i/y_i)**gamma]**(1/gamma)
subject to the constraint sum x_i = 1; x_i is in the interval (0,1).
x
पसंद चर का एक वेक्टर है; y
पैरामीटर का एक वेक्टर है; gamma
एक पैरामीटर है। x
एस को एक के बराबर होना चाहिए। और प्रत्येक x
अंतराल (0,1) में होना चाहिए।
कोड
def objective_function(x, y):
sum_contributions = 0
gamma = 0.2
for count in xrange(len(x)):
sum_contributions += (x[count]/y[count]) ** gamma
value = math.pow(sum_contributions, 1/gamma)
return -value
cons = ({'type': 'eq', 'fun': lambda x: np.array([sum(x) - 1])})
y = [0.5, 0.3, 0.2]
initial_x = [0.2, 0.3, 0.5]
opt = minimize(objective_function, initial_x, args=(y,), method='SLSQP',
constraints=cons,bounds=[(0, 1)] * len(x))
यदि आप के बारे में विशिष्ट थे उपयोगी हो सकता है क्या लक्ष्य को उजागर करना अपरिहार्य 'की कोशिश कर के बहुत सारे' आपके प्रश्न का – Erik
आपका कोड मेरे लिए काम करता है। आपको क्या समस्या है? मुझे इष्टतम 'x_opt: सरणी मिलती है ([0.29465573, 0.33480638, 0.37053789])'। मुझे बस इतना बदलना था कि 'सीमा' में 'लेन' (प्रारंभिक_एक्स) 'या' लेन (वाई) 'होना चाहिए, क्योंकि आपके कोड में' x' परिभाषित नहीं है। – askewchan
@askewchan, एक संख्यात्मक स्थिरता मुद्दा हो सकता है। मेरे मैक पर मुझे 'नान' ज्ञान मिल रहा है, '' इटरेशन सीमा पार हो गई ' –