GKDecisionTree
概括
你可以通过指定问题,答案和操作手动定义决策树,你也可以允许GKDecisionTree类使用示例数据来自动学习预测模型。一个DecisionTree有几个元素:
• 属性(Attributes)代表要回答的个别问题或要做出的选择。
• 分支(Branches)是每个属性提出的问题或选择的可能答案。
• 行动(Actions)是树决策过程的最终结果。 来自属性的每个分支都会导向另一个属性或一个动作。
当使用GKDecisionTree类时,attributes和actions可能是你应用或游戏中任何一个对象,你可以使用谓词或影响随机决策的权重来定义特定答案值的分支。比如,一个策略游戏可能会使用DecisionTree根据关于正在进行的比赛的几个标准来选择角色应该在轮到时做些什么。在这种情况下:
• 对于attributes,你可能需要一些字符串strings(非公开)来代表这些标准,比如“Type”(什么样的敌人),“HP”(敌人的血量),“Special”(玩家的特殊技能)。
• 对于branches,你需要为每一个attribute使用适当类型,“Type”可能需要一个所有可能存在的敌人类型分支,但对于“HP”可以使用一个谓词来确定敌人的血量高于或低于一个阈值。
• 对于actions,你可以设置一个枚举值来表示玩家可以攻击的各种方式(比如拍打,抓取或抱住)。或者,你可以使用自定义类的实例来表示可用的道具或法术。
图1 展示了基于上述示例attributes,branches和actions可能的树结构。
图1 decision tree示例
创建一个DecisionTree
GKDecisionTree类提供了两个创建方法。
手动定义一个DecisionTree,你要定一个测试的每一个attribute(或者是需要询问的问题),每个attribute可能的branches(或者是问题的答案),每个完整的一系列attribute测试和branches结果的action(或最终结果)。要手动创建一个树,通过initWithAttribute: 方法创建去定义第一个需要询问的问题,然后在新树的rootNode对象上使用GKDecisionNode方法来定义分支及其导致的子节点,并附带attribute或action值。
在一个学习型的决策树中,你要提供一组attribute(或问题);一组示例items,每一个都表示一组attribute值(或问题的答案);每个例子最终的action。然后,GKDecisionTree类自动推断一个决策树结构,当提供与您的一个示例匹配或相似的一组attribute值时,会预测相应的操作。使用initWithExamples:actions:attributes: 创建方法创建学习型决策树。表1显示了学习决策树的样本输入(基于图1所示相同的假设游戏)。
表1 示例attribute值和action
创建任何一种决策树后,您可以使用继承的description属性来检查其结构。
做出决定
在创建完决策树后,使用findActionForAnswers: 方法来评估和选择一个action,当你调用这个方法,你提供了一组输入(attribute的值或者问题的答案),决策树会根据与每个输入值对应的分支以产生一个action。
Tip
使用一组具有可能性的值来定义attribute时,定义你自己的枚举类型以指定可能的值,然后在使用GKDecisionNode的createBranchWithValue:attribute: 方法或initWithExamples:actions:attributes: 构建树时和在findActionForAnswers: 方法中传递一组attribute值时使用枚举值。
以下示例代码展示了图1和表1类似的树:
NSDictionary *answers = @{
@"Type?" : @(MyEnemyTypeElectric), // an enum value
@"HP?" : @20,
@"Special?" : @YES,
};
NSString *action = [myDecisionTree findActionForAnswers:answers];
Topics
创建手动定义的决策树(Creating a Manually Defined Decision Tree)
- initWithAttribute:
创建一个以指定的初始属性为测试的决策树。
rootNode
创建学习型决策树(Creating a Learned Decision Tree)
- initWithExamples:actions:attributes:
使用指定的属性,示例项目和操作创建自动学习的决策树。
评估决策树并作出决定(Evaluating a Tree to Make Decisions)
- findActionForAnswers:
在与每个指定答案对应的分支之后搜索决策树,并返回生成的动作对象。
randomSource
初始化(Initializers)
- initWithURL:error:
实例方法(Instance Methods)
- exportToURL:error:
关系
继承
NSObject