Package solver.constraints

Examples of solver.constraints.Propagator


        if (Configuration.PRINT_VAR_EVENT) {
            Trace.printModification(variable, type, cause);
        }
        int nbp = variable.getNbProps();
        for (int p = 0; p < nbp; p++) {
            Propagator prop = variable.getPropagator(p);
            int pindice = variable.getIndexInPropagator(p);
            if (cause != prop && prop.isActive() && prop.advise(pindice, type.getMask())) {
                int aid = p2i.get(prop.getId());
                if (prop.reactToFineEvent()) {
                    boolean needSched = (eventmasks[aid][pindice] == 0);
                    eventmasks[aid][pindice] |= type.getStrengthenedMask();
                    if (needSched) {
                        //assert !event_f[aid].get(pindice);
                        if (Configuration.PRINT_SCHEDULE) {
                            Trace.printSchedule(prop);
                        }
                        event_f[aid].addLast(pindice);
                    } else if (Configuration.PRINT_SCHEDULE) {
                        Trace.printAlreadySchedule(prop);
                    }
                }
                if (!schedule_f[aid]) {
                    PropagatorPriority prio = prop.getPriority();
                    int q = match_f[prio.priority - 1];
                    pro_queue_f[q].addLast(prop);
                    schedule_f[aid] = true;
                    notEmpty = notEmpty | (1 << q);
                }
View Full Code Here


    @Override
    public void dynamicDeletion(Constraint c) {
        for (Propagator toDelete : c.getPropagators()) {
            int nsize = propagators.length - 1;
            Propagator toMove = propagators[nsize];
            int idtd = p2i.get(toDelete.getId());
            int idtm = p2i.get(toMove.getId());


            assert idtd <= idtm : "wrong id for prop to delete";

            // 1. remove from propagators[] and p2i
            Propagator[] _propagators = propagators;
            propagators = new Propagator[nsize];
            System.arraycopy(_propagators, 0, propagators, 0, nsize);

            // 2. resize schedule_f[]
            boolean sftm = schedule_f[idtm];
            assert !schedule_f[idtd] : "try to delete a propagator which is scheduled (fine)";
            boolean[] _schedule_f = schedule_f;
            schedule_f = new boolean[nsize];
            System.arraycopy(_schedule_f, 0, schedule_f, 0, nsize);

            // 3. resize schedule_c[]
            boolean sctm = schedule_c[idtm];
            assert !schedule_c[idtd] : "try to delete a propagator which is scheduled (coarse)";
            boolean[] _schedule_c = schedule_c;
            schedule_c = new boolean[nsize];
            System.arraycopy(_schedule_c, 0, schedule_c, 0, nsize);

            // 4. remove event_f
            IntCircularQueue icqtm = event_f[idtm];
            assert !toDelete.reactToFineEvent() || event_f[idtd].isEmpty() : "try to delete a propagator which has events to propagate (fine)";
            IntCircularQueue[] _event_f = event_f;
            event_f = new IntCircularQueue[nsize];
            System.arraycopy(_event_f, 0, event_f, 0, nsize);


            // 5. remove event_f
      PropagatorEventType ettm = event_c[idtm];
            assert event_c[idtd] == PropagatorEventType.VOID : "try to delete a propagator which has events to propagate (coarse)";
      PropagatorEventType[] _event_c = event_c;
            event_c = new PropagatorEventType[nsize];
            System.arraycopy(_event_c, 0, event_c, 0, nsize);

            // 6. remove eventmasks
            int[] emtm = eventmasks[idtm];
//            assert eventmasks[idtd]. : "try to delete a propagator which has events to propagate (fine)";
            int[][] _eventmasks = eventmasks;
            eventmasks = new int[nsize][];
            System.arraycopy(_eventmasks, 0, eventmasks, 0, nsize);

            // 6. copy data
            if (idtd < nsize) {
                propagators[idtd] = toMove;
                p2i.set(toMove.getId(), idtd);
                schedule_f[idtd] = sftm;
                schedule_c[idtd] = sctm;
                event_f[idtd] = icqtm;
                event_c[idtd] = ettm;
                eventmasks[idtd] = emtm;
View Full Code Here

            IPropagationEngine.Trace.printModification(variable, type, cause);
        }
        Propagator[] vpropagators = variable.getPropagators();
        int nbp = vpropagators.length;
        int[] vindices = variable.getPIndices();
        Propagator prop;
        int pindice;

        for (int p = nbp - 1; p >= 0; p--) {
            prop = vpropagators[p];
            pindice = vindices[p];
            if (cause != prop && prop.isActive() && prop.advise(pindice, type.getMask())) {
                int aid = p2i.get(prop.getId());
                if (prop.reactToFineEvent()) {
                    boolean needSched = (eventmasks[aid][pindice] == 0);
                    eventmasks[aid][pindice] |= type.getStrengthenedMask();
                    if (needSched) {
                        if (Configuration.PRINT_SCHEDULE) {
                            IPropagationEngine.Trace.printSchedule(prop);
                        }
                        prop.incNbPendingEvt();
                        eventsets[aid].addLast(pindice);
                    } else if (Configuration.PRINT_SCHEDULE) {
                        IPropagationEngine.Trace.printAlreadySchedule(prop);
                    }
                }
                if (scheduled[aid] == 0) {
                    int prio = /*dynamic ? prop.dynPriority() :*/ prop.getPriority().priority;
                    pro_queue[prio].addLast(prop);
                    scheduled[aid] = (short) (prio + 1);
//                    notEmpty.set(prio);
                    notEmpty = notEmpty | (1 << prio);
                }
View Full Code Here

    @Override
    public void dynamicDeletion(Constraint c) {
        for (Propagator toDelete : c.getPropagators()) {
            int nsize = propagators.length - 1;
            Propagator toMove = propagators[nsize];
            int idtd = p2i.get(toDelete.getId());
            int idtm = p2i.get(toMove.getId());

            assert idtd <= idtm : "wrong id for prop to delete";

            // 1. remove from propagators[] and p2i
            Propagator[] _propagators = propagators;
            propagators = new Propagator[nsize];
            System.arraycopy(_propagators, 0, propagators, 0, nsize);

            // 2. resize scheduled
            short stm = scheduled[idtm];
            assert scheduled[idtd] == 0 : "try to delete a propagator which is scheduled (fine)";
            short[] _scheduled = scheduled;
            scheduled = new short[nsize];
            System.arraycopy(_scheduled, 0, scheduled, 0, nsize);


            // 3. remove eventsets
            IntCircularQueue estm = eventsets[idtm];
            assert !toDelete.reactToFineEvent() || eventsets[idtd].isEmpty() : "try to delete a propagator which has events to propagate (fine)";
            IntCircularQueue[] _eventsets = eventsets;
            eventsets = new IntCircularQueue[nsize];
            System.arraycopy(_eventsets, 0, eventsets, 0, nsize);

            // 4. remove eventmasks
            int[] emtm = eventmasks[idtm];
//            assert eventmasks[idtd]. : "try to delete a propagator which has events to propagate (fine)";
            int[][] _eventmasks = eventmasks;
            eventmasks = new int[nsize][];
            System.arraycopy(_eventmasks, 0, eventmasks, 0, nsize);

            // 4. copy data
            if (idtd < nsize) {
                propagators[idtd] = toMove;
                p2i.set(toMove.getId(), idtd);
                scheduled[idtd] = stm;
                eventsets[idtd] = estm;
                eventmasks[idtd] = emtm;
            }
            trigger.remove(toDelete);
View Full Code Here

         * @throws ContradictionException
         */
        @Override
        public void propagate() throws ContradictionException {
            int sat = 0;
            Propagator ptmp;
            for (int i = 0; i < propagators.length; i++) {
                ptmp = propagators[i];
                if (ptmp.isActive()) { // only active propagators need to be checked, the other must alredy be satisfied
                    ESat entail = ptmp.isEntailed();
                    if (entail.equals(ESat.FALSE)) {
                        fails(ptmp, null, "GenerateAndTest");
                    } else if (entail.equals(ESat.TRUE)) {
                        sat++;
                    }
View Full Code Here

        if(etype == IntEventType.DECUPP){
          super.updateUpperBound(var, one, two, cause);
          bug = false;
        }
        if(etype == PropagatorEventType.FULL_PROPAGATION){
          Propagator prop = (Propagator) cause;
          BoolVar bVar = (BoolVar) var;
          super.activePropagator(bVar, prop);
          bug = false;
        }
        if(bug) {
View Full Code Here

    private int weight(IntVar v) {
        int w = 1;
        Propagator[] propagators = v.getPropagators();
        for (int p = 0; p < propagators.length; p++) {
            Propagator prop = propagators[p];
            int pid = prop.getId();
            if (pid2arity.get(pid) > 1) {
                w += counter.getFails(prop);
            } else {
                if (pid2ari.get(pid) == null) {
                    pid2ari.putIfAbsent(prop.getId(), v.getSolver().getEnvironment().makeInt(prop.arity()));
                }
                int a = pid2ari.get(pid).get();
                pid2arity.put(pid, a);
                if (a > 1) {
                    w += counter.getFails(prop);
View Full Code Here

    @Test(groups = "1s")
    public void test2() {
        for (int k = 4; k < 400; k *= 2) {
            Solver s1 = new Solver(), s2 = new Solver();
            IntVar[] vs1, vs2;
            Propagator p1, p2;
            {
                IntVar X = VariableFactory.enumerated("X", 1, k, s1);
                IntVar Y = VariableFactory.enumerated("Y", 1, k, s1);
                vs1 = new IntVar[]{X, Y};
                Constraint c = IntConstraintFactory.distance(X, Y, "=", k / 2);
View Full Code Here

TOP

Related Classes of solver.constraints.Propagator

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.