【发布时间】:2015-11-22 00:59:18
【问题描述】:
我正在尝试使用 Python 的 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 是一个参数。 xs 的总和必须为 1。并且每个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))
【问题讨论】:
-
如果您更具体地了解“大量尝试”需要说明您的问题的目标,这可能会有所帮助。
-
您的代码对我有用。你遇到了什么问题?我得到最佳
x_opt: array([ 0.29465573, 0.33480638, 0.37053789])。我只需要更改bounds应该包含len(initial_x)或len(y),因为您的代码中没有定义x。 -
@askewchan ,可能是数值稳定性问题。在我的 Mac 上,我收到了
nan``nan``nan、'Iteration limit exceeded'
标签: python optimization scipy mathematical-optimization