[gecode-users] Immediate search failure

Joe Porter joe.porter at gmail.com
Tue Apr 28 23:02:59 CEST 2009


What are the possible reasons for an immediate search failure?  I've changed
something in my model, but I'm not sure what could be causing immediate
failures (using Gecode 2.2.0).  Setup code is below, and the output is at
the bottom.  This is solving a simple scheduling problem with a simple model
instance that I can solve by hand.  According to the debug statements, the
model should be feasible.  Or - maybe I've been looking at it for too
long...

Thanks,
-Joe

// CP Solver Engine
CPEngine::CPEngine( InstanceKeeper * pIK, unsigned long long min, unsigned
long long max ) :
    vars( this, pIK->NumVars(), (int) min, (int) max ),  // instantiate
constraint vars
    latencies( this, pIK->NumLatencies()+1, 0, (int) 2 * max ),
    lin_cstr(this,
1,0,1),                                                        /* not used
in this model */
    sat_cstr(this, 1, 0, (int) pIK->GetNumLinearRelations() ),   /* not used
in this model */
    _pIK( pIK )
{
    // All equality constraints
    LinearRelation lrel;
    bool loop = pIK->GetNextEqualityPair( lrel, true );
    while (loop)
    {
        IntVarArgs v(2);
        v[0] = vars[lrel.xvar];
        v[1] = vars[lrel.yvar];
        IntArgs a(2);
        a[0] = 1; // 'x' of x = y + o
        a[1] = -1; // 'y' of x = y + o
        linear( this, a, v, IRT_EQ, lrel.offset );
        cout << "Posted equality relation (x,y) = (" << lrel.xvar << "," <<
lrel.yvar << ") w/ offset " << lrel.offset << std::endl;
        loop = pIK->GetNextEqualityPair( lrel );
    }

    // All inequality constraints
    loop = pIK->GetNextInequalityPair( lrel, true );
    while (loop)
    {
        IntVarArgs v(2);
        v[0] = vars[lrel.xvar];
        v[1] = vars[lrel.yvar];
        IntArgs a(2);
        a[0] = 1; // 'x' of x <= y + o
        a[1] = -1; // 'y' of x <= y + o
        linear( this, a, v, IRT_LQ, lrel.offset );
        cout << "Posted inequality relation (x,y) = (" << lrel.xvar << ","
<< lrel.yvar << ") w/ offset " << lrel.offset << std::endl;
        loop = pIK->GetNextInequalityPair( lrel );
    }

    // All duration constraints
    DurativeVariable dv;
    loop = pIK->GetNextDuration( dv, true );
    while ( loop )
    {
        IntVarArgs v(1);
        v[0] = vars[dv.xvar];
        IntArgs a(1);
        a[0] = 1;
        linear( this, a, v, IRT_LQ, ((int)max) - dv.duration ); // don't run
over the end
        cout << "Posted duration relation (x) = (" << dv.xvar << ") w/
length " << dv.duration << std::endl;
        loop = pIK->GetNextDuration( dv );
    }

    // All serialization constraints
    int ser_count = 0;
    std::vector< DurativeVariable > vdv;
    loop = pIK->GetNextSerialization( vdv, true );
    while (loop) // && false)
    {
        IntVarArgs v( (int) vdv.size() );
        IntVarArgs e( (int) vdv.size() );
        IntArgs d( (int) vdv.size() );

        cout << "Serializing (x,d): ";
        for (unsigned int idx = 0; idx < vdv.size(); idx++ )
        {
            v[idx] = vars[vdv[idx].xvar];
            d[idx] = (int) vdv[idx].duration;
            e[idx].init(this,min,max);
            cout << "(" << vdv[idx].xvar << "," << vdv[idx].duration << "),
";
        }
        cout << endl;

        IntArgs height(v.size()), m(v.size());
        for ( int idx = v.size(); idx--; ) { height[idx] = 1; m[idx] = 0
/*ser_count*/; }
        cumulatives(this, m, v, d, e, height, 1, true );
        loop = pIK->GetNextSerialization( vdv );
        ser_count++;
    }

    // Instantiate latency variables here
    std::vector< LatencyBound > vlb;
    loop = pIK->GetNextLatencyBound( vlb, true );
    while ( loop )
    {

        std::vector< LatencyBound >::iterator pLB = vlb.begin();
        // First set up the range for the latency variables
        rel( this, latencies[pLB->latvar], IRT_GQ, 1 );
        rel( this, latencies[pLB->latvar], IRT_LQ, pLB->maxdist );

        cout << "Latency (l) = (" << pLB->latvar << ") alternatives: ";

        // Then define the relationship between the instances
        // and the latencies
        int k = 0;
        BoolVarArgs bs(vlb.size());
        for ( pLB = vlb.begin(); pLB != vlb.end(); pLB++ )
        {
            BoolVar b(this,0,1);
            IntVarArgs v(2);
            v[0] = vars[pLB->rcvrvar];
            v[1] = vars[pLB->sendervar];
            IntArgs a(2);
            a[0] = 1; // 'x' of x = y + o
            a[1] = -1; // 'y' of x = y + o
            cout << "(s,r) = (" << pLB->sendervar << "," << pLB->rcvrvar <<
") ";
            linear( this, a, v, IRT_EQ, latencies[pLB->latvar], b );
            bs[k++] = b;
        }
        cout << endl;
        linear( this, bs, IRT_GR, 0 ); // Force at least one of the
constraints in this collection to be true

        loop = pIK->GetNextLatencyBound( vlb );
    }

    // Dummy latency in case there are no latencies in the spec!
    // We have to branch on something!
    rel( this, latencies[pIK->NumLatencies()], IRT_GQ, 1 );
    rel( this, latencies[pIK->NumLatencies()], IRT_LQ, 1 );
    cout << "Dummy latency (==1)" << endl;

    // Do branching
    branch(this, vars, INT_VAR_REGRET_MAX_MAX, INT_VAL_MED);
    branch(this, latencies, INT_VAR_SIZE_MIN, INT_VAL_MAX ); // start with
max latency and work down
}

Domain size: 100000
Posted equality relation (x,y) = (0,1) w/ offset -20000
Posted equality relation (x,y) = (1,2) w/ offset -20000
Posted equality relation (x,y) = (2,3) w/ offset -20000
Posted equality relation (x,y) = (3,4) w/ offset -20000
Posted duration relation (x) = (4) w/ length 19 (0,max-19)
Posted duration relation (x) = (5) w/ length 57 (0, max-57)
Serializing (x,d): (0,19), (1,19), (2,19), (3,19), (4,19),
Dummy latency (==1)
Stats: Search Stats

Initial
        propagators:   4294967295
        branchings:    4294967295

Summary
        propagations:  0
        failures:      1
        clones:        0
        commits:       0
        peak memory:   5 KB
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.ps.uni-sb.de/pipermail/users/attachments/20090428/71e8ffd0/attachment.htm>


More information about the gecode-users mailing list