Optimization 组合优化:带库存约束的多升级路径

Optimization 组合优化:带库存约束的多升级路径,optimization,graph,combinatorics,Optimization,Graph,Combinatorics,我在玩一个电子游戏,我想制作一个程序,计算出朝向固定6项目标的全局最优构建/升级路径 应考虑时间、成本、库存限制和有效性(短期/中期/长期)评级。也欢迎识别有效性的局部峰值,但这是可选的。我不知道如何对这个问题进行分类,但我猜这是一种图形搜索。多个标准正在优化的事实让我感到困惑 问题详情: 您的包中有6个免费插槽可放置物品 有两类项目:基本项目和复合项目 复合项是从基本项和其他复合项生成/合并的 如果你有足够的黄金,你可以一次只使用一个库存槽就可以买到一个组合商品及其缺失的子组件 各种复合项的

我在玩一个电子游戏,我想制作一个程序,计算出朝向固定6项目标的全局最优构建/升级路径

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

问题详情:

  • 您的包中有6个免费插槽可放置物品
  • 有两类项目:基本项目和复合项目
  • 复合项是从基本项和其他复合项生成/合并的
  • 如果你有足够的黄金,你可以一次只使用一个库存槽就可以买到一个组合商品及其缺失的子组件
  • 各种复合项的构建路径是固定的,并且许多基本组件都包含在多个配方中
  • 随着时间的推移,黄金会以固定的价格获得,也会以不确定的小规模爆发获得
  • 时间是有界的:它以固定的刻度(秒)递增,最大值为2400
  • 存在的项目不超过50个,可能更少
所以,想想这个问题

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

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

现在的问题是:库存约束如何发挥作用

库存/成本约束,添加一个上下文,根据以前的选择和经过的时间,禁用(没有空闲插槽;没有足够的黄金)和启用(两个项目合并释放插槽)各种分支决策。此外,在某些情况下,在非固定期限内不做任何事情而储蓄黄金的可能性也是最佳的

如何扩展所有可行的可能性?是否必须在每一步都进行?总共有多少个组合?这属于拓扑组合学吗?

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

  • 项目生成路径是一个依赖关系图。依赖项的正确计算顺序由图的拓扑顺序给出。一个图可能有多个有效的求值顺序

更新2: 问:总共有多少种组合

  • 似乎它必须被计算,并且没有数字公式

  • Algorithim 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)} 
Mathematica代码:

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进行彻底搜索。我不确定还有什么其他选项可用,因为大多数图形搜索内容似乎只解决一个标准。

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

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

一旦你有了这些,你就可以计算出你的选择的黄金成本,并决定如何权衡如何更快地实现目标

然后你就可以计算并确定黄金成本。你需要决定你是否想等待并赚取收入。如果不是,那么您需要测量dps随时间的变化率。如果是这样的话,我希望在不玩之后买这些东西会更便宜


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

现在,语言在游戏和实际cs问题之间大约是50:50。你能不能把它形式化,抽象出主要的功能,或者提到哪个游戏会有帮助?如果您看到配方,它会显示它是从哪些项目构建的。因为你有6个库存,你可以买2把长剑,拳击手手套。然后将两把长剑合并成一个残暴者等。所有物品合并成一个不能进一步升级的物品。你希望最终得到6件不能再升级的物品,但在整个过程中遵循一条成本效益高的路径,最大化你的伤害输出。这很可能是一个安全的领域。隐马尔可夫模型。