Hi,

I wonder if anyone could offer some advice with two particular problems I am having.

I am in the process of completing my undergraduate final year project in Oz.
The project goal is to allocate a list of students to module groups.
The number of groups for each module is predefined, as is the location and start time. My job is *simply* to allocate students to groups so that no student appears twice in any group, no students grouping clashes with any of his other groups (by start time) and that the maximum number of students in each group is less than a fixed limit depending upon group.

Problem 1 - the representation
I have made one approach using a record with features for each student and each corresponding field being a FD.record. This 'sub-record' has module group codes as features and a finite domain representing the group within that module. After a long period of perseverance, I have come to the conclusion that this is a cumbersome method.

I wonder if anyone has an opinion on this new possible method:

A record with features for each module-group and a finite set to hold the students allocated to that group? Also, I have read about creating 'holes' in finite domains and I think in principal I appreciate the significance of this, but does this apply to finite sets also? And is it a problem?

Problem 2 - cross-referencing

I found with my first attempt that I needed to express relationships between the fields of different records.
For example,

if I have records which have finite domains as fields thus
  record1(A:1#5 B:7#9 F:12#15 J:20#25) and
  record2(B:7#9 J:20#25)
  record3(.......... etc

if the numbers above refer to module groups and each record is a student, how can I represent the following constraints:

The start time of any group in record1 must not equal the start time of any other group in the same record.
The total number of students in group B must be less than 20 for example.

I have had some suggestions along the lines of creating some structure to hold the values relevant to each relationship and then posting constraints on that new structure, but I have 1500 students and 626 different groups to deal with which seems like an awfully large number of new data structures. I have also attempted to understand some of the more involved scheduling examples, but to be honest I got very lost,very quickly.

My university has many experts on prolog, lisp and logic programming in general, but sadly none whatsoever on the finer points of FD programming in Oz. I think my main hurdle is with posting constraints on record fields with only the feature name to refer to. So any help on this in particular would be really appreciated (or a pointer to some example I can actually understand?)

Kind regards
Mark

--
Mark Richardson
Final year undergraduate
University of Teesside
_________________________________________________________________________________
mozart-users mailing list                               
[email protected]
http://www.mozart-oz.org/mailman/listinfo/mozart-users

Reply via email to