diff --git a/bin/LagrangianRelaxation.linux.x86_64.gnu.opt.spx2 b/bin/LagrangianRelaxation.linux.x86_64.gnu.opt.spx2 index ea638c5e0e777f9e08b0754e9b5d1cc3d13871b7..df670b984a9b3923cac8b19b43fceac40efa82a4 100755 Binary files a/bin/LagrangianRelaxation.linux.x86_64.gnu.opt.spx2 and b/bin/LagrangianRelaxation.linux.x86_64.gnu.opt.spx2 differ diff --git a/obj/static/O.linux.x86_64.gnu.opt/probdata_lagr.o b/obj/static/O.linux.x86_64.gnu.opt/probdata_lagr.o index d45b27df8654dabad265f3f42c21036095e0f522..d8f8b75585f6cfe29fcadf2e41b9aa8a9dfcaebf 100644 Binary files a/obj/static/O.linux.x86_64.gnu.opt/probdata_lagr.o and b/obj/static/O.linux.x86_64.gnu.opt/probdata_lagr.o differ diff --git a/obj/static/O.linux.x86_64.gnu.opt/relax_lagr.o b/obj/static/O.linux.x86_64.gnu.opt/relax_lagr.o index 7319206ba46e924339c87e1f7a29f036757e7b6d..325a38aabac099715f853744ffd5789cdf2da38f 100644 Binary files a/obj/static/O.linux.x86_64.gnu.opt/relax_lagr.o and b/obj/static/O.linux.x86_64.gnu.opt/relax_lagr.o differ diff --git a/src/probdata_lagr.cpp b/src/probdata_lagr.cpp index 0a7e7ad92898686f49a45fd63098d2f533d46c89..32eab2dd2583f967608cff79af88e0331b523064 100644 --- a/src/probdata_lagr.cpp +++ b/src/probdata_lagr.cpp @@ -251,11 +251,9 @@ SCIP_RETCODE SCIPcreateprobdata SCIP_VAR* varx = (*varbuffers)[j]; int varbufindex = SCIPvarGetIndex(varx); assert(varbufindex != NULL); - (&listconsvarids)[counter]=varbufindex; + listconsvarids[counter]=varbufindex; counter++; - printf("(%d,%d) \t",counter,(&listnconsvars)[counter]); } - printf("\n"); } // counter=0; diff --git a/src/relax_lagr.cpp b/src/relax_lagr.cpp index 81aa9d79ae516c7dfa124f62ba4f2e2235afd8ea..e2570f8c662a7f821c011978679b7a91aeeec5d3 100644 --- a/src/relax_lagr.cpp +++ b/src/relax_lagr.cpp @@ -158,6 +158,13 @@ SCIP_DECL_RELAXINIT(relaxInitlagr) int* listnconsvars = SCIPlistnconsvars(probdata); int* listconsvarids = SCIPlistconsvarids(probdata); + int* increasingorder; //example {2,4,6,9,12,...} + SCIP_CALL(SCIPallocBufferArray(relaxscip,&increasingorder,nSlotConss)); + increasingorder[0] = listnconsvars[0]; + for(int r=1; r<nSlotConss;r++) + { + increasingorder[r]=listnconsvars[r]+increasingorder[r-1]; + } /* we then create the vardata function for each variable, to see at which constraint the variable is found*/ FILE* TimeCollector; TimeCollector = fopen("time.txt","w"); @@ -229,9 +236,9 @@ SCIP_DECL_RELAXINIT(relaxInitlagr) for(int t=0;t<NVarInBadConss;t++) { varids[t]=consids[t]; - // printf("%d \t",varids[t]); + printf("%d \t",varids[t]); } - + // printf("\n"); // // vardata=SCIPvarGetData(var); SCIP_CALL(SCIPallocBlockMemory(scip , &vardata)); SCIP_CALL(SCIPduplicateBlockMemoryArray(scip, &(vardata->varids), varids, NVarInBadConss)); @@ -351,14 +358,16 @@ SCIP_DECL_RELAXINIT(relaxInitlagr) SCIP_CALL(SCIPgetConsNVars(relaxscip, cons, &nconsvars, &valid)); SCIP_CALL(SCIPgetConsVars(relaxscip, cons, VARSinsidegoodconss, nconsvars, &valid)); if (!valid){abort(); } - printf("%s\n",SCIPconsGetName(cons)); + printf("\n %s\t",SCIPconsGetName(cons)); for (int j = 0; j < nconsvars; ++j) /* (8) */ { SCIP_VAR* varx = (VARSinsidegoodconss)[j]; - + printf("%s\t",SCIPvarGetName(varx)); int varbufindex = SCIPvarGetIndex(varx); //get the index, which will be used in assigning values to the feassol. assert(varbufindex != NULL); + printf("%d\t",varbufindex); + if (feasol[varbufindex]==-1) { @@ -370,46 +379,48 @@ SCIP_DECL_RELAXINIT(relaxInitlagr) feasol[varnextindex]=0; } - vardata = SCIPvarGetData(varx); - int NVarInBadConss = SCIPvardataGetNVarInBadConss(vardata); - if(NVarInBadConss==0){feasol[varbufindex]==1;} //which means if there is no restriction put for that variable. - - //and now, we go to the other variables together found in the badconss. - - int* varids = SCIPvardataGetvarids(vardata); //get the array containing the slots where the variable is located. + vardata=SCIPvarGetData(varx); + int* varids = SCIPvardataGetvarids(vardata); assert(varids=!NULL); - - for(int t=0; t<NVarInBadConss; ++t) + int NVarInBadConss = SCIPvardataGetNVarInBadConss(vardata); + printf("nvarincons = %d\t",NVarInBadConss); + for(int t=0;t<NVarInBadConss;t++) { - + printf("%d \n",varids[t]); + //varids[t] gives the constraint address. There we still would like to find out which variables are found. + for(int p=increasingorder[varids[t]]-NVarInBadConss; p<increasingorder[varids[t]]; ++p) + { + + if(SCIPvarGetIndex(vars[listconsvarids[p]])!=varbufindex) + { + printf("var = %s\t",SCIPvarGetName(vars[listconsvarids[p]])); + if(feasol[listconsvarids[p]]!=1) + { + feasol[listconsvarids[p]]=0; + } + } + } } - - + printf("\n"); } - - - + printf("(%s,%d,%f)\n",SCIPvarGetName(varx), varbufindex,feasol[varbufindex]); } - printf("\n"); + // printf("\n"); } - // for(int v=0;v<nvars;v++) - // { - // SCIP_VAR* var = SCIPgetVars(scip)[i]; - // id = SCIPvarGetIndex(var); - // vardata = SCIPvarGetData(var); - - // printf(" %d ",id); + for(int v=0;v<nvars;v++) + { + printf(" %d ",feasol[v]); - // } + } diff --git a/time.txt b/time.txt index dc6813bd3f801dfe1061aa7e35a40c6c5dd251e2..d9e6bc6bdd6903eb03031217f4bc6409b4e82974 100644 --- a/time.txt +++ b/time.txt @@ -1,2 +1,2 @@ - row and column identified in (sec) : 0.000053 + row and column identified in (sec) : 0.000258