mark richardson wrote :
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?
I would simply represent each student as a fixed integer and groups as
finite sets of them.
no student appears twice in any group => implicit
no students grouping clashes with any of his other groups (by start
time) => FS.disjointN
maximum number of students in each group is less than a fixed limit
depending upon group. => FS.cardRange
(all students are affected => FS.unionN, FS.partition)
Yves||
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
_________________________________________________________________________________
mozart-users mailing list
[email protected]
http://www.mozart-oz.org/mailman/listinfo/mozart-users