0

我需要一些帮助来解决我正在为我们的库存管理工作的 Web 应用程序上的这个问题。那么让我来详细介绍一下:

  • 每个产品在宽度和高度(我们称它们为 sizeW 和 sizeH)和面积(只是两个维度的乘积)中都有一个尺寸维度

  • 每个产品都需要归类到一个尺寸类别,让我列出几个:50 x 100、80 x 150、100 x 170、150 x 200、......总共12个类别

  • 问题是每个产品都不是根据尺寸类别准确制作的,所以如果产品是 55 x 96 或 44 x 105,那么它将属于 50 x 100 类别。

我需要编写一个算法,可以将项目分类到相关类别中,但要考虑到各种大小的不规则性。我们不希望用户手动输入类别,因为我们希望减少数据输入时间,但如果算法提示错误或产品不符合标准类别,则用户可以接管并手动更改/添加类别.

如果你们能就这个问题提出想法,我将不胜感激,该应用程序是使用服务器端的 Rails 和客户端的 Javascript 构建的。如果解决方案是 Javascript 并让浏览器处理算法而不是在服务器上加载负载,我会更喜欢。

谢谢,

乌梅尔

4

3 回答 3

1

我会做这样的事情(寻找区域)。您还可以优化搜索,使其不是线性的。

var categories {
  names: ['50 x 100', '80 x 150', '100 x 170', '150 x 200'],
  areas: [5000, 12000, 17000, 30000],
  sizes: 4
}

function set_category(w, h) {
  var area = w * h;

  for(var i = 1; i < categories.sizes; i++) {
    var diff1 = 0, 
        diff2 = 0;

    if(area <= categories.areas[i]) {
      diff1 = categories.areas[i] - area;
      diff2 =  area - categories.areas[i-1];

      if(diff1 < diff2) return categories.names[i];
      return categories.names[i-1];
    }
  }
}
于 2013-02-23T23:17:48.297 回答
1

如果类别的纵横比都相似,我会选择 Kaeros 给出的答案。但是,如果您的类别具有不同的纵横比,例如一个类别的尺寸为 80 x 80,而另一个类别的尺寸为 20 x 320,您可能会得到一些非常奇怪的错误分类。

在第二种情况下,我将使用每个类别与产品尺寸之间的最小二乘距离,或者对于产品 P,使用最小化的类别 C:

(C.height - P.height) 2 + (C.width - P.width) 2

只有 12 种可能性来计算它根本不需要任何时间,尽管 Kaeros 的答案具有能够预先计算区域的优势。

于 2013-02-23T23:48:24.173 回答
0

你的问题是分类。您可以使用多种分类方法来解决此问题。您的选择将取决于特征数量和样本数量。您应该找到 Ruby 的机器学习算法的实现。您可以使用http://www.ruby-doc.org/stdlib-1.9.2/libdoc/matrix/rdoc/Matrix.html来实现这些,或者您可以找到现有的 Ruby 机器学习库,例如 Python 的sci-kit

于 2013-02-23T23:16:40.043 回答