【问题标题】:What kind of algorithm is needed for this这需要什么样的算法
【发布时间】:2017-01-05 06:27:56
【问题描述】:

我被要求帮助一个朋友制作一个基本的材料计算器,但我不太确定这是什么算法,因为我只是随便写一些代码,而且我的数学技能可能远不及一些这里的人:) 这是我面临的问题......

我有多个盒子 (A),每个盒子都包含特定的材料子集 (B)。这些材料 (B) 用于构建项目 (C)。一旦材料 (B) 从盒子 (A) 中取出,它们必须被使用或丢弃。由于此算法必须涵盖多个项目,因此对正在构建的项目 (C) 的要求有时会发生变化。

盒子 (A) 始终具有相同的材料子集 (B),这永远不会改变。

示例: Boxtype 1 包含 (32 mat1, 30 mat2, 24 mat3, 0 mat4) Boxtype 2 包含(1 mat1、22 mat2、13 mat3、55 mat4) Boxtype 3 包含 (55 mat1, 21 mat2, 1 mat3, 7 mat4)

我需要构建项目 foo5 - 它需要 4,311 mat1、700 mat2、443 mat3、321 mat4。需要多少个盒子 (A) 才能以最少的浪费做到这一点。

我尝试过四处搜索,但不知道这是哪种算法,我的搜索运气不佳。

编辑:要回答一些问题,还要将我的回复附加到这篇文章中。 是的,您可以选择每个盒子的倍数。订单完成后剩下的所有东西都被扔掉。装有材料的盒子是有成本的,因此如果可能的话,在该级别进行优化会很好,但这是次要目标。抱歉,如果这不清楚,因为我对这部分有点陌生:)

【问题讨论】:

  • 我假设您可以选择每个盒子的倍数,即 10x 盒子 1、20x 盒子 2 等等?
  • 如果你只用了盒子1最后一半的材料怎么办,剩下的怎么办?浪费?
  • 不清楚优化的目标应该是什么。这些盒子会产生一些成本吗?如果没有,请随心所欲地获取材料并丢弃不需要的材料,因为它是免费的。
  • 他说的是“最少的浪费”,如果“当你拿一个盒子时,你需要什么就用什么,剩下的就扔掉”,那么我认为这意味着在构建项目后尽量减少剩余的材料。但是同样,这种事情需要在问题中明确指定。
  • 这听起来像是背包问题,但不是优化价值,而是最小化浪费……还有动态规划问题的感觉。

标签: algorithm


【解决方案1】:

整数规划。编写代码来构造一个整数程序,如

Minimize
 waste1 + waste2 + waste3 + waste4
Subject To
 32 box1 +  1 box2 + 55 box3 - waste1 = 4311
 30 box1 + 22 box2 + 21 box3 - waste2 =  700
 24 box1 + 13 box2 +  1 box3 - waste3 =  443
  0 box1 + 55 box2 +  7 box3 - waste4 =  321
Bounds
  0 <= box1
  0 <= box2
  0 <= box3
  0 <= waste1
  0 <= waste2
  0 <= waste3
  0 <= waste4
Integer
  box1 box2 box3
End

然后将其提供给您最喜欢的integer program solver。 (上面的程序是CPLEX格式的。)

【讨论】:

  • 非常感谢,这有助于我走上正确的研究道路。 :) 可能超出了我通常的休闲编码范围,但我可能会为了好玩而给它一个hack。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-11
  • 2019-07-08
  • 1970-01-01
  • 2020-07-12
  • 2013-04-01
  • 1970-01-01
相关资源
最近更新 更多