Hi Sean,

Your method seems to work. The only difficult thing was determining which
constraint number matched which constraint. To do this I put the following
code in a custom statistics class in the finalStatistics method:

GPInitializer initializer = ((GPInitializer)state.initializer);
GPNodeConstraints[] constraints = initializer.nodeConstraints;
state.output.println("\nNode Constraints",Output.V_NO_GENERAL, popLog);
for (GPNodeConstraints constraint:constraints){
   if (constraint!=null){
      state.output.print("{" + constraint.constraintNumber 
                         + "} : (" ,Output.V_NO_GENERAL, popLog);
      for (GPType childType:constraint.childtypes){
         state.output.print(childType+",",Output.V_NO_GENERAL, popLog);
      state.output.println(")",Output.V_NO_GENERAL, popLog);

i.e. I print out every constraint number and match it to the constraint's
child types. This worked well for me because the constraints have unique
child types. 

I'd still like to see an easy way to set one seed individual and randomize
the rest. Right now I am forced to "fake" it by inserting a bunch of empty
trees in the initial population file. Looking at the Subpopulation code it
seems like it wouldn't be too difficult to create new individuals to fill
out the population if the number of individuals in the input file is less
than the subpop size.

Thanks for the help,