diff --git a/bin/LagrangianRelaxation.linux.x86_64.gnu.opt.spx2 b/bin/LagrangianRelaxation.linux.x86_64.gnu.opt.spx2 index d6e0189acdfcd9bfd4ede9f9bc22480bf1be37d2..7646cf7ffeb605a22cfef039e9b54308b7470493 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 d8f8b75585f6cfe29fcadf2e41b9aa8a9dfcaebf..7e5b979768dd2bbe7213f53767eae1accfb489a8 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 fcd138f8fbd659a3e0ba26405738bf29074ea9aa..5484d4c3e92bf6ec17dd9678cf50ceae9b9a9c2d 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/obj/static/O.linux.x86_64.gnu.opt/vardata_lagr.o b/obj/static/O.linux.x86_64.gnu.opt/vardata_lagr.o index ca171ce968076c9a08438220d7c26d62567bff24..6974595e04195e1d80366d254d7b9f94484f7347 100644 Binary files a/obj/static/O.linux.x86_64.gnu.opt/vardata_lagr.o and b/obj/static/O.linux.x86_64.gnu.opt/vardata_lagr.o differ diff --git a/src/probdata_lagr.cpp b/src/probdata_lagr.cpp index 32eab2dd2583f967608cff79af88e0331b523064..20f6666df11db5ec0bbc27c1ba3f61d52228ba69 100644 --- a/src/probdata_lagr.cpp +++ b/src/probdata_lagr.cpp @@ -23,6 +23,8 @@ struct SCIP_ProbData int allnconsvars; int* listnconsvars; int* listconsvarids; + int* increasingorder; + }; @@ -44,6 +46,12 @@ SCIP_ProbData* probdata return probdata->listconsvarids; } +int* SCIPlistincreasing( +SCIP_ProbData* probdata +){ + return probdata->increasingorder; + } + SCIP_CONS** SCIPgetSlotConss( SCIP_ProbData* probdata ){ @@ -231,7 +239,7 @@ SCIP_RETCODE SCIPcreateprobdata { (*varbuffers)[v] =vars[v]; } - + printf("all = %d\n",allnconsvars); counter=0; for (int r = 0; r < nSlotConss; ++r) @@ -246,6 +254,7 @@ SCIP_RETCODE SCIPcreateprobdata if (!success){ abort(); } listnconsvars[r] = nconsvars; + printf(" %d ",listnconsvars[r]); for (int j = 0; j < nconsvars; ++j) /* (8) */ { SCIP_VAR* varx = (*varbuffers)[j]; @@ -255,7 +264,35 @@ SCIP_RETCODE SCIPcreateprobdata counter++; } } + printf("\n"); + int* increasingorder; //example {2,4,6,9,12,...} + SCIP_CALL(SCIPallocBufferArray(relaxscip,&increasingorder,nSlotConss)); + increasingorder[0] = listnconsvars[0]; //listnconsvars[0]; + for(int r=1; r<nSlotConss;r++) + { + increasingorder[r]=listnconsvars[r]+increasingorder[r-1]; + // printf(" %d ",increasingorder[r]); + } + for(int r=0; r<nSlotConss;r++) + { + for (int p = increasingorder[r]-listnconsvars[r]; p < increasingorder[r]; p++) + { + printf("%d ",listconsvarids[p]); + } + printf("\n"); + } + + // for(int s=0;s<allnconsvars;s++) + // { + // for(int p=2-NVarInBadConss; p<increasingorder[varids[t]]; ++p) + // { + // printf(" %d ",p); + // // printf("%s,",SCIPvarGetName(SCIPgetVars(relaxscip)[listconsvarids[s]])); + // } + // } + + // counter=0; // for(int r=0; r<nSlotConss;++r) // { @@ -330,6 +367,7 @@ SCIP_RETCODE SCIPcreateprobdata (*probdata)->allnconsvars= allnconsvars; //sum of all nconsvars; (*probdata)->listnconsvars = listnconsvars; (*probdata)->listconsvarids = listconsvarids; + (*probdata)->increasingorder = increasingorder; return SCIP_OKAY; } diff --git a/src/probdata_lagr.h b/src/probdata_lagr.h index de1c397f937960df4597e4e641191138c21fb5b0..8d074b7e0faf9d48874c7adf7c535512780151f2 100644 --- a/src/probdata_lagr.h +++ b/src/probdata_lagr.h @@ -53,6 +53,10 @@ int* SCIPlistconsvarids( SCIP_ProbData* probdata ); +int* SCIPlistincreasing( +SCIP_ProbData* probdata +); + SCIP_CONS** SCIPgetSlotConss( SCIP_ProbData* probdata ); @@ -68,6 +72,7 @@ int SCIPgetNSlotConss( SCIP_ProbData* probdata ); + /* here we create the probdata, which will be called for storage of values to the data*/ SCIP_RETCODE probdataCreate( SCIP* scip, /**< SCIP data structure */ diff --git a/src/relax_lagr.cpp b/src/relax_lagr.cpp index b205be991a32e0c7f1852bf2b67fe7ed9bb7a467..3cccb7ad99975aa52ebe5a937f82e6640da7ef2f 100644 --- a/src/relax_lagr.cpp +++ b/src/relax_lagr.cpp @@ -157,14 +157,9 @@ SCIP_DECL_RELAXINIT(relaxInitlagr) int allnconsvars = SCIPgetallnconsvars(probdata); //sum of all nconsvars, used for creating later on an array to collect the list of varids in each row int* listnconsvars = SCIPlistnconsvars(probdata); int* listconsvarids = SCIPlistconsvarids(probdata); + int* increasingorder = SCIPlistincreasing(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"); @@ -174,7 +169,6 @@ SCIP_DECL_RELAXINIT(relaxInitlagr) SCIP_CLOCK* totaliteration; //to help us record the time SCIP_CALL( SCIPcreateClock(relaxscip, &totaliteration) ); //* start time counting* - @@ -236,7 +230,7 @@ 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); @@ -333,11 +327,13 @@ SCIP_DECL_RELAXINIT(relaxInitlagr) feasol[v]=-1; //we assign initial values equal to -1, signifying that the variable's value hasn't been decided yet. } - for(int v=0;v<nvars;v++) - { - printf(" %d ",feasol[v]); + // for(int v=0;v<nvars;v++) + // { + // printf(" %d ",feasol[v]); - } + // } + + int* nvarsingoodconss; SCIP_CALL(SCIPallocBufferArray(relaxscip,&nvarsingoodconss,SCIPgetNConss(relaxscip))); //will contain {9,9,9,9,9,9} for the 6f4s problem. @@ -364,14 +360,14 @@ SCIP_DECL_RELAXINIT(relaxInitlagr) SCIP_CALL(SCIPgetConsNVars(relaxscip, cons, &nconsvars, &valid)); SCIP_CALL(SCIPgetConsVars(relaxscip, cons, VARSinsidegoodconss, nconsvars, &valid)); if (!valid){abort(); } - //printf("\n %s\t",SCIPconsGetName(cons)); + printf("\n %s\n",SCIPconsGetName(cons)); for (int j = 0; j < nconsvars; ++j) /* (8) */ { SCIP_VAR* varx = (VARSinsidegoodconss)[j]; - //printf("%s\t",SCIPvarGetName(varx)); + 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); + // printf("%d\t",varbufindex); @@ -389,17 +385,18 @@ SCIP_DECL_RELAXINIT(relaxInitlagr) int* varids = SCIPvardataGetvarids(vardata); assert(varids=!NULL); int NVarInBadConss = SCIPvardataGetNVarInBadConss(vardata); - //printf("nvarincons = %d\t",NVarInBadConss); + 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) + printf("%d \t",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]]-listnconsvars[varids[t]]; p<increasingorder[varids[t]]; ++p) { - + if(SCIPvarGetIndex(vars[listconsvarids[p]])!=varbufindex) { - // printf("var = %s\t",SCIPvarGetName(vars[listconsvarids[p]])); + printf("var = %s\t",SCIPvarGetName(vars[listconsvarids[p]])); if(feasol[listconsvarids[p]]==-1) { feasol[listconsvarids[p]]=0; @@ -407,11 +404,11 @@ SCIP_DECL_RELAXINIT(relaxInitlagr) } } } - printf("\n"); + // printf("\n"); } - printf("(%s,%d,%f)\n",SCIPvarGetName(varx), varbufindex,feasol[varbufindex]); + printf("(%s,%d,%d)\n",SCIPvarGetName(varx), varbufindex,feasol[varbufindex]); diff --git a/time.txt b/time.txt index 26bce90a7a526809dcaa728b998930f06a2d7618..91b260f8002e5259d9bc08a50607a2b0e60ae492 100644 --- a/time.txt +++ b/time.txt @@ -1,2 +1,2 @@ - row and column identified in (sec) : 0.000090 + row and column identified in (sec) : 0.000252