Skip to content

Commit e097011

Browse files
committed
remove inferred pricing vars from var arrays of gcgcols
1 parent 3fef4ea commit e097011

24 files changed

+401
-415
lines changed

src/gcg/branch_compbnd.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -510,7 +510,7 @@ SCIP_RETCODE createBranchingCons(
510510
(void) SCIPsnprintf(pricingvarname, SCIP_MAXSTRLEN, "g(%s)", name);
511511

512512
// create the g_x variable
513-
SCIP_CALL( GCGcreateInferredPricingVar(pricingscip, &coefvar, pricingvarname, 0.0, 1.0, 0.0, SCIP_VARTYPE_BINARY, branchdata->blocknr) );
513+
SCIP_CALL( GCGcreateInferredPricingVar(pricingscip, &coefvar, pricingvarname, 0.0, 1.0, TRUE, 0.0, SCIP_VARTYPE_BINARY, branchdata->blocknr) );
514514

515515
// create the y_j variables
516516

@@ -523,7 +523,7 @@ SCIP_RETCODE createBranchingCons(
523523
for (i = 0; i < branchdata->compBndSeqSize; ++i)
524524
{
525525
(void) SCIPsnprintf(pricingvarname, SCIP_MAXSTRLEN, "y(%s,%s_%s_%d)", name, SCIPvarGetName(branchdata->compBndSeq[i].component), branchdata->compBndSeq[i].sense == GCG_COMPBND_SENSE_GE ? "GE" : "LE", branchdata->compBndSeq[i].bound);
526-
SCIP_CALL( GCGcreateInferredPricingVar(pricingscip, &additionalvars[i], pricingvarname, 0.0, 1.0, 0.0, SCIP_VARTYPE_BINARY, branchdata->blocknr) );
526+
SCIP_CALL( GCGcreateInferredPricingVar(pricingscip, &additionalvars[i], pricingvarname, 0.0, 1.0, FALSE, 0.0, SCIP_VARTYPE_BINARY, branchdata->blocknr) );
527527
}
528528

529529
// create the pricing constraints

src/gcg/class_stabilization.cpp

+19-21
Original file line numberDiff line numberDiff line change
@@ -831,6 +831,8 @@ SCIP_Real Stabilization::calculateSubgradientProduct(
831831
}
832832

833833
/* extended master conss */
834+
GCG_PRICINGMODIFICATION** pricingmods;
835+
int block;
834836
for( int i = 0; i < nstabcenterextendedmasterconss; ++i )
835837
{
836838
SCIP_COL** cols;
@@ -885,18 +887,15 @@ SCIP_Real Stabilization::calculateSubgradientProduct(
885887
gradientproduct -= (dual - stabcenterextendedmasterconsvals[i]) * val;
886888
}
887889

888-
for( int block = 0; block < GCGgetNPricingprobs(gcg); block++ )
890+
pricingmods = GCGextendedmasterconsGetPricingModifications(tmpextendedmasterconsdata);
891+
for( int j = 0; j < GCGextendedmasterconsGetNPricingModifications(tmpextendedmasterconsdata); j++ )
889892
{
890-
if( !GCGisPricingprobRelevant(gcg, block) )
891-
continue;
892-
893-
GCG_PRICINGMODIFICATION* pricingmod = GCGextendedmasterconsGetPricingModification(gcg, tmpextendedmasterconsdata, block);
894-
if( pricingmod == NULL )
895-
continue;
896-
893+
block = GCGpricingmodificationGetBlock(pricingmods[j]);
894+
assert(pricingmods[j] != NULL);
895+
assert(GCGisPricingprobRelevant(gcg, block));
897896
assert(pricingcols[block] != NULL);
898897

899-
SCIP_VAR* pricingvar = GCGpricingmodificationGetCoefVar(pricingmod);
898+
SCIP_VAR* pricingvar = GCGpricingmodificationGetCoefVar(pricingmods[j]);
900899
assert(GCGvarIsInferredPricing(pricingvar));
901900
val = GCGcolGetSolVal(pricingcols[block], pricingvar);
902901
assert(!SCIPisInfinity(masterprob, ABS(val)));
@@ -915,10 +914,10 @@ SCIP_Real Stabilization::calculateSubgradientProduct(
915914
SCIP_VAR* mastervar;
916915
SCIP_VAR* pricingvar;
917916
SCIP_CONS* linkingcons = linkingconss[i];
918-
int block = linkingconsblocks[i];
919917
mastervar = SCIPgetVarsLinear(masterprob, linkingcons)[0];
920918
assert(GCGvarIsMaster(mastervar));
921919

920+
block = linkingconsblocks[i];
922921
pricingvar = GCGlinkingVarGetPricingVars(GCGmasterVarGetOrigvars(mastervar)[0])[block];
923922
assert(GCGvarIsPricing(pricingvar));
924923

@@ -948,7 +947,7 @@ SCIP_Real Stabilization::calculateSubgradientProduct(
948947
/** calculates the subgradient (with linking variables) */
949948
SCIP_RETCODE Stabilization::calculateSubgradient(
950949
GCG_COL** pricingcols /**< columns of the pricing problems */
951-
)
950+
)
952951
{
953952
SCIP* origprob = GCGgetOrigprob(gcg);
954953
SCIP_CONS** origmasterconss = GCGgetOrigMasterConss(gcg);
@@ -1109,6 +1108,8 @@ SCIP_RETCODE Stabilization::calculateSubgradient(
11091108
}
11101109

11111110
/* extended master conss */
1111+
GCG_PRICINGMODIFICATION** pricingmods;
1112+
int block;
11121113
for( int i = 0; i < nsubgradientextendedmasterconss; ++i )
11131114
{
11141115
SCIP_COL** cols;
@@ -1149,18 +1150,15 @@ SCIP_RETCODE Stabilization::calculateSubgradient(
11491150
activity += val;
11501151
}
11511152

1152-
for( int block = 0; block < GCGgetNPricingprobs(gcg); block++ )
1153+
pricingmods = GCGextendedmasterconsGetPricingModifications(tmpextendedmasterconsdata);
1154+
for( int j = 0; j < GCGextendedmasterconsGetNPricingModifications(tmpextendedmasterconsdata); j++ )
11531155
{
1154-
if( !GCGisPricingprobRelevant(gcg, block) )
1155-
continue;
1156-
1157-
GCG_PRICINGMODIFICATION* pricingmod = GCGextendedmasterconsGetPricingModification(gcg, tmpextendedmasterconsdata, block);
1158-
if( pricingmod == NULL )
1159-
continue;
1160-
1156+
block = GCGpricingmodificationGetBlock(pricingmods[j]);
1157+
assert(pricingmods[j] != NULL);
1158+
assert(GCGisPricingprobRelevant(gcg, block));
11611159
assert(pricingcols[block] != NULL);
11621160

1163-
SCIP_VAR* pricingvar = GCGpricingmodificationGetCoefVar(pricingmod);
1161+
SCIP_VAR* pricingvar = GCGpricingmodificationGetCoefVar(pricingmods[j]);
11641162
assert(GCGvarIsInferredPricing(pricingvar));
11651163
val = GCGcolGetSolVal(pricingcols[block], pricingvar);
11661164
assert(!SCIPisInfinity(masterprob, ABS(val)));
@@ -1193,12 +1191,12 @@ SCIP_RETCODE Stabilization::calculateSubgradient(
11931191
SCIP_VAR* mastervar;
11941192
SCIP_VAR* pricingvar;
11951193
SCIP_CONS* linkingcons = linkingconss[i];
1196-
int block = linkingconsblocks[i];
11971194
SCIP_Real activity;
11981195
SCIP_Real infeasibility;
11991196
mastervar = SCIPgetVarsLinear(masterprob, linkingcons)[0];
12001197
assert(GCGvarIsMaster(mastervar));
12011198

1199+
block = linkingconsblocks[i];
12021200
pricingvar = GCGlinkingVarGetPricingVars(GCGmasterVarGetOrigvars(mastervar)[0])[block];
12031201
assert(GCGvarIsPricing(pricingvar));
12041202
assert(pricingcols[block] != NULL);

src/gcg/colpool.c

+2-5
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ SCIP_RETCODE colpoolDelCol(
177177

178178
/* free the col */
179179
if( freecol )
180-
GCGfreeGcgCol(&colpool->cols[pos]);
180+
SCIP_CALL( GCGfreeGcgCol(&colpool->cols[pos]) );
181181

182182
/* move the last col of the pool to the free position */
183183
if( pos < colpool->ncols-1 )
@@ -229,7 +229,7 @@ SCIP_RETCODE GCGcolpoolAddCol(
229229
else if( freeduplicate )
230230
{
231231
assert(col->pos == -1);
232-
GCGfreeGcgCol(&col);
232+
SCIP_CALL( GCGfreeGcgCol(&col) );
233233
}
234234

235235
return SCIP_OKAY;
@@ -500,9 +500,6 @@ SCIP_RETCODE GCGcolpoolPropagateGlobalBounds(
500500

501501
for( i = 0; i < col->nvars; ++i )
502502
{
503-
if( GCGvarIsInferredPricing(col->vars[i]) )
504-
continue;
505-
506503
assert(GCGvarIsPricing(col->vars[i]) && GCGpricingVarGetNOrigvars(col->vars[i]) > 0 && GCGpricingVarGetOrigvars(col->vars[i])[0] != NULL);
507504
if( SCIPisFeasLT(col->pricingprob, col->vals[i], SCIPvarGetLbGlobal(GCGpricingVarGetOrigvars(col->vars[i])[0])) ||
508505
SCIPisFeasGT(col->pricingprob, col->vals[i], SCIPvarGetUbGlobal(GCGpricingVarGetOrigvars(col->vars[i])[0])) )

src/gcg/extendedmasterconsdata.c

+13-1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
#include "gcg/scip_misc.h"
4141
#include "gcg/pricer_gcg.h"
4242
#include "gcg/struct_extendedmasterconsdata.h"
43+
#include "gcg/struct_vardata.h"
4344

4445
#include "scip/scip.h"
4546
#include "scip/cons_linear.h"
@@ -109,7 +110,7 @@ SCIP_RETCODE GCGpricingmodificationCreate(
109110

110111
assert(blocknr < GCGgetNPricingprobs(gcg));
111112

112-
assert(coefvar != NULL);
113+
assert(coefvar != NULL && GCGinferredPricingVarIsCoefVar(coefvar));
113114
assert(GCGvarIsInferredPricing(coefvar));
114115
assert(additionalvars != NULL || nadditionalvars == 0);
115116
assert(additionalconss != NULL || nadditionalconss == 0);
@@ -479,6 +480,17 @@ int GCGpricingmodificationGetNAdditionalConss(
479480
}
480481
#endif
481482

483+
#ifndef NDEBUG
484+
/** get the number of the block the modification belongs to */
485+
int GCGpricingmodificationGetBlock(
486+
GCG_PRICINGMODIFICATION* pricingmodification /**< pricing modification */
487+
)
488+
{
489+
assert(pricingmodification != NULL);
490+
return pricingmodification->blocknr;
491+
}
492+
#endif
493+
482494
/** get the pricing modification for a block, if exists, else NULL */
483495
GCG_PRICINGMODIFICATION* GCGextendedmasterconsGetPricingModification(
484496
GCG* gcg, /**< GCG data structure */

0 commit comments

Comments
 (0)