Package de.timefinder.data.algo

Examples of de.timefinder.data.algo.Assignment


        assertEquals(2, eventRaster.getConflictingAssignments(9, 2).size());
    }

    @Test
    public void testGetConflictingEventsIndices2() {
        Assignment ev1 = newAssignment(1, 2);
        assertTrue(eventRaster.add(ev1));

        Assignment ev2 = newAssignment(0, 3);
        assertTrue(eventRaster.add(ev2));

        Collection<Assignment> events = eventRaster.getConflictingAssignments(0, 1);
        assertEquals(1, events.size());
View Full Code Here


    @Test
    public void testGetLastFreePlus1() {
        assertEquals(LENGTH, eventRaster.getLastFreePlus1(0));

        Assignment ev1 = newAssignment(1, 1);
        assertTrue(eventRaster.add(ev1));
        assertEquals(1, eventRaster.getLastFreePlus1(0));
        assertEquals(LENGTH, eventRaster.getLastFreePlus1(2));

        // undefined if the starting slot is already assigned
View Full Code Here

    }

    @Override
    public void transformEvents(Map<Event, Assignment> map) {
        for (Event ev : events) {
            Assignment as = map.get(ev);
            if (as == null)
                throw new NullPointerException("Cannot find assignment for:" + ev);

            assignments.add(as);
        }
View Full Code Here

        this.raster = raster;
    }

    @Override
    public int getViolations(Object obj) {
        Assignment ass = (Assignment) obj;
        if (ass.getStart() < 0)
            return 0;

        int counter = 0;
        Event ev = ass.getEvent();
        BitRaster refRaster = getRaster().getForbidden();
        int end = ass.getStart() + ev.getDuration();
        for (int i = ass.getStart(); i < end; i++) {
            if (refRaster.isAssigned(i))
                counter++;
        }
        return counter;
    }
View Full Code Here

            if (person.getEvents().size() == 0)
                continue;

            Set<Assignment> set = FastSet.newInstance();
            for (Event event : person.getEvents()) {
                Assignment ass = eventToAss.get(event);
                if (ass == null) {
                    ass = new Assignment(event);
                    eventToAss.put(event, ass);
                }
                set.add(ass);
            }
            personToAssignments.put(person, set);
        }
        for (Person person : persons) {
            for (Constraint c : person.getConstraints()) {
                c.transformEvents(eventToAss);
            }
        }

        conflictMatrix = new ConflictMatrix(dataPoolSettings.getTimeslotsPerWeek(), dataPoolSettings.getTimeslotsPerDay());

        // TODO LATER: use only as many assignment as it should (e.g. if a course is splitted into several sections)      
        List<Assignment> allAssignments = new ArrayList<Assignment>(conflictMatrix.initFromResources(personToAssignments));

        doIntegrityChecks(allAssignments, allLocations);

        logger.info("Start Algorithm - number of slots per week:" + dataPoolSettings.getTimeslotsPerWeek()
                + "; number of slots per day:" + dataPoolSettings.getTimeslotsPerDay()
                + "; events:" + allAssignments.size()
                + "; persons:" + personToAssignments.size()
                + "; locations:" + allLocations.size());

        Map<Assignment, Set<Assignment>> followers = FastMap.newInstance();
        Map<Assignment, Set<Assignment>> befores = FastMap.newInstance();
        for (Assignment ass : allAssignments) {
            if (ass.getEvent().getPersons().size() == 0)
                logger.fatal("relationship events to persons has to be bidirectional!" + ass);

            // TODO put this 'calculation' into OrderConstraint class
            befores.put(ass, createBeforesAssignments(ass, allAssignments));
            followers.put(ass, createFollowsAssignments(ass, allAssignments));

            for (Constraint constr : ass.getEvent().getConstraints()) {
                if (constr instanceof DifferentDayConstraint
                        || constr instanceof MinGapsConstraint) {
                    constr.transformEvents(eventToAss);
                }
            }
        }

        Period currentWeek = new Period(dataPoolSettings.getTimeslotsPerWeek(),
                allAssignments, befores, followers,
                allLocations, personToAssignments, conflictMatrix);
        currentWeek.setRandom(random);

        if (initialize) {
            for (Assignment ass : allAssignments) {
                if (ass.getStart() >= 0) {
                    if (!currentWeek.add(ass, ass.getStart())) {
                        currentWeek.add(ass, -1);
                    }
                } else
                    currentWeek.add(ass, -1);
            }
View Full Code Here

        return events;
    }

    @Override
    public int getViolations(Object obj) {
        Assignment assToCalc = (Assignment) obj;
        int slotsPerDay = settings.getTimeslotsPerDay();
        int day = assToCalc.getStart() / slotsPerDay;

        int counter = 0;
        for (Assignment ass : assignments) {
            if (ass.getEvent() == assToCalc.getEvent())
                continue;

            if (ass.getStart() / slotsPerDay == day)
                counter += ass.getEvent().getDuration();
        }
View Full Code Here

    @Override
    public void transformEvents(Map<Event, Assignment> map) {
        assignments = new ArrayList<Assignment>(events.size());
        for (Event ev : events) {
            Assignment as = map.get(ev);
            if (as == null)
                throw new NullPointerException("Cannot find assignment for:" + ev);
            assignments.add(as);
        }
    }
View Full Code Here

    private void out() {
        String str = "";
        int index = 0;
        for (AssignmentManager eg : clusterArray) {
            str += "[" + index + "," + eg.getAll().size() + "] ";
            Assignment obj[] = eg.getAll().toArray(new Assignment[0]);
            Arrays.sort(obj, new Comparator<Assignment>() {

                @Override
                public int compare(Assignment o1, Assignment o2) {
                    return ("" + o1.getEvent().getId()).compareTo("" + o2.getEvent().getId());
View Full Code Here

        Solution solution = new Solution();
        solution.setHardConflicts(getHardConstraintsViolations());
        solution.setSoftConflicts(getSoftConstraintsViolations());

        for (Assignment ass : allAssignments) {
            solution.addAssignment(new Assignment(ass));
        }

        return solution;
    }
View Full Code Here

    }

    private void applyMatching(Period currentWeek, Set<EventTree> matching) {
        for (EventTree tree : matching) {
            int evNumber = tree.getEvent();
            Assignment ass = assToNumber.getSecond(evNumber);
            // ass could be both: unassigned and even assigned

            currentWeek.doMove(ass, tree.getMinSlot() % slotsPerWeek);
        }
    }
View Full Code Here

TOP

Related Classes of de.timefinder.data.algo.Assignment

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.