返回最佳数量的产品以“填充”一定大小的变量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了返回最佳数量的产品以“填充”一定大小的变量相关的知识,希望对你有一定的参考价值。
我有一个对象数组,其属性称为size。请参阅下面的示例数组。
var products = [{"name":"product 1", "size":25},{"name":"product 2", "size":15},{"name":"product 3", "size":3}]
我正在寻找一种算法,该算法可返回最佳数量的产品以“填充”一定的尺寸。“最优”是指它返回的产品量最少,剩余尺寸最小。
例如,假设目标尺寸为72。我想退货以下产品:2 x产品11 x产品23 x产品3
数组从最大到最小顺序排列。
我已经尝试了以下操作(这是我的代码的简化版本)。现在,我只是控制台记录结果。
var totalSize = 72
products.forEach(function (arrayItem) {
if(multiplierSize / arrayItem.size >= 1) {
var minTimes = Math.floor(totalSize / arrayItem.size);
var minAmount = (minTimes * arrayItem.size);
multiplierSize -= minAmount;
console.log(arrayItem.name + " x " + minTimes)
}
});
以上示例无法正确填写总大小,将导致以下结果:2 x产品11 x产品22 x产品3可以向我指出正确方向的任何帮助将不胜感激。
答案
您可以尝试针对js的线性优化库,例如https://www.npmjs.com/package/simple-simplex。
只需定义您的优化问题,例如Knapsack problem
以上是关于返回最佳数量的产品以“填充”一定大小的变量的主要内容,如果未能解决你的问题,请参考以下文章