我对Python非常陌生,在使用scipy.optimize公司. 我举了一个简单的例子来说明我想做什么。我的目标是确定最低采购量的项目,也最小化库存。在
我购买的所有东西都被分成两个产品——25%进入产品A,75%进入产品B。一个产品A的单位尺寸为100,而产品B的单位尺寸为300。我还有一个最低购买量100,最高购买量2000。在
下面的代码是我的目标函数的设置。在
import math
from scipy.optimize import minimize
unitsize = [100, 300]
proportion = [0.25, 0.75]
minpurchase = 100
maxpurchase = 2000
def stock (purchase):
test = []
for i in xrange(len(unitsize)):
product_purchase = purchase * proportion[i]
units = math.floor(product_purchase / unitsize[i])
y = product_purchase - (units * unitsize[i])
test.append(y)
z = sum(test)
return z
我已经测试了stock函数,它似乎可以正常工作。例如,当我调用stock(500)、stock(400)和stock(300)时,它分别正确地返回100、0和300。在
然后,我试着按照下面的方法来实现最小化,并根据最小和最大购买量进行限制。在
然而,当我以一个最初的猜测为零开始,它返回的结果是100,我认为这是一个错误的结果,因为它将导致100个股票和没有完整的单位。我希望结果是400(库存为零)。同样的问题也会发生,例如,从最初的猜测100开始。在
^{pr2}$当我开始猜测500时,返回的结果是正确的400。然而,当我从1900开始时,它也会返回1600作为结果,因为那时股票也是零。在
几个问题:
在试图解决问题2时,我考虑过将一个testvalues数组传递给下面的初始猜测,但它返回“IndexError:too many index for array”。在
你知道我做错什么了吗?在
testvalues = [1000,2000]
for j in range(len(testvalues)):
print minimize(lambda x: stock(x[0]), testvalues[j],
method='COBYLA',
constraints = cons,
options={'maxiter':10000})
[...]
IndexError: too many indices for array
任何帮助和建议非常感谢,我一直在努力让这个工作一整天。在
出现此错误是因为COBYLA方法不处理边界。只有BFGS、L-BFGS-B和SLSQP方法可以。参见: documentation link
相关问题 更多 >
编程相关推荐