一种方法是制作一个带有顶点的图,其中“边”包含要通过它必须满足的条件。
class Node:
def __init__(self, edges, val = None):
self.edges = edges
self.val = val
def decide(self, args):
if len(self.edges) < 1:
return self.val
for edge in self.edges:
(cond, next) = edge
if cond(args):
return next.decide(args)
break
n_a_a = Node([], 'y')
n_a_b = Node([], 'n')
n_b_a = Node([], 'y')
n_b_b = Node([], 'n')
n_a = Node([(lambda args: args['B'] > 0, n_a_a),
(lambda args: args['B'] <= 0, n_a_b)])
n_b = Node([(lambda args: args['B'] > 5, n_b_a),
(lambda args: args['B'] <= 5, n_b_b)])
root = Node([(lambda args: args['A'] > 0, n_a),
(lambda args: args['A'] <= 0), n_b)])
print root.decide({'A':5,'B':10})
另一种方法是对决策树建模,然后使用代码生成器生成代码或自己手动编写如下代码:
def root(args):
if args['A'] > 0:
return n_a(args)
return n_b(args)
def n_a(args):
if args['B'] > 0:
return n_a_a(args)
return n_a_b(args)
def n_b(args):
if args['B'] > 5:
return n_b_a(args)
return n_b_b(args)
def n_a_a(args):
return 'y'
def n_a_b(args):
return 'n'
def n_b_a(args):
return 'y'
def n_b_b(args):
return 'n'
print root({'A':5,'B':10})
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句