使用PHP ML机器学习库,基于单一输入值生成解决方案

问题:

我有一扇门,高2000毫米。

我有两种类型的板材来构建这扇门:

615毫米的标准板材和495毫米的标准板材。

对于上述高度,我的最优解决方案应该是:

1个615毫米的标准板材

2个495毫米的标准板材

1个495毫米的板材,从中切割100毫米以达到2000毫米的高度。这里最好的解决方案是从495毫米的板材上切割,而不是从615毫米的板材上切割,因为这样会浪费太多材料。

示例:1845毫米高度 –

最优解决方案是:

3个615毫米的板材(3 x 615毫米 = 1845毫米)。

另一个示例:

3000毫米高度 –

最优解决方案:

4个615毫米的板材

1个540毫米的板材(默认615毫米,从中切割75毫米以填补3000毫米的高度)

我的问题是,我能否使用PHP-ML库中的任何算法来训练并预测给定输入(在我的情况下是高度)的解决方案?如果答案是肯定的,哪种算法最适合我的情况?

分类

SVC或k-最近邻或朴素贝叶斯

请查看我附件的图片。你会明白我想表达的意思。

我想使用那个库,以便它可以为给定高度返回多个解决方案,以及一个最优解决方案。

enter image description here


回答:

你的具体任务可以很容易地通过暴力破解来解决,在线检查:https://3v4l.org/dQmdb

这里是代码:

<?php// 示例:// 门           2000    1845    3000// 615毫米板材    1       3       5// 495毫米板材    3       0       0// 板材损耗     100     0       75function calcOptimalPanels ($doorHeight) {  $bigHeight = 615;  $smallHeight = 495;  $bigFit = floor($doorHeight / $bigHeight);  $smallFit = floor($doorHeight / $smallHeight);  $options = [];  for ($big = 0; $big <= $bigFit; $big++) {    for ($small = 0; $small <= $smallFit; $small++) {      $waste = $bigHeight * $big + $smallHeight * $small - $doorHeight;      if ($waste === 0) // 获取第一个无浪费的组合        return getFormattedResult($big, $small, $waste);      if ($waste > 0)  // 忽略小于门高度的组合        continue;      $options[$waste] = getFormattedResult($big, $small, $waste);    }  }  $minWaste = min(array_keys($options));  return $options[$minWaste];}function getFormattedResult($big, $small, $waste) {  return ['615mm' => $big, '495mm' => $small, 'waste' => $waste];}echo '2000: ' . json_encode(calcOptimalPanels(2000)) . "\n";echo '1845: ' . json_encode(calcOptimalPanels(1845)) . "\n";echo '2340: ' . json_encode(calcOptimalPanels(1845 + 495)) . "\n";echo '3000: ' . json_encode(calcOptimalPanels(3000)) . "\n";// 结果:// 2000: {"615mm":1,"495mm":3,"waste":100}// 1845: {"615mm":3,"495mm":0,"waste":0}// 2340: {"615mm":3,"495mm":1,"waste":0}// 3000: {"615mm":1,"495mm":5,"waste":90}

我之前的回答是不正确的,但我将其保留作为我们喜欢过度复杂化事情的一个例子。


旧回答

这是一个经典的一维切割库存问题,可以表述为整数线性规划问题。

你应该知道这是一个NP完全问题

这基本上意味着没有办法保证在不检查所有可能的解决方案的情况下找到最佳解决方案。这并不是说通过以下算法之一达到的解决方案不是最优的,它可能是最优的。

考虑到这些信息,你必须自己实现一个算法:https://neos-guide.org/content/cutting-stock-problem

和视频:https://www.youtube.com/watch?v=NoiPrt4OsQA


如果你迫切希望利用机器学习,那么请查看遗传算法:https://github.com/ffsantos92/2d-cutting-stock-problem

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注