正确的Dominion AI播放器的OOP结构

Joh*_*sky 10 c# oop artificial-intelligence

我一直在努力为流行的纸牌游戏Dominion(http://www.boardgamegeek.com/boardgame/36218/dominion)制作AI播放器.

如果你不熟悉这个游戏,它基本上是一个非常简化的魔术表演:The Gathering,那里有一个大型卡片库,里面有不同的规则.在游戏过程中,玩家购买这些卡片并将它们整合到他们的套牌中.

从机器学习的角度来看,我对这款游戏感兴趣 - 我想让机器人互相攻击,让他们玩数百万游戏,并尝试数据分析,让他们玩得更好.

我不确定如何将游戏规则(每张卡上印刷的逐字指令)与核心AI决策逻辑分开.

我开始的明显路径是为每张卡创建一个类,并将规则和AI内容放在同一个地方.这有点粗糙 - 但它似乎是阻力最小的道路.但也许每张卡最好支持某种接口,然后让AI组件对这些接口进行编码?

是否有"正确"的OOP设计?或几个合理的可能性?

Wel*_*bog 5

我倾向于将卡的行为封装为自己的类,从而可以轻松地为具有多种行为(即选择)的卡片提供支持.它还允许您编写可参数化的行为,并将它们与卡片混合搭配.

因此,卡片将包含卡片的成本,可以播放的时间,名称等等.它还包含卡片可以执行的行为列表.

这些行为被AI演员视为卡片的一部分.卡片上的另一个属性可以与成本一起称重.

实际使用卡行为的AI actor 需要能够解释行为,因此行为类可能需要包含一些提示,以便AI理解它,但不应该包含实际的AI逻辑本身.如果AI需要针对特定​​卡片的特定行为,请将此类事物写入AI演员,而不是卡片行为.

如果一个AI演员需要知道,例如,这种行为的预期胜利点回报为.2点/轮,这可能是行为的一部分,当选择要购买的牌时,该行为可以作为AI的暗示玩.

但实际上我不知道你是如何接近你的AI演员设计所以也许这没有意义.但我认为将行为视为卡片的属性而不是卡片本身的基本部分可能有所帮助.

它为您提供了将AI演员的默认操作(演员可以不需要卡片的事情)封装为行为的优势,因此您可以在没有任何特殊情况代码的情况下权衡这些操作与卡片操作.


Ste*_*owe 5

有几个"正确的"OOP设计,取决于你想要如何建模游戏过程和游戏代理的AI

就个人而言,我会在游戏中使用最少数量的牌进行有效回合,并将其作为Card类的实例实现,并将玩家实现为Agent类的实例,并实施一些简单的游戏策略作为策略的实例(模式)类,然后看看会发生什么

通过一些测试,有一个完全随机的播放器作为陪衬,看看短期增益/损失最大/最小运营商,尝试使用遗传算法改变代理的策略,下载XCS分类器,看看它是否有用于推导策略...

......正确模型的概念在很大程度上取决于它的使用方式.一旦你理解了你需要如何使用游戏元素并模拟/操纵玩家策略/策略,那么你就会知道你的解决方案的"正确"结构是什么