我正在设计一款游戏,AI需要确定哪种装甲组合会给角色带来最好的整体属性奖励。每个角色将有大约10个属性,其中只有3-4个是重要的,而在这些重要的属性中,有几个会比其他的更重要。
护甲也会增加1或所有的属性。例如,一件衬衫可以为角色提供+4的int和+2的耐力,而同时,一条裤子可能只有+7的强度。
因此,假设一个角色有一个健康的装甲选择(5条裤子,5双手套,等等)。我们已经指定Int和感知力是这个角色最重要的属性。我如何编写一个算法来确定装甲和物品的哪一种组合会产生任何给定属性中的最高值(比如本例中的Int和Perception)?
发布于 2010-04-24 20:15:35
针对一种统计数据
这很简单。首先,有几个假设:
假设你想要以统计量X为目标,那么算法如下:
证明:获得更高X属性的唯一方法是,如果有一个项目A提供了比其组中的其他项目更多的X。但是我们已经按降序对每个组中的所有项目进行了排序,所以不可能有这样的A。
如果违反了假设,会发生什么?
针对N个统计数据
如果您想同时针对多个统计数据,则需要一种方法来判断某件事有多“好”。这称为适应度函数。您需要确定N个统计数据相对于其他统计数据的重要性。例如,你可能决定感知的每+1值等于10分,而智能的每+1值只值6分。现在,您有了一种方法来评估项目之间的相对“好坏”。
一旦你做到了这一点,就不是针对X进行优化,而是针对F进行优化,即适应度函数。然后,对于一个统计数据,该过程与上面的过程相同。
发布于 2010-04-24 20:32:22
如果不限制每个类别的项目数量,则以下内容将适用于多个统计和多个项目。
数据准备:
将其存储为一维数组statImportance
将其存储为2维数组itemStatBoost
算法:
在伪代码中。这里假设itemScore是一个可排序的映射,使用Item作为键,数值作为值,并将值初始化为0。
假设sort方法能够按值(而不是键)对此映射进行排序。
//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)https://stackoverflow.com/questions/2704394
复制相似问题