3

我正在玩一个视频游戏,我想制作一个程序来计算实现固定 6 项目目标的全局最优构建/升级路径。

需要考虑时间、成本、库存限制和有效性(短期/中期/长期)评级。识别局部有效性峰值也受到欢迎,但可选。我不知道如何对这个问题进行分类,但我猜它是一种图形搜索。多个标准正在优化的事实让我感到困惑。

问题详情:

  • 您的包中有 6 个免费插槽可存放物品。
  • 项目分为两类:基本项目和复合项目。
  • 复合项目是从基本项目和其他复合项目构建/合并的。
  • 如果您有足够的金币,您可以一次性购买复合物品及其缺失的子组件,只需使用 1 个库存槽。
  • 各种复合项目的构建路径是固定的,许多基本组件包含在多个配方中。
  • 随着时间的推移,黄金以固定的速度赚取,也以小的非确定性爆发的形式赚取。
  • 时间是有界的:它以固定的刻度(秒)递增,最大值:2400。
  • 存在不超过 50 个项目,可能更少。

所以,想想问题...

首先解决黄金/时间问题

我们可以忽略不确定性方面,也可以使用一些统计平均值。让我们让生活变得轻松,暂时忽略它。由于黄金和时间现在在我们的简化版本中直接相关,因此它们可以在逻辑上合并。

可行路径的组合扩展

可以从 6 个目标项目中的每一个构建自上而下的图表,指示它们各自的升级层次结构。可以连接在各个层次结构之间共享的组件,从而做出分支决策。组件之间的边缘可以通过它们的成本来加权。在这一点上,这听起来像是一个最短路径问题,除了有多个并行和重叠的目标。

现在的问题是:库存限制如何影响这一点?

库存/成本约束添加了一个上下文,它既禁用(没有空闲槽;没有足够的金币),又启用(两个项目合并释放槽)各种分支决策,基于先前的选择和经过的时间。此外,在某些情况下,节省黄金并在非固定时期内无所事事的可能性可能是最佳的。

如何扩展所有可行的可能性?是否必须在每个给定步骤完成?总共有多少种组合?这是否属于拓扑组合学?

更新:

问:如何扩展所有可行的可能性?

更新 2:

问:总共有多少种组合?

  • 好像是要算的,没有数值公式。

  • 算法 3.2,第 150 页,“关于计算有向无环图的拓扑序数”,作者:Wing-Nig Li、Zhichun Xiao、Gordon Beavers

伪代码:

f(g) | vertex_count(g) == 1 = 1
f(g)                        = ∑ {f(g \ {v}) for all v ∈ deg0set}

deg0set = {vertex_in_degree(g,x) == 0 for all x ∈ vertices(g)} 

数学代码:

f[g_/; Length[VertexList[g]] == 1] := 1
f[g_] := With[
    {deg0set = Select[VertexList[g], VertexInDegree[g,#] == 0&]},
    Sum[f[VertexDelete[g,v]], {v,deg0set}]
]

评级有效性

如果上述扩展产生的可能性少于几十亿,我们可以使用 OpenCL/CUDA 进行穷举搜索。我不确定还有哪些其他选项可用,因为大多数图形搜索似乎只是解决一个标准。

4

1 回答 1

0

您需要向下走以在每个结束阶段和元素处建立最大值,(即在向下走时添加您的指标(dps 或其他),修剪任何需要您拥有更多插槽的组合。然后从最好的可能结束选项集,(应该相当稀疏),你应该能够将它限制为只有最好的复合选项),并且总是以一种让你达到最大值的方式移动。然后在每个选项上设置一个等于damage的值,

鉴于 dps 或任何基本和初步复合项目可能低于最终可能的复合项目,这将自然地在最后阶段对有效性进行加权,因此您可能需要调整或设置一个最小值。

一旦你有了这些,你就可以计算出你的选择的黄金成本,并决定如何更快地完成任务。

然后你可以通过并确定黄金成本。您需要决定是否要等待并赚钱。如果不是,那么你想测量dps的增加率作为时间的函数。如果是这样,我希望在不玩之后购买物品会更便宜,总的来说。

您将不得不使用您的数据并做出一些价值判断。

于 2013-09-15T10:26:11.063 回答