使用 cupy 进行线性规划
Linear programming with cupy
我正在尝试使用 cupy 提高代码效率。但是我找不到在 cupy 中进行线性规划的方法。这个问题来自以下几个部分:
N = hull_points.shape[0]
c = ones(N)
A_eq = concatenate((hull_points, ones((N, 1))),
1).T # rows are x, y, z, 1
b_eq = concatenate((pnt, (1,)))
result = linprog(c, A_eq=A_eq, b_eq=b_eq)
有什么可以直接使用的吗?或者唯一的出路是基于cupy实现一个线性规划包?
看过论文提出用GPU做线性规划。他们中的一些人甚至报告说有显着改善。
但据我所知,他们将单纯形法的 GPU 实现与顺序实现进行了比较,而不是与 Gurobi、Cplex 甚至 CLP 进行比较。
而且我从未听说过基于 GPU 的高效 LP 求解器可以击败优秀的 LP 求解器。
像 Gurobi 这样的旗手不支持 GPU。
而且我知道有些人怀疑 GPU 实际上可以帮助大规模 LP。
- 大型LP是稀疏的,GPU不好做稀疏
- 一般来说,优化主要是一个顺序过程(现代 LP 求解器中的并行非常具体,无法利用 GPU)。
如果您想尝试实现您自己的基于 GPU 的 LP 求解器,我鼓励您尝试一下。无论你得到什么,都会是一次很棒的体验。
但是,如果您只需要加快求解过程,那就换一个求解器。来自 SciPy 的 Linprog 可能是制作原型的不错选择。但是 GLPK 或 CLP/CBC 会给你更快的速度。您可以通过 Pyomo 或 PULP 调用它们。
我正在尝试使用 cupy 提高代码效率。但是我找不到在 cupy 中进行线性规划的方法。这个问题来自以下几个部分:
N = hull_points.shape[0]
c = ones(N)
A_eq = concatenate((hull_points, ones((N, 1))),
1).T # rows are x, y, z, 1
b_eq = concatenate((pnt, (1,)))
result = linprog(c, A_eq=A_eq, b_eq=b_eq)
有什么可以直接使用的吗?或者唯一的出路是基于cupy实现一个线性规划包?
看过论文提出用GPU做线性规划。他们中的一些人甚至报告说有显着改善。 但据我所知,他们将单纯形法的 GPU 实现与顺序实现进行了比较,而不是与 Gurobi、Cplex 甚至 CLP 进行比较。 而且我从未听说过基于 GPU 的高效 LP 求解器可以击败优秀的 LP 求解器。 像 Gurobi 这样的旗手不支持 GPU。 而且我知道有些人怀疑 GPU 实际上可以帮助大规模 LP。
- 大型LP是稀疏的,GPU不好做稀疏
- 一般来说,优化主要是一个顺序过程(现代 LP 求解器中的并行非常具体,无法利用 GPU)。
如果您想尝试实现您自己的基于 GPU 的 LP 求解器,我鼓励您尝试一下。无论你得到什么,都会是一次很棒的体验。
但是,如果您只需要加快求解过程,那就换一个求解器。来自 SciPy 的 Linprog 可能是制作原型的不错选择。但是 GLPK 或 CLP/CBC 会给你更快的速度。您可以通过 Pyomo 或 PULP 调用它们。