[Scip] SCIPgetTransformedCons

Jose Walteros jl.walteros at gmail.com
Mon May 14 22:45:15 MEST 2012


Hi all, 

I am coding a branch and price using SCIP and I have a question about a segmentation problem within  the pricer. I was wondering if you guys can help me with it.

I used the bin packing example that you have, and so far everything has been working very smoothly (the branching, the constraint handler, etc), Although, I am experiencing a problem with the pricer. The problem is as follows:

I have two kinds of constraints that I require to get the duals from, to solve the pricer problem. The first kind are a set of constraints that I named parCons. For those constraints, I have been able to catch the transformed version of the constraints and obtain the duals without any problem.  

The second  kind  is a single constraint, some sort of a budget/ knapsack constraint. I defined it as follows:

    /* create set budget constraint */    
    (void) SCIPsnprintf(name, SCIP_MAXSTRLEN, "BudgetCon");
    SCIP_CALL( SCIPcreateConsLinear(scip, &budCons, name, 0,  NULL, NULL,
                                    -num_B,    /* lhs */
                                    SCIPinfinity(scip),                    /* rhs */
                                    TRUE,                   /* initial */
                                    TRUE,                  /* separate */
                                    TRUE,                   /* enforce */
                                    TRUE,                   /* check */
                                    TRUE,                   /* propagate */
                                    FALSE,                  /* local */
                                    TRUE,                   /* modifiable */
                                    FALSE,                  /* dynamic */
                                    FALSE,                  /* removable */
                                    FALSE) );               /* stickingatnode */
    SCIP_CALL( SCIPaddCons(scip, budCons) );

As I mentioned before, I used the bin packing example as a guide.

Now, in the code of the pricer, within function SCIP_DECL_PRICERINIT(pricerInitCCP),As you can see in the code below, I am trying to get the transformed version of this constraint but I am getting a segmentation problem. Apparently SCIP is not able to get the transformed constraint, it returns null. I tried to comment that line to see what happens, and the code starts working. However, when I call for the dual of budCon, it always returns 0 (which in my opinion is expected as is not the transformed constraint). 

The following is the code that I have


    /* get transformed constraints */
    for( c = 0; c < pricerdata->nodes; ++c )
    {
        cons = pricerdata->parCons[c];
        
        /* release original constraint */
        SCIP_CALL( SCIPreleaseCons(scip, &pricerdata->parCons[c]) );
        
        /* get transformed constraint */
        SCIP_CALL( SCIPgetTransformedCons(scip, cons, &pricerdata->parCons[c]) );
        
        /* capture transformed constraint */
        SCIP_CALL( SCIPcaptureCons(scip, pricerdata->parCons[c]) );
    }    
    
    cons = pricerdata->budCon;
    
    /* get transformed constraint */
    SCIP_CALL( SCIPgetTransformedCons(scip, cons, &pricerdata->budCon) );
    
    /* capture transformed constraint */
    /* THE SEGMENTATION PROBLEM OCCURS IN THIS LINE. APPARENTLY SCIP IS NOT ABLE TO CAPTURE THE TRANSFORMED CONSTRAINT (I.E., THE SCIPgetTransformedCon IS RETURNING NULL)*/
    /* I FIND THIS WEIRD BECAUSE IT WORKS PERFECTLY FOR THE STATEMENT WITHIN THE FOR LOOP ABOVE. I.E., IT WORKS FOR THE parCons but not for the budCon/*
    SCIP_CALL( SCIPcaptureCons(scip, pricerdata->budCon) );
    
At first I thought that the problem was happening because maybe I was not not transforming the constraint somewhere else in the code. However, I the function SCIP_DECL_PROBTRANS(probtransCcp) in prob_data, I have the following code:

    /* transform all constraints */
    SCIP_CALL( SCIPtransformCons(scip, (*targetdata)->budCons, &(*targetdata)->budCons) );
    SCIP_CALL( SCIPtransformConss(scip, (*targetdata)->num_nodes, (*targetdata)->parCons, (*targetdata)->parCons) );

I ran out of ideas. Could you please help me with this?

Thanks for your time and sorry for the long email. 

Jose L. Walteros                   
Ph.D. Student
Dept. of Industrial & Systems Engineering.                         
401 Weil Hall
University of Florida               
Gainesville, FL 32611-6595, USA



-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://listserv.zib.de/mailman/private/scip/attachments/20120514/c0e7a74f/attachment.html


More information about the Scip mailing list