Dear Sean, I just got it. Thank you very much. Best, Márcio -------- Prof. Dr. Márcio Porto Basgalupp Instituto de Ciência e Tecnologia (ICT) Universidade Federal de São Paulo (UNIFESP) Tel: +55 12 3309-9500 (r: 9762) On Thu, Nov 26, 2015 at 9:46 AM, Márcio Basgalupp <[log in to unmask]> wrote: > Dear Sean, > > Thank you very much for your help. > > Actually, I'm not using matrix operators. I tried to omit some details in > order to simplify the question but it think I made a bad choice :-). I'm > actually combining some bi-dimensional arrays and a multiplication for me > would be like that: C = A * B, where C[i] = A[i] * B[i] for all i (it is > sure that all arrays have the same dimension). > > The problem is that I have to ensure that the final result (my individual) > must be a bi-dimensional array. My application is to combine different > bi-dimensional arrays. Instead of using A or B, I could use something like: > 2*A + 3*B + A*B. But an individual like 2*3 is not feasible, since the > final result is a number (6) and not an array. Then I think that that > constraint in ECJ is perfect. I just need to ensure the return type of the > individual is a double[][] instead of a 'nil' or 'boolean', like in the > examples I found at Section 5.2.11 in ECJ's manual. > > Best, > Márcio > > > > -------- > Prof. Dr. Márcio Porto Basgalupp > Instituto de Ciência e Tecnologia (ICT) > Universidade Federal de São Paulo (UNIFESP) > Tel: +55 12 3309-9500 (r: 9762) > > On Thu, Nov 26, 2015 at 1:38 AM, Sean Luke <[log in to unmask]> wrote: > >> The basic issue is that matrix multiplication involves several varying >> constraints. Basically you're saying that if the left child produces an >> AxB matrix and the right child produces a CxD matrix, and the parent >> produces an ExF matrix, then it must be the case that B=C, E=A, and F=D. >> Notice it doesn't say that A, B, C, D, E, or F must be any *specific* >> values, just that there are functional constraints on them. Essentially >> you have a countably infinite number of types. Furthermore, you don't >> specify how these constraints will be enforced -- by forcing children to >> match a given parent or the other way around? By forcing the right child >> to match the left child, or the other way around? >> >> ECJ's typing is meant for situations where parents and children may have >> a small and finite set of types, children are forced to be constrained by >> their parents, and there are no constraints between children. You have a >> much uglier situation which requires a form of polymorphic typing. >> >> Polymorphic typing systems are nontrivial to implement, and nearly >> impossible to implement without putting strong restrictions on the tree >> builders and breeding operators available. I decided it was not worth the >> downsides to implement as standard in ECJ's GP facility. I believe that >> Maarten Keijzer did polymorphic typing for EO, you might look into that. >> Tina Yu did her thesis on polymorphic typing but I don't know what system >> she used. Otherwise you're probably stuck with GE [which ECJ can do, along >> with certain other systems]. >> >> Sean >> >> >> On Nov 24, 2015, at 4:53 PM, Márcio Basgalupp <[log in to unmask]> >> wrote: >> >> > Dear all, >> > >> > I'm using GP for combining 'matrix objects' (for example, matrix A, B >> and C). I also have a node representing a number (extending ERC class). >> Then, I would like to evolve individuals such as 'A*B', '2*A + B', 'C*A + >> 2*B', etc, i.e., my 'complete individual' must return a matrix. I can not, >> for example, have an individual like '2 + 2' or '3 * 2', because it would >> return a number (not a matrix). If I use a GE (Grammatical Evolution) I can >> easily avoid it by using the grammar. How can I avoid it by using GP in >> ECJ? Is there any way to ensure that I will always have at least one matrix >> as a terminal node? >> > >> > Best, >> > Márcio >> > >> > -------- >> > Prof. Dr. Márcio Porto Basgalupp >> > Instituto de Ciência e Tecnologia (ICT) >> > Universidade Federal de São Paulo (UNIFESP) >> > Tel: +55 12 3309-9500 (r: 9762) >> > >