首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从一组项目中选择最有益的项目组合?

如何从一组项目中选择最有益的项目组合?
EN

Stack Overflow用户
提问于 2010-04-24 20:11:54
回答 2查看 250关注 0票数 6

我正在设计一款游戏,AI需要确定哪种装甲组合会给角色带来最好的整体属性奖励。每个角色将有大约10个属性,其中只有3-4个是重要的,而在这些重要的属性中,有几个会比其他的更重要。

护甲也会增加1或所有的属性。例如,一件衬衫可以为角色提供+4的int和+2的耐力,而同时,一条裤子可能只有+7的强度。

因此,假设一个角色有一个健康的装甲选择(5条裤子,5双手套,等等)。我们已经指定Int和感知力是这个角色最重要的属性。我如何编写一个算法来确定装甲和物品的哪一种组合会产生任何给定属性中的最高值(比如本例中的Int和Perception)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-24 20:15:35

针对一种统计数据

这很简单。首先,有几个假设:

  • 你没有提到这一点,但是大概一个人在一个特定的位置最多只能穿一种护甲。也就是说,你不能穿两条裤子,或者两条shirts.
  • Presumably,也是如此,一件装备的选择不会影响或与其他装备冲突(除了同一插槽中不能有多件衣服的约束)。也就是说,如果你穿裤子,这绝不会阻止你穿衬衫。但请注意,更微妙的是,我们假设你穿两件相关的衣服不会产生某种协同效应。

假设你想要以统计量X为目标,那么算法如下:

  • 按插槽对所有项目进行分组。
  • 在每个组中,按X的提升程度对该组中的潜在项目进行降序排序。
  • 挑选每组中的第一件衣服并穿上它。
  • 所选的一组物品是最优的装入。

证明:获得更高X属性的唯一方法是,如果有一个项目A提供了比其组中的其他项目更多的X。但是我们已经按降序对每个组中的所有项目进行了排序,所以不可能有这样的A

如果违反了假设,会发生什么?

  • 如果假设一不正确--也就是说,你可以在每个插槽中穿戴多件物品--那么不是从每组中挑选第一件物品,而是从每组中挑选前Q(s)件物品,其中Q(s)是可以放在插槽s中的物品的数量。
  • 如果假设二不为真--即物品确实相互影响--那么我们没有足够的信息来解决问题。我们需要明确地知道项目之间是如何相互影响的,或者被迫通过暴力尝试所有可能的项目组合,看看哪种组合的整体效果最好。--

针对N个统计数据

如果您想同时针对多个统计数据,则需要一种方法来判断某件事有多“好”。这称为适应度函数。您需要确定N个统计数据相对于其他统计数据的重要性。例如,你可能决定感知的每+1值等于10分,而智能的每+1值只值6分。现在,您有了一种方法来评估项目之间的相对“好坏”。

一旦你做到了这一点,就不是针对X进行优化,而是针对F进行优化,即适应度函数。然后,对于一个统计数据,该过程与上面的过程相同。

票数 7
EN

Stack Overflow用户

发布于 2010-04-24 20:32:22

如果不限制每个类别的项目数量,则以下内容将适用于多个统计和多个项目。

数据准备:

  • 根据您确定的重要程度为每个统计数据(Int、Perception)赋予一个权重

将其存储为一维数组statImportance

  • Give每个项目-统计量组合的值,根据所述项目对玩家的所述统计量的提升程度

将其存储为2维数组itemStatBoost

算法:

在伪代码中。这里假设itemScore是一个可排序的映射,使用Item作为键,数值作为值,并将值初始化为0。

假设sort方法能够按值(而不是键)对此映射进行排序。

代码语言:javascript
运行
复制
//Score each item and rank them
for each statistic as S
  for each item as I
    score = itemScore.get(I) + (statImportance[S] * itemStatBoost[I,S])
    itemScore.put(I, score)
sort(itemScore)

//Decide which items to use
maxEquippableItems = 10 //use the appropriate value
selectedItems = new array[maxEquippableItems]
for 0 <= idx < maxEquippableItems
  selectedItems[idx] = itemScore.getByIndex(idx)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2704394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档