交易物品优化算法

问题描述

当您想要出售或购买某物时,基本上有两种选择:使用金钱或将其与其他物品进行交易。这发生在现实生活中,也发生在拥有交易系统(公开市场)的游戏中。

我的问题是:是否有一种最佳算法能够接收市场上所有可用的交易并返回最佳的最佳交易序列以到达项目 x,从而最大限度地减少总成本?

我举个例子: 假设在市场上我们有这两张桌子,一张给想要交易/出售东西的人,一张给想要买东西的人:

卖家:

我有的东西 我想要的东西 (或)我想要的价格
项目 A - 140
项目 A - 160
项目 B - 50
项目 C 项目 A + 项目 B 220
项目 D 项目 C 240
项目 E 项目 A + 项目 D 360
项目 X 项目 E 360

买家:

我想要的东西 我要付出的代价
项目 A 150
项目 B 70

它必须考虑以下一些情况:

  • 仅使用金钱即可到达物品 x;
  • 使用金钱和交易到达物品 x;
  • 仅使用交易到达物品 x;
  • 在进行最终交易之前考虑几笔小额交易;
  • 市场是动态的,价格并不是真正“固定”的。这意味着一些卖家/买家肯定会以低于或高于平均水平的价格买入/卖出。算法应该在这种“错位”的交易中茁壮成长。

不知道能不能说清楚。我有工程和编程背景,并试图找到可以解决这个问题的东西,但找不到太多。我想这与贪婪算法有关,但老实说,我不知道有什么东西已经被证明对这个问题有好处,或者神经网络是否可以在这里为我做些什么。

我知道这个问题一点也不小。事实上,有很多人以此为生,以买卖商品为生。但他们主要依靠自己的专业知识和对市场上出现的机会的挖掘。


我最初认为我可以将这个问题转化为“旅行商”类型的问题,其中城市是物品,城市之间的距离是价格,我会使用一些已经建立的算法来解决这个问题就可以了。但我不知道它是否有效(如果其他人已经尝试过了)。

解决方法

您可以使用用于加权有向图的 single source shortest path 算法解决此问题,该算法允许负权边,例如 Bellman–Ford algorithm

图中的节点是物品的集合,源节点是你开始的物品的集合(可能是空集),边要么是购买物品(边权重是购买价格),要么是出售物品item(边权重为负的销售价格),或交易一组项目(边权重为零)。

Bellman-Ford 算法将找到路径,以最小化成本(即最大化您剩余的金额)到您最终可能获得的每组物品。然后,您可以简单地采用路径的最低成本到达包含您希望获得的项目的任何集合。

您的经济可能允许套利,即某些交易、购买和销售序列,通过这些顺序,您可以得到与开始时相同的项目,但获得更多的钱。 (在您的示例中,您可以以 140 美元的价格购买商品 A,以 150 美元的价格出售。)在这种情况下,图表包含负权重循环,因此任何商品都没有“最佳”价格,因为您可以利用套利机会利润无限。如果存在负权重循环,Bellman-Ford 算法将检测并报告它,而不是寻找最短路径。