使用 Swift 在 iOS 中做出决策的最佳方式是啥
Posted
技术标签:
【中文标题】使用 Swift 在 iOS 中做出决策的最佳方式是啥【英文标题】:What is the best way to make decisions in iOS with Swift使用 Swift 在 iOS 中做出决策的最佳方式是什么 【发布时间】:2020-03-25 16:14:21 【问题描述】:我想用简单的 AI 制作一个简单的应用程序。 我做了很多研究,发现了一些关于决策树、规则和行为树的文章。
我看到了 WWDC2016 的视频,其中展示了新的 GKDecisionTree。 也许这可能是我的应用程序的简单解决方案。
我尝试了这段代码,但在这一行出现错误:
let tree = GKDecisionTree(attribute: "anrgy?")
参数类型“字符串”不符合预期类型“NSObjectProtocol”
// SETUP TREE
let tree = GKDecisionTree(attribute: "anrgy?")
let root = tree?.rootNode
// ADD BRANCH
// Create branches
root.createBranch(value: true, attribute: "attack")
let goAway = root.createBranch(value: false, attribute: "goAway")
// Create actions for when nearby
goAway.createBranch(withWeight: 9, attribute: "Left")
goAway.createBranch(withWeight: 1, attribute: "Right")
// Find action for answers
// Find action for answers
let answers = ["anrgy?" : true]
tree.findActionForAnswers(answers: answers)
如果有更好的简单 AI 方法或如何修复此示例,请告诉我。
感谢您的帮助。
【问题讨论】:
【参考方案1】:此代码正在运行:
// SETUP TREE
let tree = GKDecisionTree(attribute: "anrgy?" as NSObjectProtocol)
let root = tree.rootNode
// ADD BRANCH
// Create branches
root?.createBranch(value: true, attribute: "attack" as NSObjectProtocol)
let goAway = root?.createBranch(value: false, attribute: "goAway" as NSObjectProtocol)
// Create actions for when nearby
goAway?.createBranch(weight: 9, attribute: "Left" as NSObjectProtocol)
goAway?.createBranch(weight: 1, attribute: "Right" as NSObjectProtocol)
// Find action for answers
// Find action for answers
let answers = ["anrgy?" : false]
let decisionAction = tree.findAction(forAnswers: answers as [AnyHashable : NSObjectProtocol])
print("Answer: \(String(describing: decisionAction!))")
但这是一种好的编码风格吗? 还有比使用 GKDecisionTree 更好的方法吗?
【讨论】:
【参考方案2】:这是根据您的示例使用学习决策树的替代方法。手动定义的决策树和学习的决策树都使用 GKDecisionTree 类,但初始化器不同:
let attributes = [ "angry?", "goAway" ]
let examples = [
[true, 0],
[false, 9],
[false, 1],
]
let actions = [
"attack",
"Left",
"Right",
]
let tree = GKDecisionTree(examples: examples as NSArray as! [[NSObjectProtocol]],
actions: actions as NSArray as! [NSObjectProtocol],
attributes: attributes as NSArray as! [NSObjectProtocol])
let answers = ["angry?" : true as NSObjectProtocol,
"goAway": 1 as NSObjectProtocol]
let decisionAction2 = tree.findAction(forAnswers: answers)
【讨论】:
以上是关于使用 Swift 在 iOS 中做出决策的最佳方式是啥的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS (Swift) 中使用后台位置更新的最佳方式 [关闭]
iOS Swift:查询完成后将数据传递给其他 VC 的最佳方式