class fWrapper:
def __init__(self,function,child_count,name,params,type):
self.function = function
self.child_count = child_count
self.name = name
self.params = params
self.type = type
paramsとtypeを指定して、パラメタ、戻り値の型を指定できるように修正。
def make_random_tree(pc,max_depth=4,fpr=0.5,ppr=0.6,type='object'):
if random() < fpr and max_depth > 0:
f = choice(flist[type])
children = [make_random_tree(pc,max_depth-1,fpr,ppr,type=t) for t in f.params]
return node(f,children)
elif random() < ppr and type == 'int':
return paramNode(randint(0,pc-1))
elif type == 'object':
return constNode(choice(['','fizz','buzz','fizzbuzz',randint(0,100)]));
elif type == 'string':
return constNode(choice(['','fizz','buzz','fizzbuzz']))
else:
return constNode(randint(0,100))
こちらもchildrenを作成するときに戻り値の型を指定するように修正。
mutateとcrossoverも同様の修正をしています。
定数ノードではfizz,buzz,fizzbuzzの文字を発生させる様に修正してます。
本当は文字列もランダムで発生させたかったのですが、進化にかかる時間が増えるので少し手抜きしました。
def write_jpeg(tree):
stack = [tree]
g = pydot.Dot()
root = True
while len(stack) > 0:
node = stack.pop()
parent_node = pydot.Node(node.name+"_"+str(id(node)))
parent_node.set_label(node.name)
if root:
g.add_node(parent_node)
root = False
if hasattr(node,"children"):
for child in node.children:
stack.append(child)
child_node = pydot.Node(child.name+"_"+str(id(child)))
child_node.set_label(child.name)
g.add_node(child_node)
g.add_edge(pydot.Edge(parent_node,child_node))
g.write_jpeg('tree.jpg',prog='dot')
次に、projectのversionの確認です。 プロジェクト内で ruby script/about とうってみてください。 About your application’s environment Ruby version 1.8.6 (universal-darwin9.0) RubyGems version 1.0.1 Rails version 1.2.3 Active Record version 1.15.3 Action Pack version 1.13.3 Action Web Service version 1.2.3 Action Mailer version 1.3.3 Active Support version 1.4.2 Application root /Users/enomoto/etc/123 Environment development Database adapter sqlite3 こんな感じでrailsなどのversionがわかります。
もういちど ruby script/about をたたいてみてください。 Ruby version 1.8.6 (universal-darwin9.0) RubyGems version 1.0.1 Rails version 1.2.6 Active Record version 1.15.6 Action Pack version 1.13.6 Action Web Service version 1.2.6 Action Mailer version 1.3.6 Active Support version 1.4.4 Application root /Users/enomoto/etc/123 Environment development Database adapter sqlite3