我正在尝试为动物饲养进行饲料优化计算,但我是蟒蛇编码方面的新手。
实际上我试图实现的是通过k或更少的组来计算n成分的较便宜的组合,以提供足够的A和B标准。
我的问题是,当成分编号开始上升时,python在计算中挂起。那么有没有办法让python使用更多的内存或更好的算法或已经可用的包进行这些计算。我在网上搜索了答案,但也许这个特殊的问题有一个我不知道的数学名称。
我现在在做什么:
我正在使用Numpy进行大部分操作。
这种方法(据我所知)不能是简单的线性代数问题,因为有时候没有完美的解决方案,这就是为什么首先采用数值方法的原因。
由于
答案 0 :(得分:1)
我认为你应该看看scipy.optimize - 它会非常愉快地处理numpy数组并且通常非常快。请参阅参考http://docs.scipy.org/doc/scipy-0.8.x/reference/tutorial/optimize.html
如果您有一个输入向量 A 指定每种成分的数量,并且成分矩阵 I 指定每种成分的价格和营养价值,那么 AI 应该为您提供给定混合物的总价格和营养价值。
您现在需要一个评估函数,该函数将 A (将其乘以最低可能常数,使所有营养素值至少达到其最低要求值)并返回总价格加上陡峭的罚款对于任何超过最大值的营养素,加上对大量成分的较低惩罚。然后优化器使用 A (同时保持所有值> = 0)以最小化评估函数的结果。
答案 1 :(得分:1)
这绝对是一个线性编程问题 - 它通常被称为饮食问题。正如Hugh Bothwell所说,看看scipy.optimize。以下内容可以帮助您入门,
from scipy import array,dot
from scipy.optimize import fmin_slsqp as fmin
c = array([173.0,184.0,167.0]) # cost or prices
b = array([0.1,0.1,0.1]) # lower nutrient bounds
A = array([[ 0.39, 0.09, 0.77], # nutrient composition
[ 0.75, 0.32, 0.15],
[ 0.32, 0.76, 0.65]])
x = array([0.5,0.5,0.5]) # initial guess
def obj(x):
# I'm the objective function
return dot(c,x)
def con(x):
# I'm the inequality constraints
return dot(A,x) - b
print fmin(obj,x,f_ieqcons=con)