问题描述
我正在通过将 Cplex 作为库导入 Python 来求解整数编程模型。假设优化问题具有以下形式的约束 (Ax = b)
:
x0+x1+x1+x3 = 1
此约束中 x 变量的索引为 0、1、1 和 3。它们存储在一个列表中:indices=[0,1,3]
这些变量的系数也存储在另一个列表coeff = [1,1]
Cplex 不能接受重复的索引,所以约束应该是这样的:
x0+2x1+x3 = 1
所以这两个列表应该像这样更新:
indices=[0,3]
coeff = [1,2,1]
我有这个函数,它将索引和系数作为两个参数,并为我提供操作列表:
def manipulate(indices,coeff):
u = np.unique(indices)
sums = { ui:np.sum([ coeff[c[0]] for c in np.argwhere(indices == ui) ]) for ui in u }
return list(sums.keys()),list(sums.values())
因此,manipulate([0,3],[1,1])
返回 ([0,1])
。
我的问题是当我有这么多变量时,列表的长度可能是一百万,而我有数百万个这样的约束。当我使用 cplex 解决我的优化问题时,程序变得非常慢。我跟踪了每个函数所花费的时间,并意识到我的代码中最耗时的部分是这些计算,我猜这是因为使用了 numpy。我需要让这个函数更有效率,希望能减少执行时间。你能和我分享关于如何改变函数操作的任何想法和建议吗?
非常感谢,
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)