建议在市场上买卖哪些商品的优化算法/方法?

计算科学 优化
2021-12-06 20:41:12

一个玩具问题可能是最好的解释。假设我们有 100 个人,每个人都有 4 种独特的项目(为了简化事情,假设每个人都有相同的四种项目)。对于这些人中的每一个,他们需要的每种物品类型的数量都不同。

所以对于第一个人,他们有项目 {i1 = 10, i2 = 4, i3 = 6, i4 = 20},他们需要 {n1 = 6, n2 = 7, n3 = 8, n4 = 15} 分别用于这 4 个项目.

对于第二个人,他们有 {i1 = 0, i2 = 5, i3 = 5, i4 = 10},他们分别需要 {n1 = 0, n2 = 6, n3 = 10, n4 = 14}。

对于第三个人,他们有 {i1 = 50, i2 = 6, i3 = 6, i4 = 5},他们分别需要 {n1 = 55, n2 = 2, n3 = 5, n4 = 5}。

依此类推,直到 100 人。

我正在寻找一种算法来建议应该在这 100 个人之间交易哪些商品,以便达到全局最优状态(总体需求得到最优满足)。算法将进行的一项(许多)交易是建议第 1 个人向第 3 个人出售 4 件商品 1。这样,在全球范围内,需求得到更好的满足。

软约束是我们最小化交易总数(不能无限次交易)。你知道这种优化问题的名称吗?您可以推荐任何算法名称吗?更好的是,是否有任何开源库来处理您所知道的这种类型的优化?

谢谢!

1个回答

这无疑是一个最优运输问题。

最佳运输 又名。运输理论主要讲的是如何以最小的成本配置资源。

您可以搜索相关书籍、博客或直接从wiki 页面开始。

此外,该问题是线性规划问题,或者更具体地说是整数规划问题,因为所需的运输计划是整数。此外,如果目标是最小化事务总数,则问题可以降级为0-1 二进制整数规划问题。

此外,由于不同的物品不能交换,一旦建立了一个物品的运输算法,你的整个问题将通过将算法单独应用于每种物品来解决

还要提到一件事,“二进制编程问题”是Karp 的 21 个 NP 完全问题之一,这意味着暴力搜索和启发式方法可能是我们目前获得最佳解决方案的最佳方法。

Lingo 是一款具有类 matlab 命令行界面的优化求解软件,可用于搜索接近最优的可行解。