用于对数字求和的算法求和总和并遵守python中的标准

时间:2011-02-24 15:01:08

标签: python algorithm

我正在尝试为动物饲养进行饲料优化计算,但我是蟒蛇编码方面的新手。

实际上我试图实现的是通过k或更少的组来计算n成分的较便宜的组合,以提供足够的A和B标准。

我的问题是,当成分编号开始上升时,python在计算中挂起。那么有没有办法让python使用更多的内存或更好的算法或已经可用的包进行这些计算。我在网上搜索了答案,但也许这个特殊的问题有一个我不知道的数学名称。

我现在在做什么:

  1. 创建成分矩阵:每个 成分有一个名称,然后 P,A,B,C,D ......其中P是价格 和A,B,C,...是的值 不同的营养元素
  2. 创建限制矩阵:每个元素都有总混合的最小值和最大值。
  3. 创建目标向量:我现在想要获得的是A = X向量和B = Y向量,但我想在将来指定C,D等。
  4. 然后,我计算所有可能的成分组合,总计(通常为1000)和一组k成分。
  5. 删除不符合限制矩阵的组合以获得可用的组合矩阵
  6. 将组分基质乘以组合矩阵以得到最终的组合物基质
  7. 删除合成矩阵中不符合标准A和B的目标向量的所有值。
  8. 按价格对结果列表进行排序并给出结果。
  9. 我正在使用Numpy进行大部分操作。

    这种方法(据我所知)不能是简单的线性代数问题,因为有时候没有完美的解决方案,这就是为什么首先采用数值方法的原因。

    由于

2 个答案:

答案 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)