A few months back I made modifications to PTC1 and PTC2 to make them more robust for exactly your purposes. I don't know if those versions are on the current ECJ snapshot yet -- they're definitely on CVS. Before we go further here, let's make sure that you've got the most recent versions and things are still having problems. Sean José Carlos B. Ribeiro wrote: > Hi, > > I've been using ECJ for performing some experiments with > Strongly-Typed GP (namely, for evolving unit-test cases for Java > programs). > > I wanted to perform some experiments that require setting different > probabilities of selecting constraints, and I found out that the PTC1 > and PTC2 algorithms allow me to do this. However, I've been having > some problems. > > Please consider the parametrization below. Basically, I want > GPNodeConstraint nc1 to be chosen with a probability of 30% and nc2 to > be selected with a probability of 70%. > > ----- EXAMPLE PARAMETERIZATION ----- > gp.type.a.size = 2 > gp.type.a.0.name = A > gp.type.a.1.name = B > > gp.nc.size = 3 > gp.nc.0 = ec.gp.GPNodeConstraints > gp.nc.0.name = nc0 > gp.nc.0.returns = B > gp.nc.0.size = 1 > gp.nc.0.child.0 = A > > gp.nc.1 = ec.gp.GPNodeConstraints > gp.nc.1.name = nc1 > gp.nc.1.returns = A > gp.nc.1.size = 0 > gp.nc.1.prob = 0.3 > > gp.nc.2 = ec.gp.GPNodeConstraints > gp.nc.2.name = nc2 > gp.nc.2.returns = A > gp.nc.2.size = 0 > gp.nc.2.prob = 0.7 > > gp.fs.0.size = 3 > gp.fs.0.func.0 = functionFiles.FFB1 > gp.fs.0.func.0.nc = nc0 > gp.fs.0.func.1 = functionFiles.FFA1 > gp.fs.0.func.1.nc = nc1 > gp.fs.0.func.2 = functionFiles.FFA2 > gp.fs.0.func.2.nc = nc2 > ----- > > When I tried this out I got the following error message: > "java.lang.ArithmeticException: Distribution has no elements". I guess > that the problem here is that I didn't define any non-terminals for > the atomic type A, and no terminals for B. Everything works fine if > both A and B have terminals and non-terminals. > > The problem is that my problem requires me to define some types that > only have terminal nodes (like A). Is there any way for me to get > around this? Or am I missing something? > > Thanks, in advance, for your help, > > José