掠夺者困境算法

时间:2013-01-14 13:02:02

标签: algorithm language-agnostic

我正在使用更早的here之后更新详细信息。

问题: 这个问题包括一个掠夺者,他必须前往不同的城市,分布在地图上。起始位置是已知的。每个城市都有与之相关的固定战利品。掠夺者的目的是穿越各种地形。从地形的本质来说,我的意思是每对城市之间的旅行成本各不相同。他必须最大化获得的战利品。


我们做了什么: 我们已经生成了一个邻接矩阵(每个节点的booty-path成本),然后使用启发式分析。它给出了一些合理的输出。

现在,问题现在是每个城市都有少量或多辆车,可以购买(通过支付)并可用于旅行。实际上车辆的作用是降低路径成本。一旦购买车辆,它仍然是下一辆车购买的时间。最重要的是决定是否购买车辆以及如何购买。

此时我需要帮助。如何将车辆的概念融入我们已有的东西?此外,任何可能有助于我们最大化利润的进一步想法。如果需要,我可以发布代码。谢谢!

2 个答案:

答案 0 :(得分:4)

实现这一目标的一种方法是使有向边缘承载车辆的成本,以降低成本的重复图形。你甚至可以做到这一点,如果你愿意,减少比一个百分比更精细。

缺点是,这可能会大大增加图表的大小(与您拥有不同车辆的许多副本,加上它们之间的链接),如果您的启发式不是最佳的,您可能必须修改它它积极地考虑新的优势。

答案 1 :(得分:1)

听起来好像beam search会适合这个问题。波束搜索使用启发式函数 H 和参数 k ,其工作方式如下:

  1. S 集初始化为初始游戏位置。

  2. T 设置为空集。

  3. 对于 S 中的每个游戏位置,在掠夺者一次移动后,生成 S 的所有可能后继位置。 (移动要抢劫,购买车辆,移动到相邻的城市,或者其他任何掠夺者可以做的事情。)将每个这样的后继位置添加到集合 T

  4. 对于 T 中的每个位置 p ,请评估 H p )以获取启发式函数ħ。 (启发式功能可以考虑战利品的数量,车辆的拥有量,剩余的无人居住的城市数量,以及您认为相关且易于计算的任何其他内容。)

  5. 如果您的搜索时间已用完,请在 T 中返回得分最高的位置。

  6. 否则,将 S 设置为 T 中得分最高的 k 位置,然后返回步骤2.

  7. 如果您使用 k 元素以heap的形式存储 T ,该算法效果很好。