So, further to this. Our timeslots are not conventional. This is an example of how they work, # id times/week minutes/class days-of-week(1-3) start-time end-time conflicts-with 1 3 50 MWF 800 850 2 2 2 75 WF 835 950 1 3 3 3 50 MWF 900 950 2 4 3 50 MWF 1030 1120 5 3 50 MWF 1130 1220 6 2 75 WF 1250 1405 7 7 2 50 WF 1315 1405 6 8 3 50 MWF 1415 1505 12 13 14 9 3 50 MWF 1515 1605 12 13 14 10 3 50 MWF 1615 1705 11 12 13 14 11 2 75 MW 1615 1730 10 12 13 12 1 180 M 1415 1715 8 9 10 11 13 1 180 W 1415 1715 8 9 10 11 14 1 180 F 1415 1715 8 9 10 15 2 75 TR 800 915 16 2 75 TR 925 1040 17 2 75 TR 1050 1205 18 2 75 TR 1250 1405 19 2 75 TR 1415 1530 21 22 20 2 75 TR 1540 1655 21 22 21 1 180 T 1415 1715 19 20 22 1 180 R 1415 1715 19 20 23 1 180 M 1800 2100 24 1 180 T 1800 2100 25 1 180 W 1800 2100 26 1 180 R 1800 2100 All of these constraints are hard. Over a week the timeslots should be maximally filled, but in any possible combination. For example; 1, 3, 4, 5, 6, 8, 9, 10, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26 satisfies the constraints. And so does, 2, 4, 5, 6, 8, 9, 10, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26. I could go with a set of permutations which define all possible valid weekly timeslot combinations, or I could define 26 GP functions and let GP handle the permutations. My problem is I should be able to read in this file to create the functions. So far, from what I see in the example files, functions are created in code like terminals. I haven't seen a means to create them from a param file. Alternately I could apply the timeslot constraints in the selection process with suitable terminals to generate the timeslot functions, but do I do this with ADF and progressively remove these selection constraints? I'm going on the premise that all hard constraints should be functions since input constraints determined by a function act the same as output (selection) constraints. -- ray