We consider the problem of assigning or allocating resources to a set of jobs. We consider the case when the resources are fungible, that is, the job can be done with any mix of the resources, but with different efficiencies. In our formulation we maximize a total utility subject to a given limit on the resource usage, which is a convex optimization problem and so is tractable. In this paper we develop a custom, parallelizable algorithm for solving the resource allocation problem that scales to large problems, with millions of jobs. Our algorithm is based on the dual problem, in which the dual variables associated with the resource usage limit can be interpreted as resource prices. Our method updates the resource prices in each iteration, ultimately discovering the optimal resource prices, from which an optimal allocation is obtained. We provide an open-source implementation of our method, which can solve problems with millions of jobs in a few seconds on CPU, and under a second on a GPU; our software can solve smaller problems in milliseconds. On large problems, our implementation is up to three orders of magnitude faster than a commerical solver for convex optimization.
翻译:我们考虑将资源分配或分配到一组工作的问题。 当资源可以互换, 也就是说, 工作可以通过资源的任何组合来完成, 但效率不同。 在我们的配方中, 我们最大限度地实现总效用, 前提是对资源使用有一定的限制, 这是一种螺旋优化问题, 因而是可移植的。 在本文中, 我们开发了一种定制的、 可平行的算法, 以解决资源分配问题, 以百万个工作规模解决大问题。 我们的算法基于双重问题, 即与资源使用限制相关的双重变量可以被解释为资源价格。 我们的方法更新了每种循环的资源价格, 最终发现最佳资源价格, 并从中获取最佳分配。 我们提供一种方法的开源实施, 可以在CPU上几秒钟内解决数以百万计的工作问题, 而在GPU下, 我们的软件可以在毫秒内解决小问题。 关于大问题, 我们的算法可以高达三个数量级, 比 comvelic 求解器更快。