Java中的线性规划

Java中的线性规划,java,algorithm,linear-algebra,linear-programming,Java,Algorithm,Linear Algebra,Linear Programming,我用Excel做了一些线性编程,我发现了一些Java库可以帮上忙,但我不确定线性编程是正确的解决方案,或者可用的库是否可以处理我正在尝试做的事情 我有许多存储桶,对于这个程序的每次运行都是不同的。对于这次跑步,假设我有8个桶。我还有几件东西。对于这次运行,假设我有30个对象。每个物体都有一个重量,我知道。我希望将对象加载到bucket中,使每个bucket中的对象之和尽可能接近相等 我需要确定应该将哪些对象放置在哪些桶中以创建此结果 从我在JoOptimizer和SCPSolver的文档中看到的

我用Excel做了一些线性编程,我发现了一些Java库可以帮上忙,但我不确定线性编程是正确的解决方案,或者可用的库是否可以处理我正在尝试做的事情

我有许多存储桶,对于这个程序的每次运行都是不同的。对于这次跑步,假设我有8个桶。我还有几件东西。对于这次运行,假设我有30个对象。每个物体都有一个重量,我知道。我希望将对象加载到bucket中,使每个bucket中的对象之和尽可能接近相等

我需要确定应该将哪些对象放置在哪些桶中以创建此结果

从我在JoOptimizer和SCPSolver的文档中看到的情况来看,我很难将这个问题转化为一种有效的格式


我的第一个问题是如何在单个问题中表示桶和的最小变化。我想也许总和的标准差会起作用。如果我能得到相等的值,这是可行的,但如果不能,标准偏差似乎允许超过最小可能的变化。我也不知道这些库如何支持标准偏差。有没有更好的方法来解决这个问题

我也有一种感觉,我正在创造更多必要的约束。我为每个对象和桶的组合创建了一个约束。每个约束的值可以是0或1。1表示对象已放置在该桶中。然后,我有另一个约束,它对每个对象的所有桶求和,必须是1。这样可以确保对象仅放置在一个桶中。然后,我可以通过获取对象权重*bucket presence,并对结果求和,将每个bucket的对象总数相加。这似乎是一条比必要的更复杂的路线

这是解决这类问题的最佳方案吗?还有什么更好的办法


谢谢

“我的第一个问题是如何在单个问题中表示桶总和的最小变化。”这不是工具的问题,而是您的问题。在你能产生一个解决方案之前,你必须决定问题需要什么。这不是一个很好的线性规划公式,因为由于桶的对称性,线性松弛的质量会很差。如果你只把大约30个项目放入8个存储桶中,那么动态规划可能是一个更好的选择。我可能会通过创建一个大于所有存储桶和的辅助max变量,一个小于所有存储桶和的辅助min变量,并最小化max-min来制定最小变化。