##"This is an example from a real-world application, where we were using Genetic Programming to do simple symbolic regression. We needed a good way to visualize the trees that were being created, and it didn't take long to code up some lisp to create a dot file that visualized multiple individuals. The next step was to provide color-coding of key nodes so that we could illustrate crossover and mutation of individuals before-and-after-style. This is a sample dot file from some early debugging." Contributed by Wayne Folta. ##Command to get the layout: "dot -Tpng thisfile > thisfile.png" graph "" { fontname="Helvetica,Arial,sans-serif" node [fontname="Helvetica,Arial,sans-serif"] edge [fontname="Helvetica,Arial,sans-serif"] # node [fontsize=10,width=".2", height=".2", margin=0]; # graph[fontsize=8]; label="((+ (* (X) (- (- (X) (X)) (X))) (% (+ (X) (X)) (COS (- (X) (X))))) (EXP (* (X) (X))) (+ (% (EXP (SIN (+ (X) (X)))) (SIN (* (X) (EXP (* (X) (X)))))) (* (X) (X))) (% (EXP (% (X) (% (X) (X)))) (EXP (SIN (X)))))" subgraph cluster01 { label="(+ (* (X) (- (- (X) (X)) (X))) (% (+ (X) (X)) (COS (- (X) (X)))))" n002 ; n002 [label="+"] ; n002 -- n003 ; n003 [label="*"] ; n003 -- n004 ; n004 [label="X"] ; n003 -- n005 ; n005 [label="-"] ; n005 -- n006 ; n006 [label="-"] ; n006 -- n007 ; n007 [label="X"] ; n006 -- n008 ; n008 [label="X"] ; n005 -- n009 ; n009 [label="X"] ; n002 -- n010 ; n010 [label="%"] ; n010 -- n011 ; n011 [label="+"] ; n011 -- n012 ; n012 [label="X"] ; n011 -- n013 ; n013 [label="X"] ; n010 -- n014 ; n014 [label="COS"] ; n014 -- n015 ; n015 [label="-"] ; n015 -- n016 ; n016 [label="X"] ; n015 -- n017 ; n017 [label="X"] ; } subgraph cluster17 { label="(EXP (* (X) (X)))" n018 ; n018 [label="EXP"] ; n018 -- n019 ; n019 [label="*"] ; n019 -- n020 ; n020 [label="X"] ; n019 -- n021 ; n021 [label="X"] ; } subgraph cluster21 { label="(+ (% (EXP (SIN (+ (X) (X)))) (SIN (* (X) (EXP (* (X) (X)))))) (* (X) (X)))" n022 ; n022 [label="+"] ; n022 -- n023 ; n023 [label="%"] ; n023 -- n024 ; n024 [label="EXP"] ; n024 -- n025 ; n025 [label="SIN"] ; n025 -- n026 ; n026 [label="+"] ; n026 -- n027 ; n027 [label="X"] ; n026 -- n028 ; n028 [label="X"] ; n023 -- n029 ; n029 [label="SIN"] ; n029 -- n030 ; n030 [label="*"] ; n030 -- n031 ; n031 [label="X"] ; n030 -- n032 ; n032 [label="EXP"] ; n032 -- n033 ; n033 [label="*"] ; n033 -- n034 ; n034 [label="X"] ; n033 -- n035 ; n035 [label="X"] ; n022 -- n036 ; n036 [label="*"] ; n036 -- n037 ; n037 [label="X"] ; n036 -- n038 ; n038 [label="X"] ; } subgraph cluster38 { label="(% (EXP (% (X) (% (X) (X)))) (EXP (SIN (X))))" n039 ; n039 [label="%"] ; n039 -- n040 ; n040 [label="EXP"] ; n040 -- n041 ; n041 [label="%"] ; n041 -- n042 ; n042 [label="X"] ; n041 -- n043 ; n043 [label="%"] ; n043 -- n044 ; n044 [label="X"] ; n043 -- n045 ; n045 [label="X"] ; n039 -- n046 ; n046 [label="EXP"] ; n046 -- n047 ; n047 [label="SIN"] ; n047 -- n048 ; n048 [label="X"] ; } }