diff --git a/AfterPreProcessing.txt b/AfterPreProcessing.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/bin/LagrangianRelaxation.linux.x86_64.gnu.opt.spx2 b/bin/LagrangianRelaxation.linux.x86_64.gnu.opt.spx2 index 5e83e6ad70999dad48a0743cdcd6053bfa4fbf60..3cc3f53e32b69aab6b8d4061ee8c57d4edbe8940 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/dual.txt b/dual.txt new file mode 100644 index 0000000000000000000000000000000000000000..9a989c716c2ec17c0854e245ef7d5f14751b0810 --- /dev/null +++ b/dual.txt @@ -0,0 +1,876 @@ +objective value: 2 +t_x_{1}_{0} 1 (obj:2) +t_x_{2}_{0} 1 (obj:0) +t_x_{3}_{0} 1 (obj:0) +t_x_{4}_{0} 1 (obj:0) +t_x_{5}_{0} 1 (obj:0) +t_x_{6}_{0} 1 (obj:0) +dualbound = 2.000000, lowerbound=1.000000, norm of subgrad 6.782330 objective value: 15 +t_x_{1}_{0} 1 (obj:5) +t_x_{2}_{0} 1 (obj:3) +t_x_{3}_{0} 1 (obj:4) +t_x_{4}_{0} 1 (obj:4) +t_x_{5}_{0} 1 (obj:4) +t_x_{6}_{0} 1 (obj:2) +dualbound = 22.000000, lowerbound=1.000000, norm of subgrad 6.782330 objective value: 28 +t_x_{1}_{0} 1 (obj:8) +t_x_{2}_{0} 1 (obj:6) +t_x_{3}_{0} 1 (obj:8) +t_x_{4}_{0} 1 (obj:8) +t_x_{5}_{0} 1 (obj:8) +t_x_{6}_{0} 1 (obj:4) +dualbound = 42.000000, lowerbound=1.000000, norm of subgrad 6.782330 objective value: 41 +t_x_{1}_{0} 1 (obj:11) +t_x_{2}_{0} 1 (obj:9) +t_x_{3}_{0} 1 (obj:12) +t_x_{4}_{0} 1 (obj:12) +t_x_{5}_{0} 1 (obj:12) +t_x_{6}_{0} 1 (obj:6) +dualbound = 62.000000, lowerbound=1.000000, norm of subgrad 6.782330 objective value: 54 +t_x_{1}_{0} 1 (obj:14) +t_x_{2}_{0} 1 (obj:12) +t_x_{3}_{0} 1 (obj:16) +t_x_{4}_{0} 1 (obj:16) +t_x_{5}_{0} 1 (obj:16) +t_x_{6}_{0} 1 (obj:8) +dualbound = 82.000000, lowerbound=1.000000, norm of subgrad 6.782330 objective value: 67 +t_x_{1}_{0} 1 (obj:17) +t_x_{2}_{0} 1 (obj:15) +t_x_{3}_{0} 1 (obj:20) +t_x_{4}_{0} 1 (obj:20) +t_x_{5}_{0} 1 (obj:20) +t_x_{6}_{0} 1 (obj:10) +dualbound = 102.000000, lowerbound=1.000000, norm of subgrad 6.782330 objective value: 80 +t_x_{1}_{0} 1 (obj:20) +t_x_{2}_{0} 1 (obj:18) +t_x_{3}_{0} 1 (obj:24) +t_x_{4}_{0} 1 (obj:24) +t_x_{5}_{0} 1 (obj:24) +t_x_{6}_{0} 1 (obj:12) +dualbound = 122.000000, lowerbound=1.000000, norm of subgrad 6.782330 objective value: 93 +t_x_{1}_{0} 1 (obj:23) +t_x_{2}_{0} 1 (obj:21) +t_x_{3}_{0} 1 (obj:28) +t_x_{4}_{0} 1 (obj:28) +t_x_{5}_{0} 1 (obj:28) +t_x_{6}_{0} 1 (obj:14) +dualbound = 142.000000, lowerbound=1.000000, norm of subgrad 6.782330 objective value: 100 +t_x_{1}_{0} 1 (obj:26) +t_x_{2}_{0} 1 (obj:24) +t_x_{3}_{15} 1 (obj:30) +t_x_{4}_{15} 1 (obj:30) +t_x_{5}_{15} 1 (obj:30) +t_x_{6}_{0} 1 (obj:16) +dualbound = 156.000000, lowerbound=46.000000, norm of subgrad 5.830952 objective value: 104 +t_x_{1}_{0} 1 (obj:27) +t_x_{2}_{0} 1 (obj:25) +t_x_{3}_{0} 1 (obj:32) +t_x_{4}_{0} 1 (obj:32) +t_x_{5}_{0} 1 (obj:32) +t_x_{6}_{0} 1 (obj:16) +dualbound = 164.000000, lowerbound=1.000000, norm of subgrad 6.782330 objective value: 102 +t_x_{1}_{0} 1 (obj:30) +t_x_{2}_{0} 1 (obj:28) +t_x_{3}_{15} 1 (obj:30) +t_x_{4}_{15} 1 (obj:30) +t_x_{5}_{15} 1 (obj:30) +t_x_{6}_{0} 1 (obj:18) +dualbound = 166.000000, lowerbound=46.000000, norm of subgrad 5.830952 objective value: 106 +t_x_{1}_{0} 1 (obj:31) +t_x_{2}_{0} 1 (obj:29) +t_x_{3}_{15} 1 (obj:32) +t_x_{4}_{15} 1 (obj:32) +t_x_{5}_{15} 1 (obj:32) +t_x_{6}_{0} 1 (obj:18) +dualbound = 174.000000, lowerbound=46.000000, norm of subgrad 5.830952 objective value: 110 +t_x_{1}_{0} 1 (obj:32) +t_x_{2}_{0} 1 (obj:30) +t_x_{3}_{15} 1 (obj:34) +t_x_{4}_{15} 1 (obj:34) +t_x_{5}_{15} 1 (obj:34) +t_x_{6}_{0} 1 (obj:18) +dualbound = 182.000000, lowerbound=46.000000, norm of subgrad 5.830952 objective value: 114 +t_x_{1}_{0} 1 (obj:33) +t_x_{2}_{0} 1 (obj:31) +t_x_{3}_{0} 1 (obj:36) +t_x_{4}_{0} 1 (obj:36) +t_x_{5}_{0} 1 (obj:36) +t_x_{6}_{0} 1 (obj:18) +dualbound = 190.000000, lowerbound=1.000000, norm of subgrad 6.782330 objective value: 106 +t_x_{1}_{15} 1 (obj:32) +t_x_{2}_{15} 1 (obj:32) +t_x_{3}_{15} 1 (obj:34) +t_x_{4}_{15} 1 (obj:34) +t_x_{5}_{15} 1 (obj:34) +t_x_{6}_{0} 1 (obj:20) +dualbound = 186.000000, lowerbound=75.000000, norm of subgrad 6.480741 objective value: 115 +t_x_{1}_{0} 1 (obj:34) +t_x_{2}_{0} 1 (obj:32) +t_x_{3}_{15} 1 (obj:38) +t_x_{4}_{15} 1 (obj:37) +t_x_{5}_{15} 1 (obj:37) +t_x_{6}_{0} 1 (obj:20) +dualbound = 198.000000, lowerbound=46.000000, norm of subgrad 5.830952 objective value: 118 +t_x_{1}_{0} 1 (obj:35) +t_x_{2}_{0} 1 (obj:33) +t_x_{3}_{0} 1 (obj:38) +t_x_{4}_{0} 1 (obj:39) +t_x_{5}_{0} 1 (obj:39) +t_x_{6}_{0} 1 (obj:20) +dualbound = 204.000000, lowerbound=1.000000, norm of subgrad 6.782330 objective value: 112 +t_x_{1}_{15} 1 (obj:34) +t_x_{2}_{15} 1 (obj:34) +t_x_{3}_{15} 1 (obj:38) +t_x_{4}_{15} 1 (obj:37) +t_x_{5}_{15} 1 (obj:37) +t_x_{6}_{0} 1 (obj:22) +dualbound = 202.000000, lowerbound=75.000000, norm of subgrad 6.480741 objective value: 119 +t_x_{1}_{0} 1 (obj:36) +t_x_{2}_{0} 1 (obj:34) +t_x_{3}_{0} 1 (obj:40) +t_x_{4}_{15} 1 (obj:40) +t_x_{5}_{15} 1 (obj:40) +t_x_{6}_{0} 1 (obj:22) +dualbound = 212.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 122 +t_x_{1}_{15} 1 (obj:36) +t_x_{2}_{15} 1 (obj:36) +t_x_{3}_{15} 1 (obj:42) +t_x_{4}_{15} 1 (obj:41) +t_x_{5}_{15} 1 (obj:41) +t_x_{6}_{0} 1 (obj:22) +dualbound = 218.000000, lowerbound=75.000000, norm of subgrad 6.480741 objective value: 117 +t_x_{1}_{0} 1 (obj:36) +t_x_{2}_{0} 1 (obj:34) +t_x_{3}_{0} 1 (obj:40) +t_x_{4}_{0} 1 (obj:42) +t_x_{5}_{0} 1 (obj:42) +t_x_{6}_{0} 1 (obj:22) +dualbound = 216.000000, lowerbound=1.000000, norm of subgrad 6.782330 objective value: 124 +t_x_{1}_{15} 1 (obj:37) +t_x_{2}_{15} 1 (obj:37) +t_x_{3}_{15} 1 (obj:44) +t_x_{4}_{15} 1 (obj:42) +t_x_{5}_{15} 1 (obj:42) +t_x_{6}_{0} 1 (obj:24) +dualbound = 226.000000, lowerbound=75.000000, norm of subgrad 6.480741 objective value: 123 +t_x_{1}_{0} 1 (obj:37) +t_x_{2}_{0} 1 (obj:35) +t_x_{3}_{0} 1 (obj:42) +t_x_{4}_{0} 1 (obj:45) +t_x_{5}_{0} 1 (obj:45) +t_x_{6}_{0} 1 (obj:24) +dualbound = 228.000000, lowerbound=1.000000, norm of subgrad 6.782330 objective value: 126 +t_x_{1}_{15} 1 (obj:38) +t_x_{2}_{15} 1 (obj:38) +t_x_{3}_{15} 1 (obj:46) +t_x_{4}_{15} 1 (obj:43) +t_x_{5}_{15} 1 (obj:43) +t_x_{6}_{0} 1 (obj:26) +dualbound = 234.000000, lowerbound=75.000000, norm of subgrad 6.480741 objective value: 125 +t_x_{1}_{0} 1 (obj:38) +t_x_{2}_{0} 1 (obj:36) +t_x_{3}_{0} 1 (obj:44) +t_x_{4}_{15} 1 (obj:46) +t_x_{5}_{15} 1 (obj:46) +t_x_{6}_{0} 1 (obj:26) +dualbound = 236.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 130 +t_x_{1}_{0} 1 (obj:40) +t_x_{2}_{0} 1 (obj:38) +t_x_{3}_{0} 1 (obj:46) +t_x_{4}_{15} 1 (obj:47) +t_x_{5}_{15} 1 (obj:47) +t_x_{6}_{0} 1 (obj:26) +dualbound = 244.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 132 +t_x_{1}_{15} 1 (obj:40) +t_x_{2}_{0} 1 (obj:40) +t_x_{3}_{0} 1 (obj:48) +t_x_{4}_{15} 1 (obj:48) +t_x_{5}_{15} 1 (obj:48) +t_x_{6}_{0} 1 (obj:26) +dualbound = 250.000000, lowerbound=45.000000, norm of subgrad 5.656854 objective value: 134 +t_x_{1}_{15} 1 (obj:41) +t_x_{2}_{15} 1 (obj:40) +t_x_{3}_{0} 1 (obj:49) +t_x_{4}_{15} 1 (obj:49) +t_x_{5}_{0} 1 (obj:50) +t_x_{6}_{0} 1 (obj:26) +dualbound = 255.000000, lowerbound=45.000000, norm of subgrad 5.830952 objective value: 135 +t_x_{1}_{0} 1 (obj:42) +t_x_{2}_{0} 1 (obj:40) +t_x_{3}_{0} 1 (obj:50) +t_x_{4}_{15} 1 (obj:50) +t_x_{5}_{15} 1 (obj:50) +t_x_{6}_{0} 1 (obj:27) +dualbound = 259.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 136 +t_x_{1}_{15} 1 (obj:41) +t_x_{2}_{15} 1 (obj:41) +t_x_{3}_{15} 1 (obj:52) +t_x_{4}_{15} 1 (obj:51) +t_x_{5}_{15} 1 (obj:51) +t_x_{6}_{0} 1 (obj:27) +dualbound = 263.000000, lowerbound=75.000000, norm of subgrad 6.480741 objective value: 133 +t_x_{1}_{0} 1 (obj:42) +t_x_{2}_{0} 1 (obj:40) +t_x_{3}_{0} 1 (obj:50) +t_x_{4}_{0} 1 (obj:52) +t_x_{5}_{0} 1 (obj:52) +t_x_{6}_{0} 1 (obj:27) +dualbound = 263.000000, lowerbound=1.000000, norm of subgrad 6.782330 objective value: 138 +t_x_{1}_{15} 1 (obj:42) +t_x_{2}_{15} 1 (obj:42) +t_x_{3}_{15} 1 (obj:54) +t_x_{4}_{15} 1 (obj:52) +t_x_{5}_{15} 1 (obj:52) +t_x_{6}_{0} 1 (obj:29) +dualbound = 271.000000, lowerbound=75.000000, norm of subgrad 6.480741 objective value: 139 +t_x_{1}_{0} 1 (obj:43) +t_x_{2}_{0} 1 (obj:41) +t_x_{3}_{0} 1 (obj:52) +t_x_{4}_{0} 1 (obj:55) +t_x_{5}_{0} 1 (obj:55) +t_x_{6}_{0} 1 (obj:29) +dualbound = 275.000000, lowerbound=1.000000, norm of subgrad 6.782330 objective value: 140 +t_x_{1}_{15} 1 (obj:43) +t_x_{2}_{15} 1 (obj:43) +t_x_{3}_{15} 1 (obj:56) +t_x_{4}_{15} 1 (obj:53) +t_x_{5}_{15} 1 (obj:53) +t_x_{6}_{0} 1 (obj:31) +dualbound = 279.000000, lowerbound=75.000000, norm of subgrad 6.480741 objective value: 141 +t_x_{1}_{0} 1 (obj:44) +t_x_{2}_{0} 1 (obj:42) +t_x_{3}_{0} 1 (obj:54) +t_x_{4}_{15} 1 (obj:56) +t_x_{5}_{15} 1 (obj:56) +t_x_{6}_{0} 1 (obj:31) +dualbound = 283.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 145 +t_x_{1}_{15} 1 (obj:45) +t_x_{2}_{0} 1 (obj:44) +t_x_{3}_{0} 1 (obj:56) +t_x_{4}_{15} 1 (obj:57) +t_x_{5}_{15} 1 (obj:57) +t_x_{6}_{0} 1 (obj:31) +dualbound = 290.000000, lowerbound=45.000000, norm of subgrad 5.656854 objective value: 148 +t_x_{1}_{15} 1 (obj:46) +t_x_{2}_{15} 1 (obj:45) +t_x_{3}_{0} 1 (obj:57) +t_x_{4}_{15} 1 (obj:58) +t_x_{5}_{0} 1 (obj:59) +t_x_{6}_{0} 1 (obj:31) +dualbound = 296.000000, lowerbound=45.000000, norm of subgrad 5.830952 objective value: 147 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:44) +t_x_{3}_{0} 1 (obj:58) +t_x_{4}_{15} 1 (obj:59) +t_x_{5}_{15} 1 (obj:59) +t_x_{6}_{0} 1 (obj:32) +dualbound = 298.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 150 +t_x_{1}_{15} 1 (obj:46) +t_x_{2}_{0} 1 (obj:46) +t_x_{3}_{0} 1 (obj:60) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 304.000000, lowerbound=45.000000, norm of subgrad 5.656854 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 objective value: 148 +t_x_{1}_{15} 1 (obj:47) +t_x_{2}_{15} 1 (obj:46) +t_x_{3}_{30} 1 (obj:60) +t_x_{4}_{30} 1 (obj:60) +t_x_{5}_{30} 1 (obj:60) +t_x_{6}_{0} 1 (obj:32) +dualbound = 305.000000, lowerbound=120.000000, norm of subgrad 5.830952 objective value: 146 +t_x_{1}_{0} 1 (obj:46) +t_x_{2}_{0} 1 (obj:45) +t_x_{3}_{0} 1 (obj:59) +t_x_{4}_{15} 1 (obj:60) +t_x_{5}_{15} 1 (obj:61) +t_x_{6}_{0} 1 (obj:32) +dualbound = 303.000000, lowerbound=31.000000, norm of subgrad 5.830952 \ No newline at end of file diff --git a/lowerbounds.txt b/lowerbounds.txt new file mode 100644 index 0000000000000000000000000000000000000000..78a0c6f4ca97f15ca8e5bf2587b5a8520e4c78b4 --- /dev/null +++ b/lowerbounds.txt @@ -0,0 +1,126 @@ +125 +1.000000 +1.000000 +1.000000 +1.000000 +1.000000 +1.000000 +1.000000 +1.000000 +46.000000 +1.000000 +46.000000 +46.000000 +46.000000 +1.000000 +75.000000 +46.000000 +1.000000 +75.000000 +31.000000 +75.000000 +1.000000 +75.000000 +1.000000 +75.000000 +31.000000 +31.000000 +45.000000 +45.000000 +31.000000 +75.000000 +1.000000 +75.000000 +1.000000 +75.000000 +31.000000 +45.000000 +45.000000 +31.000000 +45.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 +120.000000 +31.000000 diff --git a/obj/static/O.linux.x86_64.gnu.opt/probdata_lagr.d b/obj/static/O.linux.x86_64.gnu.opt/probdata_lagr.d index f2767b4fafec7abb9ccd65f26e293b7fce7194c0..b5055b69b0805bc1bb473bac76f9ea1e2d6da137 100644 --- a/obj/static/O.linux.x86_64.gnu.opt/probdata_lagr.d +++ b/obj/static/O.linux.x86_64.gnu.opt/probdata_lagr.d @@ -86,4 +86,4 @@ obj/static/O.linux.x86_64.gnu.opt/probdata_lagr.o: src/probdata_lagr.cpp \ ../../src/scip/scip_solve.h ../../src/scip/scip_solvingstats.h \ ../../src/scip/scip_table.h ../../src/scip/scip_timing.h \ ../../src/scip/scip_tree.h ../../src/scip/scip_validation.h \ - ../../src/scip/scip_var.h src/vardata_lagr.h + ../../src/scip/scip_var.h src/vardata_lagr.h src/relax_lagr.h 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 bb713b419cb8f26e58ee6caebd6158c5da4e9b56..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 de698773739367e637abb7408e08ff3ad7ec3c81..3efb4b2450cf7e55c1545e4712563848fc3259dd 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/sol.txt b/sol.txt new file mode 100644 index 0000000000000000000000000000000000000000..cec5f6155c2fca5b615bd14dda24cea8b5ca368a --- /dev/null +++ b/sol.txt @@ -0,0 +1,251 @@ +number of solutions 1, first iteration bound=2.000000, objsol=2.000000 +lowerbound = 1.000000 + number of solutions 1, first iteration bound=15.000000, objsol=15.000000 +lowerbound = 1.000000 + number of solutions 1, first iteration bound=28.000000, objsol=28.000000 +lowerbound = 1.000000 + number of solutions 1, first iteration bound=41.000000, objsol=41.000000 +lowerbound = 1.000000 + number of solutions 1, first iteration bound=54.000000, objsol=54.000000 +lowerbound = 1.000000 + number of solutions 1, first iteration bound=67.000000, objsol=67.000000 +lowerbound = 1.000000 + number of solutions 1, first iteration bound=80.000000, objsol=80.000000 +lowerbound = 1.000000 + number of solutions 1, first iteration bound=93.000000, objsol=93.000000 +lowerbound = 1.000000 + number of solutions 2, first iteration bound=100.000000, objsol=100.000000 +lowerbound = 46.000000 + number of solutions 2, first iteration bound=104.000000, objsol=104.000000 +lowerbound = 1.000000 + number of solutions 2, first iteration bound=102.000000, objsol=102.000000 +lowerbound = 46.000000 + number of solutions 2, first iteration bound=106.000000, objsol=106.000000 +lowerbound = 46.000000 + number of solutions 2, first iteration bound=110.000000, objsol=110.000000 +lowerbound = 46.000000 + number of solutions 2, first iteration bound=114.000000, objsol=114.000000 +lowerbound = 1.000000 + number of solutions 3, first iteration bound=106.000000, objsol=106.000000 +lowerbound = 75.000000 + number of solutions 3, first iteration bound=115.000000, objsol=115.000000 +lowerbound = 46.000000 + number of solutions 3, first iteration bound=118.000000, objsol=118.000000 +lowerbound = 1.000000 + number of solutions 3, first iteration bound=112.000000, objsol=112.000000 +lowerbound = 75.000000 + number of solutions 4, first iteration bound=119.000000, objsol=119.000000 +lowerbound = 31.000000 + number of solutions 4, first iteration bound=122.000000, objsol=122.000000 +lowerbound = 75.000000 + number of solutions 4, first iteration bound=117.000000, objsol=117.000000 +lowerbound = 1.000000 + number of solutions 4, first iteration bound=124.000000, objsol=124.000000 +lowerbound = 75.000000 + number of solutions 4, first iteration bound=123.000000, objsol=123.000000 +lowerbound = 1.000000 + number of solutions 4, first iteration bound=126.000000, objsol=126.000000 +lowerbound = 75.000000 + number of solutions 4, first iteration bound=125.000000, objsol=125.000000 +lowerbound = 31.000000 + number of solutions 4, first iteration bound=130.000000, objsol=130.000000 +lowerbound = 31.000000 + number of solutions 5, first iteration bound=132.000000, objsol=132.000000 +lowerbound = 45.000000 + number of solutions 6, first iteration bound=134.000000, objsol=134.000000 +lowerbound = 45.000000 + number of solutions 6, first iteration bound=135.000000, objsol=135.000000 +lowerbound = 31.000000 + number of solutions 6, first iteration bound=136.000000, objsol=136.000000 +lowerbound = 75.000000 + number of solutions 6, first iteration bound=133.000000, objsol=133.000000 +lowerbound = 1.000000 + number of solutions 6, first iteration bound=138.000000, objsol=138.000000 +lowerbound = 75.000000 + number of solutions 6, first iteration bound=139.000000, objsol=139.000000 +lowerbound = 1.000000 + number of solutions 6, first iteration bound=140.000000, objsol=140.000000 +lowerbound = 75.000000 + number of solutions 6, first iteration bound=141.000000, objsol=141.000000 +lowerbound = 31.000000 + number of solutions 6, first iteration bound=145.000000, objsol=145.000000 +lowerbound = 45.000000 + number of solutions 6, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 45.000000 + number of solutions 6, first iteration bound=147.000000, objsol=147.000000 +lowerbound = 31.000000 + number of solutions 6, first iteration bound=150.000000, objsol=150.000000 +lowerbound = 45.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + number of solutions 7, first iteration bound=148.000000, objsol=148.000000 +lowerbound = 120.000000 + number of solutions 7, first iteration bound=146.000000, objsol=146.000000 +lowerbound = 31.000000 + \ No newline at end of file diff --git a/src/probdata_lagr.cpp b/src/probdata_lagr.cpp index cf583765177aeb2f75e35a22e57e68414821c919..32eab2dd2583f967608cff79af88e0331b523064 100644 --- a/src/probdata_lagr.cpp +++ b/src/probdata_lagr.cpp @@ -6,6 +6,7 @@ #include <assert.h> #include <stdlib.h> #include <string.h> +#include "relax_lagr.h" /*Using ProbData as a memory location for the constraints*/ struct SCIP_ProbData { @@ -14,11 +15,14 @@ struct SCIP_ProbData int* varids; /**<Ids for the variables found in the slot constraint*/ int nSlotConss; // number of slot constraints. int nStartConss; - SCIP_Real* upperbound; + SCIP_Real* upperbound; int nbadconss; int ngoodconss; int* badconss; int* goodconss; + int allnconsvars; + int* listnconsvars; + int* listconsvarids; }; @@ -28,6 +32,18 @@ SCIP_ProbData* probdata return probdata->varids; } +int* SCIPlistnconsvars( +SCIP_ProbData* probdata +){ + return probdata->listnconsvars; + } + +int* SCIPlistconsvarids( +SCIP_ProbData* probdata +){ + return probdata->listconsvarids; + } + SCIP_CONS** SCIPgetSlotConss( SCIP_ProbData* probdata ){ @@ -40,6 +56,12 @@ SCIP_ProbData* probdata return probdata->nSlotConss; } +int SCIPgetallnconsvars( +SCIP_ProbData* probdata +){ + return probdata->allnconsvars; + } + SCIP_RETCODE GetNGoodandNbad( SCIP* scip, int* nbad, @@ -138,43 +160,176 @@ SCIP_RETCODE probdataFree( /*We will create the probdata to have the slot constraints and the variables they hold withn them*/ SCIP_RETCODE SCIPcreateprobdata -( SCIP* scip, - SCIP_ProbData** probdata +( SCIP* relaxscip, + SCIP_ProbData** probdata, + SCIP_CONS** conss, + SCIP_VAR** vars, + SCIP_VAR*** varbuffers, + int** badconss ) { - SCIP_CONS** conss = SCIPgetConss(scip); - int nconss = SCIPgetNConss(scip); + int nconss = SCIPgetNConss(relaxscip); + int nvars = SCIPgetNVars(relaxscip); int nSlotConss = 0; - + int id =0; SCIP_Bool success; for (int t=0; t<nconss; t++) /* (3) */ { - SCIP_CONS* cons = conss[t]; - if(SCIPconsGetLhs(scip,cons,&success)==-SCIPinfinity(scip)) /*<We get the slot constraints based on the inquality*/ + if(SCIPconsGetLhs(relaxscip,cons,&success)==-SCIPinfinity(relaxscip)) /*<We get the slot constraints based on the inquality*/ { - // printf("%s)",SCIPconsGetName(cons)); ++nSlotConss; } - //* To make sure that there is no misarrangmenets, we make sure that the slot and start constraints are clearly separated*// - // else if(SCIPconsGetLhs(scip,cons,&success)==SCIPinfinity(scip)) - // { - // for (int i = t; i < nconss; i++) - // { - // SCIP_CONS* nextcons = conss[i+1]; - // if (SCIPconsGetLhs(scip,nextcons,&success)==-SCIPinfinity(scip)) - // { - // printf("oops"); - // SCIPerrorMessage("\n********\tLagrangian Relaxation CAN'T BE USED!\t********* \n The problem has mixed it's inequality and equality(bad and good) constraints. Please rearrange with first bad then good\n"); - // SCIPABORT(); - // break; - // } - - // } - // } } - SCIP_CALL(SCIPallocMemory(scip,probdata)); + printf("%d nslot conss",nSlotConss); + + int allnconsvars=0; + int nconsvars=0; + int counter = 0; + int maxnconsvars = 0; + + + SCIP_CALL(SCIPallocBufferArray(relaxscip, badconss, nSlotConss)); //the badconss array will contain the row number of the bad conss + + /* + we first get the row numbers of the bad conss, and save to the array: badconss. + */ + for(int r = 0; r<nconss; ++r) + { + SCIP_CONS* cons = conss[r]; + + if(SCIPconsGetLhs(relaxscip,cons,&success)==-SCIPinfinity(relaxscip)) /*<We get the slot constraints based on the inquality*/ + { + (*badconss)[counter]=r; + SCIP_CALL(SCIPgetConsNVars(relaxscip,cons,&nconsvars,&success)); + counter++; + if(maxnconsvars<nconsvars){maxnconsvars=nconsvars;} + allnconsvars+=nconsvars; + } + } + + /* + Our first objective is to create an array, containing the non-zero variables + found in each bad conss. But instead of listing them in multiple rows, we list them just in one. + for example: slot1 have vars[0] and vars[10] non-zero and slot2 has vars[1] and vars[11]. + listconsvarids = {0,10,1,11, ...} + */ + int* listconsvarids; //examples {0,10,1,11,2,12,...} we use the + SCIP_CALL(SCIPallocBufferArray(relaxscip,&listconsvarids,allnconsvars)); + + /* + we save the number of non-zero variables in bad constraint has. + */ + int* listnconsvars; //example {2,2,2,3,3,3} + SCIP_CALL(SCIPallocBufferArray(relaxscip,&listnconsvars,nSlotConss)); + + /*to not allocate buffer array over and over again, we create one, with + size = maxnconsvars. and then we intialize it with the first few variables from vars. + */ + SCIP_CALL(SCIPallocBufferArray(relaxscip, varbuffers, maxnconsvars)); + for (int v = 0; v < maxnconsvars; v++) + { + (*varbuffers)[v] =vars[v]; + } + + + counter=0; + for (int r = 0; r < nSlotConss; ++r) + { + nconsvars=0; + id = (*badconss)[r]; + SCIP_CONS* cons = SCIPgetConss(relaxscip)[id]; + + // printf("%s \t",SCIPconsGetName(cons)); + SCIP_CALL(SCIPgetConsNVars(relaxscip, cons, &nconsvars, &success)); + SCIP_CALL(SCIPgetConsVars(relaxscip, cons, (*varbuffers), nconsvars, &success)); + if (!success){ + abort(); } + listnconsvars[r] = nconsvars; + for (int j = 0; j < nconsvars; ++j) /* (8) */ + { + SCIP_VAR* varx = (*varbuffers)[j]; + int varbufindex = SCIPvarGetIndex(varx); + assert(varbufindex != NULL); + listconsvarids[counter]=varbufindex; + counter++; + } + } + + // counter=0; + // for(int r=0; r<nSlotConss;++r) + // { + // for(int s=counter;s<(counter+listnconsvars[r]);++s) + // { + // printf("%s->",SCIPvarGetName(vars[listconsvarids[s]])); + // } + // printf("\n"); + // counter += listnconsvars[r]; + // // printf("%d\n->",counter); + // } + int* listvarswconsid; + SCIP_CALL(SCIPallocBufferArray(relaxscip,&listvarswconsid,allnconsvars)); + + //* use the following to create an alternative way of varids*// + // int* listvarncons; + // SCIP_CALL(SCIPallocBufferArray(relaxscip,&listvarncons,nvars)); + + // int count; + // for(int v=0; v<nvars;++v) + // { + // int varid = SCIPvarGetIndex(vars[v]); + // counter=0; + // count =0; + + // // printf("%s->",SCIPvarGetName(vars[v])); + // for(int r=0; r<nSlotConss;++r) + // { + + // id = (*badconss)[r]; + // SCIP_CONS* cons = SCIPgetConss(relaxscip)[id]; + // // printf("%s \t",SCIPconsGetName(cons)); + // for(int s=counter;s<(counter+listnconsvars[r]);++s) + // { + // // printf("(%d)",s); + // if(varid==listconsvarids[s]) + // { + // listvarswconsid[s]=id; + // count++; + // // printf("%s->",SCIPconsGetName(conss[listvarswconsid[s]])); + // } + // } + // counter += listnconsvars[r]; + // // printf("%d\n->",counter); + // } + // listvarncons[v]=count; + // // printf("\n"); + // } + + + + // counter=0; + // for(int v=0; v<nvars;++v) + // { + // SCIP_VAR* var = vars[v]; + // printf("%s,%d",SCIPvarGetName(var),listvarncons[v]); + // //next step is a creation of an array that will tell in how many bad constraints a variable is found in. + // for(int s=counter;s<(counter+listvarncons[v]);++s) + // { + // // printf("%s->",SCIPconsGetName(conss[listconsvarids[s]])); + // printf("%s,",SCIPconsGetName(conss[listconsvarids[s]])); + // } + // printf("\n"); + // counter += listvarncons[v]; + // // // printf("%d\n->",counter); + // } + + + + SCIP_CALL(SCIPallocMemory(relaxscip,probdata)); (*probdata)->nSlotConss = nSlotConss; + (*probdata)->allnconsvars= allnconsvars; //sum of all nconsvars; + (*probdata)->listnconsvars = listnconsvars; + (*probdata)->listconsvarids = listconsvarids; return SCIP_OKAY; } @@ -269,7 +424,7 @@ SCIP_Real SCIPgetSubgradients( SCIP_Bool success; int nconsvars; SCIP_VAR** varbuffer; - FILE* filos; + // SCIP_SOL* bestsol = SCIPgetBestSol(relaxscip); // SCIP_CALL(SCIPprintSol(relaxscip,bestsol,filos,FALSE)); @@ -334,8 +489,6 @@ SCIP_RETCODE SCIPsolveiteration(SCIP* scip,int nSlotConss,SCIP_Real** subgradien int nvars = SCIPgetNVars(scip); // SCIP_Real C= 2; - FILE* file; - SCIP_CALL( SCIPcreate(&lagrscip)); SCIP_Bool valid=FALSE; // SCIP_CALL( SCIPhashmapCreate(&varmap, SCIPblkmem(lagrscip), nvars) ); @@ -357,7 +510,6 @@ SCIP_RETCODE SCIPsolveiteration(SCIP* scip,int nSlotConss,SCIP_Real** subgradien /*get the best solution*/ SCIP_SOL* bestsol ; - SCIP_SOL** sols; SCIP_Real* solvals; SCIP_CALL(SCIPallocBufferArray(lagrscip,&solvals,nvars+1)); @@ -375,7 +527,6 @@ SCIP_RETCODE SCIPsolveiteration(SCIP* scip,int nSlotConss,SCIP_Real** subgradien //prinf("\n"); for (int v = 0; v<nvars-1; ++v) { - SCIP_VAR* var = SCIPgetVars(lagrscip)[v]; if( solvals[v] == 1 && solvals[v+1] == 1) { solvals[v] = 0; @@ -387,7 +538,6 @@ SCIP_RETCODE SCIPsolveiteration(SCIP* scip,int nSlotConss,SCIP_Real** subgradien } /*to get a better upperbound*/ - SCIP_Real solobj; // SCIPgetFeasUpperbound(scip,&secondsolvals,&upperbound, &solobj, niter); /*if the obj value in this iteration is bette(in our case, higher), than the previous one, save the solution array and also it's obj value to the bestsolvals*/ @@ -490,3 +640,76 @@ SCIP_RETCODE SCIPgetFeasUpperbound(SCIP* scip, SCIP_Real** solvals, SCIP_Real** return SCIP_OKAY; } +SCIP_RETCODE scipgetsolutions(SCIP* scip, SCIP_VAR** vars, SCIP_Real** solvals, SCIP_Real* relaxval, SCIP_Real* dualmultipliers, SCIP_Real sumofduals,SCIP_SOL** bestsol) +{ + double sum; + FILE* varobj; + varobj=fopen("varobj.txt","wr"); + FILE* problemstate; + problemstate = fopen("problemstate.txt","w+"); + FILE* solutions; + solutions = fopen("solutions2.txt","w+"); + + SCIP_VARDATA* vardata; + + int nvars = SCIPgetNVars(scip); + for(int v=0;v<nvars;v++) + { + SCIP_VAR* var = vars[v]; + sum =SCIPvarGetObj(var); + + vardata=SCIPvarGetData(var); + int* varids = SCIPvardataGetvarids(vardata); + int NVarInBadConss = SCIPvardataGetNVarInBadConss(vardata); + + for(int t=0;t<NVarInBadConss;t++) + { + sum += dualmultipliers[varids[t]]; + fprintf(varobj,"{%d, %f, %f\t",varids[t], dualmultipliers[varids[t]],sum); + } + + + // findmin += sum*solvals[v]; + // fprintf(varobj, "solval %f, coefficient %f, sum %f", solvals[v],sum, findmin); + fprintf(varobj,"}\n\n"); + SCIP_CALL(SCIPaddVarObj(scip,var,sum)); + // add = weights[v]+sum; + + } + + // SCIPinfoMessage(scip, TimeCollector, "\n finished changing the variable's weight after (sec) : %f\n", SCIPgetClockTime(scip, varslottime)); + + SCIP_CALL(SCIPaddOrigObjoffset(scip,-1*sumofduals)); + SCIP_CALL(SCIPprintOrigProblem(scip, problemstate, "lp", FALSE)); + SCIPsetMessagehdlrQuiet(scip, TRUE); + // fclose(AfterPreProcessing); + + SCIP_CALL( SCIPtransformProb(scip) ); + SCIP_CALL( SCIPsolve(scip) ); + *relaxval = SCIPgetPrimalbound(scip); + SCIPdebugMessage("relaxation bound = %e status = %d\n", *relaxval, SCIPgetStatus(scip)); + /*get the best solution*/ + *bestsol = SCIPgetBestSol(scip) ; + SCIP_CALL(SCIPallocBufferArray(scip,solvals,nvars+1)); + + /*text output*/ + fprintf(solutions,"first iteration \t bound=%f, \t objsol=%f \n",SCIPgetPrimalbound(scip),*relaxval); + SCIP_CALL(SCIPprintBestSol(scip,solutions,FALSE)); + + /*store the solution in solvals so we can later export it to subgradient function*/ + SCIPgetSolVals(scip,*bestsol,nvars,vars,*solvals); + fclose(varobj); + fclose(solutions); + fclose(problemstate); +} + +SCIP_Real getnorm(SCIP_Real* array, int sizeofarray, SCIP_Real stepsize) +{ + SCIP_Real norm; + for(int r=0; r<sizeofarray;++r) + { + norm += array[r]*array[r]; + } + norm=sqrt(norm); + return norm; +} \ No newline at end of file diff --git a/src/probdata_lagr.h b/src/probdata_lagr.h index 11deabefff3a7d25f1cd397d77b4efd14e04f51f..de1c397f937960df4597e4e641191138c21fb5b0 100644 --- a/src/probdata_lagr.h +++ b/src/probdata_lagr.h @@ -16,10 +16,17 @@ /*classifying and storing the slot and start constraints in PROBDATA create probdata*/ SCIP_RETCODE SCIPcreateprobdata( - SCIP* scip, - SCIP_ProbData** probdata - ); + SCIP* scip, + SCIP_ProbData** probdata, + SCIP_CONS** conss, + SCIP_VAR** vars, + SCIP_VAR*** varbuffers, + int** badconss +); +int SCIPgetallnconsvars( +SCIP_ProbData* probdata + ); SCIP_RETCODE GetNGoodandNbad( SCIP* scip, int* nbad, @@ -32,12 +39,30 @@ SCIP_RETCODE GetNGoodandNbad( int* SCIPconsGetvarids( SCIP_ProbData* probdata ); +int SCIPgetallmaxnconsvars( +SCIP_ProbData* probdata +); +int* SCIPlistnconsvars( +SCIP_ProbData* probdata +); + +SCIP_Real getnorm(SCIP_Real* array, int sizeofarray, SCIP_Real stepsize); + +int* SCIPlistconsvarids( +SCIP_ProbData* probdata +); SCIP_CONS** SCIPgetSlotConss( SCIP_ProbData* probdata ); - +SCIP_RETCODE scipgetsolutions( + SCIP* scip, SCIP_VAR** vars, + SCIP_Real** solvals, + SCIP_Real* relaxval, + SCIP_Real* dualmultipliers, + SCIP_Real sumofduals, + SCIP_SOL** bestsol); int SCIPgetNSlotConss( SCIP_ProbData* probdata diff --git a/src/relax_lagr.cpp b/src/relax_lagr.cpp index f7e1679b0fbbd4632329f993b0ffe0db023ae647..212e44c1c596f0358cdc9d7715d49888c6a75591 100644 --- a/src/relax_lagr.cpp +++ b/src/relax_lagr.cpp @@ -61,6 +61,7 @@ struct SCIP_RelaxData { SCIP_SOL* sol; /**current solution(working solution)*/ SCIP_VARDATA* vardata; + SCIP_CONSDATA* consdata; SCIP_Real* bestsolvals; SCIP_Real* feasiblesol; SCIP_Real* upperbound; @@ -72,10 +73,10 @@ struct SCIP_VarData SCIP_CONS** VarConss; int nVarConss; SCIP_CONS** VarSlotConss; /**<contains all slot constraints containing the variable */ - int nVarSlotConss; /**<number of slot constraints the variable is occuring in*/ + int NVarInBadConss; /**<number of slot constraints the variable is occuring in*/ SCIP_Real varquotient; int* consids; - int* varid; + int* varids; }; @@ -94,236 +95,400 @@ SCIP_DECL_RELAXFREE(relaxFreelagr) /** initialization method of relaxator (called after problem was transformed) */ -static -SCIP_DECL_RELAXINIT(relaxInitlagr) -{ /*lint --e{715}*/ - printf("hellow\n"); +int SCIPvardataGetNVarInBadConss( + SCIP_VARDATA* vardata /**< variable data */ +) + { + return vardata->NVarInBadConss; + } - using std::cout; - SCIP* relaxscip; //a copy of the scip we can work on - SCIP_HASHMAP* varmap; //to map the variables from scip to relaxscip - SCIP_HASHMAP* consmap; //to map the constraints from scip to relaxscip +int* SCIPvardataGetvarids( + SCIP_VARDATA* vardata /**< variable data */ +) + { + return vardata->varids; + } - SCIP_VARDATA* vardata; //contains variable data, including in which constraints it's found - SCIP_PROBDATA* probdata; //contains constraint data, identify slot vs start conss, and also which variables it contains - SCIP_RELAXDATA* relaxdata; // not yet used, but can be part of the struct SCIP_RelaxData - SCIP_CLOCK* varslottime; //to help us record the time - FILE* file; +static +SCIP_DECL_RELAXINIT(relaxInitlagr) +{ /*lint --e{715}*/ - SCIP_Bool success; - SCIP_Bool valid; - - SCIP_SOL** sols; - - relaxdata = SCIPrelaxGetData(relax); - SCIP_CALL(SCIPallocBlockMemory(scip , &relaxdata)); - assert(relaxdata != NULL); + SCIP* relaxscip; + SCIP_HASHMAP* varmap; + SCIP_HASHMAP* consmap; + SCIP_CONS** conss; + SCIP_PROBDATA* probdata; + SCIP_VARDATA* vardata; + SCIP_Real relaxval; + SCIP_Bool valid; + int nconss; + int i; + int counter; + int id; + // *lowerbound = -SCIPinfinity(scip); + // *result = SCIP_DIDNOTRUN; + /* we can only run if none of the present constraints expect their variables to be binary or integer during transformation */ + conss = SCIPgetConss(scip); + nconss = SCIPgetNConss(scip); - /*************************************************************************************************/ - /*we start with creating our relaxed scip instance, where the variable and constraints are mapped*/ - /*************************************************************************************************/ - SCIP_CALL( SCIPcreate(&relaxscip)); - valid=FALSE; + /* create the variable mapping hash map */ + SCIP_CALL( SCIPcreate(&relaxscip) ); SCIP_CALL( SCIPhashmapCreate(&varmap, SCIPblkmem(relaxscip), SCIPgetNVars(scip)) ); - SCIP_CALL(SCIPcopy(scip,relaxscip,varmap,consmap,"relaxscip",FALSE,FALSE,FALSE,FALSE,&valid)); + valid = FALSE; + SCIP_CALL( SCIPcopy(scip, relaxscip, varmap, consmap, "relaxscip", FALSE, FALSE, FALSE, FALSE, &valid) ); - SCIP_VAR** origvars = SCIPgetVars(scip); - SCIP_VAR** vars = SCIPgetVars(relaxscip); - SCIP_CONS** conss = SCIPgetConss(relaxscip); - int nconss = SCIPgetNConss(relaxscip); - int nvars = SCIPgetNVars(relaxscip); - SCIP_Real upperbound = 0; - // printf("**************%f***********",SCIPgetNCountedFeasSubtrees(relaxscip)); - - SCIP_CALL( SCIPcreateClock(relaxscip, &varslottime) ); //* start time counting* - SCIP_CALL(SCIPstartClock(relaxscip,varslottime)); - /**************************************************************************************************************/ /*First, */ //*the probdata: where we get to identify the bad constraint we want to formulate(in our case, the slot conss) */ - //*the vardata: where we will get save the slot constraints on which the variable exists, */ - /*--along with the quotient of the obj to the nVarSlotConss */ /***************************************************************************************************************/ - - SCIPcreateprobdata(relaxscip,&probdata); //*will be used to identify the #of slot constraints - printf("%d", SCIPgetNConss(relaxscip)); - int nSlotConss = SCIPgetNSlotConss(probdata); - printf("%d", SCIPgetNSlotConss(probdata)); + int nvars = SCIPgetNVars(relaxscip); + SCIP_VAR** vars = SCIPgetVars(relaxscip); + SCIP_VAR** varbuffers; + int* badconss; + + SCIPcreateprobdata(relaxscip,&probdata,SCIPgetConss(relaxscip),vars,&varbuffers,&badconss); /*will be used to identify the # of slot(bad) constraints*/ + int nSlotConss = SCIPgetNSlotConss(probdata); //number of bad(slot) constraint + 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); + + /* 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"); + SCIP_CLOCK* varslottime; //to help us record the time + SCIP_CALL( SCIPcreateClock(relaxscip, &varslottime) ); //* start time counting* + SCIP_CALL(SCIPstartClock(relaxscip,varslottime)); + + // int nconsvars=0; + int* consids; - SCIP_Real* origobj; - SCIP_CALL(SCIPallocBufferArray(relaxscip,&origobj,nvars)); + SCIP_Real* weights; + SCIP_CALL(SCIPallocBufferArray(relaxscip,&weights,nvars)); + SCIP_CALL(SCIPallocBufferArray(relaxscip,&consids,nSlotConss)); for (int v = 0; v < nvars; v++) { SCIP_VAR* var = vars[v]; - origobj[v]= SCIPvarGetObj(var); + weights[v]=SCIPvarGetObj(var); + } + + for (int v = 0; v < nvars; v++) + { + int* varids; + int NVarInBadConss=0; + int nconsvars = 0; + SCIP_VAR* var = vars[v]; + + int varindex = SCIPvarGetIndex(var); /* (2) */ + assert(varindex!= NULL); - vardata=NULL; - SCIPvardataCreateLagrangian(relaxscip,vardata,&var,nSlotConss,v); //*we create the vardata, containing the ids of the constraints containing the variable - vardata=SCIPvarGetData(var); - if(upperbound<=SCIPvarGetObj(var)) + // printf("%s****%d\n",SCIPvarGetName(var),varindex); + for (int r = 0; r < nSlotConss; ++r) { - upperbound = SCIPvarGetObj(var); + id = badconss[r]; + SCIP_CONS* cons = SCIPgetConss(relaxscip)[id]; + // printf("%s \t",SCIPconsGetName(cons)); + SCIP_CALL(SCIPgetConsNVars(relaxscip, cons, &nconsvars, &valid)); + SCIP_CALL(SCIPgetConsVars(relaxscip, cons, varbuffers, nconsvars, &valid)); + if (!valid){ + abort(); } + + for (int j = 0; j < nconsvars; ++j) /* (8) */ + { + SCIP_VAR* varx = varbuffers[j]; + int varbufindex = SCIPvarGetIndex(varx); + assert(varbufindex != NULL); + // printf("%s\t \t%d",SCIPvarGetName(varx),varbufindex); + + + /** if var[i] is in cons[c], write conspointer in VarConss and increase nVarConsscounter */ + if (varindex == varbufindex) /* (9) */ + { + + // VarSlotConss[NVarInBadConss] = cons; + consids[NVarInBadConss]=id; + NVarInBadConss++; + // printf(" %s \t,",SCIPconsGetName(cons)); + } + } + } + + SCIP_CALL(SCIPallocBufferArray(relaxscip, &varids, NVarInBadConss)); + for(int t=0;t<NVarInBadConss;t++) + { + varids[t]=consids[t]; + // printf("%d \t",varids[t]); } - } - upperbound = upperbound * (nconss - nSlotConss); - printf("%f",upperbound); - // SCIP_CALL(SCIPstopClock(relaxscip,varslottime)); - // SCIPinfoMessage(relaxscip, NULL, "Solving Time (sec) : %6f\n", SCIPgetClockTime(relaxscip, varslottime)); + // vardata=SCIPvarGetData(var); + SCIP_CALL(SCIPallocBlockMemory(scip , &vardata)); + SCIP_CALL(SCIPduplicateBlockMemoryArray(scip, &(vardata->varids), varids, NVarInBadConss)); + vardata->NVarInBadConss = NVarInBadConss; /**copy nVarConss to VarData */ + vardata->varids = varids; + // /**set the variable data to the variable*/ + SCIPvarSetData(var,vardata); + } - SCIP_SOL* bestsol ; - SCIP_Real* dualmultipliers; - SCIP_CALL(SCIPallocBufferArray(relaxscip,&dualmultipliers,nSlotConss)); - - SCIP_Real sumofduals = 0; - SCIP_Real stepsize = 0.0000; - SCIP_Real sqsum = 0; - SCIP_Real sqrtsum = 0; - SCIP_Real C = 2; + // SCIP_CALL(SCIPstopClock(relaxscip,varslottime)); + + FILE* AfterPreProcessing; + AfterPreProcessing = fopen("AfterPreProcessing.txt","w+"); - SCIP_Real* subgradients; - SCIP_CALL(SCIPallocBufferArray(relaxscip,&subgradients,nSlotConss)); + // SCIP_CALL(SCIPprintOrigProblem(relaxscip, AfterPreProcessing, "lp", FALSE)); + + SCIPinfoMessage(relaxscip, TimeCollector, "\n row and column identified in (sec) : %f\n", SCIPgetClockTime(relaxscip, varslottime)); + for(int r=0;r<nSlotConss;r++) + { + id = badconss[r]; + SCIP_CONS* cons = SCIPgetConss(relaxscip)[id]; + SCIP_CALL(SCIPdelCons(relaxscip,cons)); + } /******************************************************************************************************************/ - /*Next, we will do the initial iteration of finding the dual mulpliers of each slot conss, and their sum(dualsum) */ + /*Next, we will do the initial iteration of finding the dual mulpliers of each slot conss, and their sum(dualsum) */ /* In the end, we will subtract this sum from the objective of the function. */ /* It's initial, because while we would search for more dual multipliers to solve the Lagrangian relaxation */ /******************************************************************************************************************/ - + SCIP_Real* dualmultipliers; + SCIP_CALL(SCIPallocBufferArray(relaxscip,&dualmultipliers,nSlotConss)); + + SCIP_Real* subgradients; + SCIP_CALL(SCIPallocBufferArray(relaxscip,&subgradients,nSlotConss)); + //initialize subgradients; + SCIP_Real stepsize = 1.00000; + SCIP_Real sumofduals=0; for ( int r = 0; r < nSlotConss; ++r) { - // printf("*******************%f\n",subgradients[r]); - SCIP_CONS* cons = conss[r]; - - dualmultipliers[r]=SCIPconsGetMultiplier(relaxscip,&cons, 0,0,0,true,0); //returns the minumum + // id = badconss[r]; + // SCIP_CONS* cons = SCIPgetConss(relaxscip)[id]; + //if k=1 iteration// dualmultipliers[r] = 0; sumofduals+=dualmultipliers[r]; //adds the negative of the minimum in each iteration - // printf("(%s,%f) \n",SCIPconsGetName(cons), dualmultipliers[r]); - + } - - int niters = 2250; - int stoppingiter=0; - - /**solvals is used for storing solutions in an iteration. where as bestsolvals will store the solution with the best objective value*/ - SCIP_Real* solvals; - SCIP_Real* bestsolvals; - SCIP_CALL(SCIPallocBufferArray(relaxscip,&solvals,nvars+1)); - SCIP_CALL(SCIPallocBufferArray(relaxscip,&bestsolvals,nvars+1+niters)); - bestsolvals[nvars] = -10000000000000000; - // printf("%f",bestsolvals[nvars+1]); + + /*******************************************************************************************************/ + /* The reformulation of the problem can be written as follows */ + //*>>>>>>>>>>>>>>>>>> min sum { (w[i]+sum{dual[j]})}x[i]-sum{dual[r]} <<<<<<<<<<<< */ + /*where i is nvars, j is NVarInBadConss, and r is nSlotConss for our case *******************************/ + /****************************************************************************************************************/ + /* The following function will add the following to the obj(weight) of the variable, */ + //* the obj(weight) of var + the sum of the dualmultipliers of bad constraints which contains this variable */ + /****************************************************************************************************************/ + + + FILE* solutions; + solutions = fopen("sol.txt","wr"); + FILE* dual; + dual= fopen("dual.txt","wr"); + FILE* variableinfo; + variableinfo = fopen("var.txt","wr"); + FILE* subgrad; + subgrad = fopen("subgrads.txt","wr"); + FILE* varobjects; + varobjects=fopen("varobjs.txt","wr"); + FILE* lower; + lower=fopen("lowerbounds.txt","wr"); - // SCIP_CALL(SCIPstopClock(relaxscip,varslottime)); - // SCIPinfoMessage(relaxscip, NULL, "Solving Time (sec) : %6f\n", SCIPgetClockTime(relaxscip, varslottime)); - - /*add all the duals that are added onto the variabls under sumofaddonvars*/ - SCIP_Real sumofaddonvars=0; - SCIP_Real percent; - SCIP_Real percent2; - int counter=0; - SCIP_Real sumofsqsubgrad=0; + int maxiter=125; + fprintf(lower,"%d\n",maxiter); - - stepsize; - /*Now we can start with our interation to maximize the dualmultipliers while minimizing the reformulated SCIP instance*/ - for(int k = 0; k < niters; ++k) - { - stepsize = 0.1; - printf("%f\n\n",stepsize); - sumofaddonvars = 0; - SCIP_CALL(SCIPfreeTransform(relaxscip)); - /*******************************************************************************************************/ - /* The reformulation of the problem can be written as follows */ - //*>>>>>>>>>>>>>>>>>> min sum { (w[i]+sum{dual[j]})}x[i]-sum{dual[r]} <<<<<<<<<<<< */ - /*where i is nvars, j is nVarSlotConss, and r is nSlotConss for our case *******************************/ - /*******************************************************************************************************/ - SCIPvarchangeDuals(relaxscip,&vars,dualmultipliers,origobj); + for(int iter=1;iter<=maxiter;iter++) + { + + for(int v=0;v<nvars;v++) + { + SCIP_VAR* var = vars[v]; + double sum =SCIPvarGetObj(var); + + vardata=SCIPvarGetData(var); + int* varids = SCIPvardataGetvarids(vardata); + int NVarInBadConss = SCIPvardataGetNVarInBadConss(vardata); + + // printf("\n"); + for(int t=0;t<NVarInBadConss;t++) + { + // printf("sum = %f, varid %d, dual %f, ", sum, varids[t],dualmultipliers[varids[t]]); + sum += dualmultipliers[varids[t]]; + // fprintf(varobjects,"{%d, %f, %f\t",varids[t], dualmultipliers[varids[t]],sum); + } + // fprintf(varobjects,"}\n\n"); + SCIP_CALL(SCIPaddVarObj(relaxscip,var,sum)); + // if(sum>weights[v]){printf("new weight %f",SCIPvarGetObj(var));} + + } + // printf("weight for v1 %f \t:= conss",solvals[1]); + // for(int s=0; s<listnconsvars[0];++s) + // { + // int id = listconsvarids[s]; + + // printf("(%s, duals = %f) \t",SCIPconsGetName(SCIPgetConss(scip)[id]), dualmultipliers[id]); + // } + + SCIPinfoMessage(relaxscip, TimeCollector, "\n finished changing the variable's weight after (sec) : %f\n", SCIPgetClockTime(relaxscip, varslottime)); + SCIP_CALL(SCIPaddOrigObjoffset(relaxscip,-1*sumofduals)); - // printf("*****************************upperbound*********************---> %f",SCIPgetUpperbound(relaxscip)); - // SCIP_CALL(SCIPprintOrigProblem(relaxscip, file, "lp", FALSE)); + // SCIP_CALL(SCIPprintOrigProblem(relaxscip, AfterPreProcessing, "lp", FALSE)); + SCIPsetMessagehdlrQuiet(relaxscip, TRUE); + // fclose(AfterPreProcessing); + + SCIP_CALL( SCIPtransformProb(relaxscip) ); + SCIP_CALL( SCIPsolve(relaxscip) ); + relaxval = SCIPgetPrimalbound(relaxscip); + // printf("\ndualbound %f, primalbound %f \n",SCIPgetDualbound(relaxscip),SCIPgetPrimalbound(relaxscip)); + SCIPdebugMessage("relaxation bound = %e status = %d\n", relaxval, SCIPgetStatus(relaxscip)); + /*get the best solution*/ + SCIP_SOL* bestsol = SCIPgetBestSol(relaxscip) ; + SCIP_SOL** sols = SCIPgetSols(relaxscip); + int nsols = SCIPgetNSols(relaxscip); + + SCIP_Real* solvals; + SCIP_CALL(SCIPallocBufferArray(relaxscip,&solvals,nvars+1)); + + + /*text output*/ + SCIPinfoMessage(relaxscip, TimeCollector, "\n first iteration: problem solved after (sec) : %f\n", SCIPgetClockTime(relaxscip, varslottime)); + fprintf(solutions,"number of solutions %d, first iteration \t bound=%f, \t objsol=%f \n",nsols, SCIPgetPrimalbound(relaxscip),relaxval); + // SCIP_CALL(SCIPprintBestSol(relaxscip,solutions,FALSE)); + + /*store the solution in solvals so we can later export it to subgradient function*/ + SCIP_Real lowerbound=0; + SCIPgetSolVals(relaxscip,bestsol,nvars,vars,solvals); + SCIP_CALL(SCIPprintSol(relaxscip,bestsol,dual,FALSE)); + + SCIP_Real compare=0; + for (int v = 0; v<nvars; ++v) + { + compare += solvals[v]*weights[v]; + } + + printf("compare value %f\n",compare); + // for(int s=0;s<nsols;s++) + // { + // SCIPgetSolVals(relaxscip,sols[s],nvars,vars,solvals); + // SCIP_CALL(SCIPprintSol(relaxscip,sols[s],dual,FALSE)); + // SCIP_Real compare=0; + // for (int v = 0; v<nvars; ++v) + // { + // compare += solvals[v]*weights[v]; + // } + + // printf("compare value %f\n",compare); + // if(compare>lowerbound){lowerbound==compare;} + // } + // fprintf(dual,"now comes the biggest one\n"); + + // for(int s=0;s<nsols;s++) + // { + // SCIPgetSolVals(relaxscip,sols[s],nvars,vars,solvals); + // SCIP_CALL(SCIPprintSol(relaxscip,sols[s],dual,FALSE)); + // SCIP_Real compare=0; + // for (int v = 0; v<nvars; ++v) + // { + // compare += solvals[v]*weights[v]; + // } + // if(compare==lowerbound){break;} + // } + - SCIPsolveiteration(relaxscip,nSlotConss,&subgradients,2,&stepsize,&bestsolvals,&upperbound, k); - //prinf("\t\t\t\t%fUpperbound \n",upperbound); - - SCIP_CALL(SCIPduplicateBlockMemoryArray(scip, &(relaxdata->bestsolvals), bestsolvals, nvars+1)); - // printf("\n best obj = %f \n",bestsolvals[nvars]); + // stepsize = 15/double(iter+1); + // fprintf(solutions, "\niteration %d\n",iter); + // fprintf(dual, "\niteration %d\n",iter); + // fprintf(variableinfo, "\niteration %d\n",iter); + // fprintf(varobjects, "\niteration %d\n",iter); SCIP_CALL(SCIPaddOrigObjoffset(relaxscip,sumofduals)); - - sumofduals = 0; - for ( int r = 0; r < nSlotConss; ++r) - { - SCIP_CONS* cons = conss[r]; - // printf("--subgrad %f--",subgradients[r]); - SCIP_Real subgradient = subgradients[r]; - sumofsqsubgrad += subgradients[r]*subgradients[r]; - } - - for ( int r = 0; r < nSlotConss; ++r) - { - SCIP_CONS* cons = conss[r]; - // printf("--subgrad %f--",subgradients[r]); - SCIP_Real subgradient = subgradients[r]; - dualmultipliers[r]=SCIPconsGetMultiplier(relaxscip,&cons,subgradient,C,stepsize,false,dualmultipliers[r]); //returns the minumum - sumofduals+=dualmultipliers[r]; //adds the negative of the minimum in each iteration - //prinf("(%s,%f, sumofduals %f) \n",SCIPconsGetName(cons), dualmultipliers[r],sumofduals); + // SCIP_CALL( SCIPfreeTransform(relaxscip) ); + // SCIP_CALL( SCIPtransformProb(relaxscip) ); + + counter = 0; + int checker = 0; + for(int r=0; r<nSlotConss;++r) + { + id = badconss[r]; + double ax=-1; + for(int s=counter;s<(counter+listnconsvars[r]);++s) + { + // printf("%s->",SCIPvarGetName(vars[listconsvarids[s]])); + ax+=SCIPgetSolVal(relaxscip,bestsol,vars[listconsvarids[s]]); + // fprintf(subgrad,"%s\t,%f\t, sum %f",SCIPvarGetName(vars[listconsvarids[s]]),SCIPgetSolVal(relaxscip,bestsol,vars[listconsvarids[s]]),ax); + + } + + counter += listnconsvars[r]; + if(ax>0){checker++;} + subgradients[r]=ax; + // fprintf(subgrad, "\n subgrad = %f \t",subgradients[r]); + } + if(checker==0){printf("#*#*#*result found\n"); break;} - + SCIP_CALL( SCIPfreeTransform(relaxscip) ); + SCIP_CALL( SCIPtransformProb(relaxscip) ); + - ++stoppingiter; - if(bestsolvals[nvars]!=bestsolvals[nvars+k+1]){++counter;} - else{counter=0;} - if(counter==10){ break; } - } + + for (int v = 0; v<nvars; ++v) + { + SCIP_VAR* var = vars[v]; + + SCIP_CALL(SCIPchgVarObj(relaxscip,var,weights[v])); + // fprintf(variableinfo,"(%s,%f,%f)->%f\n",SCIPvarGetName(var),solvals[v],SCIPvarGetObj(var), weights[v]); + lowerbound += solvals[v]*weights[v]; + } + fprintf(dual,"dualbound = %f, lowerbound=%f, norm of subgrad %f\t",SCIPgetPrimalbound(relaxscip),lowerbound, getnorm(subgradients,nSlotConss,stepsize)); + fprintf(lower,"%f\n",lowerbound); - SCIP_CALL(SCIPstopClock(relaxscip,varslottime)); - SCIPinfoMessage(relaxscip, NULL, "Solving Time (sec) : %f\n", SCIPgetClockTime(relaxscip, varslottime)); + // stepsize = (SCIPgetPrimalbound(relaxscip)-lowerbound)/getnorm(subgradients,nSlotConss,stepsize); + SCIP_CALL( SCIPfreeTransform(relaxscip) ); + fprintf(solutions, "lowerbound = %f \n ", lowerbound); + SCIPinfoMessage(relaxscip, TimeCollector, "\n subgradients found after (sec) : %f\n, lowerbound = %f \n", SCIPgetClockTime(relaxscip, varslottime),lowerbound); + + //add back the sum of the duals we subtracted from the main obj function - FILE* saveniter; - saveniter = fopen("values.txt","w"); - fprintf(saveniter,"%d\n",stoppingiter); - fclose(saveniter); + int sum=0; + sumofduals = 0; - FILE* savebestsols; - for(int v=nvars+1; v<nvars+1+stoppingiter; ++v) - { - // prinf("(%s bsv= %f\n", SCIPvarGetName(vars[v]),bestsolvals[v]); - savebestsols = fopen("values.txt","a"); - fprintf(savebestsols,"%f\n", bestsolvals[v]); - // fputs("This is testing for fputs...\n",were); - fclose(savebestsols); + for(int r=0; r<nSlotConss;++r) + { + dualmultipliers[r] += subgradients[r]*stepsize; + if(dualmultipliers[r]<0){dualmultipliers[r]=0;} + + sum+=dualmultipliers[r]; + // fprintf(dual," then %f step size %f \n",dualmultipliers[r], stepsize); + } + sumofduals=sum; + // fprintf(dual,"iteration %d, sumofduals=%f\n",iter, sumofduals); + SCIPinfoMessage(relaxscip, TimeCollector, "\n new dual found after (sec) : %f\n", SCIPgetClockTime(relaxscip, varslottime)); + // if(checker==0){printf("solution found in %d iterations\n",iter); break;} } + SCIPfreeTransform(relaxscip); + fclose(variableinfo); + fclose(dual); + fclose(subgrad); + fclose(varobjects); + fclose(solutions); + fclose(lower); - for(int v=0; v<nvars; ++v) - { - SCIP_VAR* var = vars[v]; - // printf("orobj %f|",origobj[v]); - // vardata = SCIPvarGetData(var); - // SCIP_CALL(SCIPVaraddDualMultiplier(relaxscip,&var,dualmultipliers)); - // printf("%f",SCIPvarGetQuotient(vardata)); - // vardataDelete(relaxscip,&vardata); - } - - + /* free memory */ + SCIPhashmapFree(&varmap); + SCIP_CALL( SCIPfree(&relaxscip) ); - return SCIP_OKAY; } @@ -381,17 +546,19 @@ static SCIP_DECL_RELAXEXEC(relaxExeclagr) { /*lint --e{715}*/ -SCIP* relaxscip; + SCIP* relaxscip; SCIP_HASHMAP* varmap; SCIP_HASHMAP* consmap; SCIP_CONS** conss; SCIP_PROBDATA* probdata; SCIP_VARDATA* vardata; + SCIP_Real relaxval; SCIP_Bool valid; int nconss; int i; - int c; + int counter; + int id; *lowerbound = -SCIPinfinity(scip); @@ -400,28 +567,6 @@ SCIP* relaxscip; /* we can only run if none of the present constraints expect their variables to be binary or integer during transformation */ conss = SCIPgetConss(scip); nconss = SCIPgetNConss(scip); - - - for( c = 0; c < nconss; ++c ) - { - const char* conshdlrname; - - conshdlrname = SCIPconshdlrGetName(SCIPconsGetHdlr(conss[c])); - - /* skip if there are any "and", "linking", or", "orbitope", "pseudoboolean", "superindicator", "xor" or new/unknown constraints */ - if( strcmp(conshdlrname, "SOS1") != 0 && strcmp(conshdlrname, "SOS2") != 0 && strcmp(conshdlrname, "abspower") != 0 - && strcmp(conshdlrname, "bivariate") != 0 && strcmp(conshdlrname, "bounddisjunction") != 0 - && strcmp(conshdlrname, "cardinality") != 0 && strcmp(conshdlrname, "components") != 0 - && strcmp(conshdlrname, "conjunction") != 0 && strcmp(conshdlrname, "countsols") != 0 - && strcmp(conshdlrname, "cumulative") != 0 && strcmp(conshdlrname, "disjunction") != 0 - && strcmp(conshdlrname, "indicator") != 0 && strcmp(conshdlrname, "integral") != 0 - && strcmp(conshdlrname, "knapsack") != 0 && strcmp(conshdlrname, "linear") != 0 - && strcmp(conshdlrname, "logicor") != 0 && strcmp(conshdlrname, "nonlinear") != 0 - && strcmp(conshdlrname, "orbisack") != 0 && strcmp(conshdlrname, "quadratic") != 0 - && strcmp(conshdlrname, "setppc") != 0 && strcmp(conshdlrname, "soc") != 0 - && strcmp(conshdlrname, "symresack") != 0 && strcmp(conshdlrname, "varbound") != 0 ) - return SCIP_OKAY; - } /* create the variable mapping hash map */ SCIP_CALL( SCIPcreate(&relaxscip) ); @@ -429,178 +574,285 @@ SCIP* relaxscip; valid = FALSE; SCIP_CALL( SCIPcopy(scip, relaxscip, varmap, consmap, "relaxscip", FALSE, FALSE, FALSE, FALSE, &valid) ); - /**************************************************************************************************************/ - /*First, */ - //*the probdata: where we get to identify the bad constraint we want to formulate(in our case, the slot conss) */ - /***************************************************************************************************************/ - SCIPcreateprobdata(relaxscip,&probdata); /*will be used to identify the # of slot(bad) constraints*/ - int nSlotConss = SCIPgetNSlotConss(probdata); //number of bad(slot) constraint - int* badconss; - SCIP_CALL(SCIPallocBufferArray(relaxscip, &badconss, nSlotConss)); //the badconss array will contain the row number of the bad conss - int counter = 0; //counter will increase based the condition of inequality withn row. - for (int t=0; t<nconss; t++) /* (3) */ - { - SCIP_CONS* cons = SCIPgetConss(relaxscip)[t]; - if(SCIPconsGetLhs(relaxscip,cons,&valid)==-SCIPinfinity(relaxscip)) /*<We get the slot constraints based on the inquality*/ - { - badconss[counter]=t; - printf("(%d,%d)--%s\t",counter, t,SCIPconsGetName(cons)); - counter++; - } - } - - int nvars = SCIPgetNVars(relaxscip); - SCIP_VAR** vars = SCIPgetVars(relaxscip); - - int* consids; - SCIP_CALL(SCIPallocBufferArray(relaxscip,&consids,nSlotConss)); - - /* we then create the vardata function for each variable, to see at which constraint the variable is found*/ - SCIP_CLOCK* varslottime; //to help us record the time - SCIP_CALL( SCIPcreateClock(relaxscip, &varslottime) ); //* start time counting* - SCIP_CALL(SCIPstartClock(relaxscip,varslottime)); - int maxnconsvars=0; - int nconsvars=0; + // /**************************************************************************************************************/ + // /*First, */ + // //*the probdata: where we get to identify the bad constraint we want to formulate(in our case, the slot conss) */ + // /***************************************************************************************************************/ + // int nvars = SCIPgetNVars(relaxscip); + // SCIP_VAR** vars = SCIPgetVars(relaxscip); + // SCIP_VAR** varbuffers; + // int* badconss; - - int id; - for(int r=0;r<nSlotConss;r++) - { - id = badconss[r]; //gets the index for the bad constraints - SCIP_CONS* cons = SCIPgetConss(relaxscip)[id]; //gets teh bad constraints - SCIP_CALL(SCIPgetConsNVars(relaxscip,cons,&nconsvars,&valid)); - if(maxnconsvars<nconsvars){maxnconsvars=nconsvars;} //get the max number of variables found at each constraint - consids[r]=0; - // printf("%s\n",SCIPconsGetName(cons)); - } - - SCIP_VAR** varbuffers; - SCIP_CALL(SCIPallocBufferArray(relaxscip, &varbuffers, maxnconsvars)); - for (int v = 0; v < maxnconsvars; v++) - { - varbuffers[v] =vars[v]; - } - - SCIP_Real* origobj; - SCIP_CALL(SCIPallocBufferArray(relaxscip,&origobj,nvars)); - for (int v = 0; v < nvars; v++) - { - int* varid; - int nVarSlotConss=0; - nconsvars = 0; - SCIP_VAR* var = vars[v]; - origobj[v]= SCIPvarGetObj(var); - - int varindex = SCIPvarGetIndex(var); /* (2) */ - assert(varindex!= NULL); - - // printf("%s****%d\n",SCIPvarGetName(var),varindex); - for (int r = 0; r < nSlotConss; ++r) - { - id = badconss[r]; - SCIP_CONS* cons = SCIPgetConss(relaxscip)[id]; - // printf("%s \t",SCIPconsGetName(cons)); - SCIP_CALL(SCIPgetConsNVars(relaxscip, cons, &nconsvars, &valid)); - SCIP_CALL(SCIPgetConsVars(relaxscip, cons, varbuffers, nconsvars, &valid)); - if (!valid){ - abort(); } - - for (int j = 0; j < nconsvars; ++j) /* (8) */ - { - SCIP_VAR* varx = varbuffers[j]; - int varbufindex = SCIPvarGetIndex(varx); - assert(varbufindex != NULL); - // printf("%s\t \t%d",SCIPvarGetName(varx),varbufindex); + // SCIPcreateprobdata(relaxscip,&probdata,SCIPgetConss(relaxscip),vars,&varbuffers,&badconss); /*will be used to identify the # of slot(bad) constraints*/ + // int nSlotConss = SCIPgetNSlotConss(probdata); //number of bad(slot) constraint + // 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); + + // /* 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"); + // SCIP_CLOCK* varslottime; //to help us record the time + // SCIP_CALL( SCIPcreateClock(relaxscip, &varslottime) ); //* start time counting* + // SCIP_CALL(SCIPstartClock(relaxscip,varslottime)); + + // // int nconsvars=0; + // int* consids; + + // SCIP_Real* weights; + // SCIP_CALL(SCIPallocBufferArray(relaxscip,&weights,nvars)); + + // SCIP_CALL(SCIPallocBufferArray(relaxscip,&consids,nSlotConss)); + + // for (int v = 0; v < nvars; v++) + // { + // SCIP_VAR* var = vars[v]; + // weights[v]=SCIPvarGetObj(var); + // } + + // for (int v = 0; v < nvars; v++) + // { + // int* varids; + // int NVarInBadConss=0; + // int nconsvars = 0; + // SCIP_VAR* var = vars[v]; + + // int varindex = SCIPvarGetIndex(var); /* (2) */ + // assert(varindex!= NULL); + + // // printf("%s****%d\n",SCIPvarGetName(var),varindex); + // for (int r = 0; r < nSlotConss; ++r) + // { + // id = badconss[r]; + // SCIP_CONS* cons = SCIPgetConss(relaxscip)[id]; + // // printf("%s \t",SCIPconsGetName(cons)); + // SCIP_CALL(SCIPgetConsNVars(relaxscip, cons, &nconsvars, &valid)); + // SCIP_CALL(SCIPgetConsVars(relaxscip, cons, varbuffers, nconsvars, &valid)); + // if (!valid){ + // abort(); } + + // for (int j = 0; j < nconsvars; ++j) /* (8) */ + // { + // SCIP_VAR* varx = varbuffers[j]; + // int varbufindex = SCIPvarGetIndex(varx); + // assert(varbufindex != NULL); + // // printf("%s\t \t%d",SCIPvarGetName(varx),varbufindex); - /** if var[i] is in cons[c], write conspointer in VarConss and increase nVarConsscounter */ - if (varindex == varbufindex) /* (9) */ - { + // /** if var[i] is in cons[c], write conspointer in VarConss and increase nVarConsscounter */ + // if (varindex == varbufindex) /* (9) */ + // { - // VarSlotConss[nVarSlotConss] = cons; - consids[nVarSlotConss]=id; - nVarSlotConss++; - // printf(" %s \t,",SCIPconsGetName(cons)); - } - } - } - SCIP_CALL(SCIPallocBufferArray(relaxscip, &varid, nVarSlotConss)); - for(int t=0;t<nVarSlotConss;t++) - { - varid[t]=consids[t]; - // printf("%d \t",varid[t]); - } + // // VarSlotConss[NVarInBadConss] = cons; + // consids[NVarInBadConss]=id; + // NVarInBadConss++; + // // printf(" %s \t,",SCIPconsGetName(cons)); + // } + // } + // } + + // SCIP_CALL(SCIPallocBufferArray(relaxscip, &varids, NVarInBadConss)); + // for(int t=0;t<NVarInBadConss;t++) + // { + // varids[t]=consids[t]; + // // printf("%d \t",varids[t]); + // } + + // // vardata=SCIPvarGetData(var); + // SCIP_CALL(SCIPallocBlockMemory(scip , &vardata)); + // SCIP_CALL(SCIPduplicateBlockMemoryArray(scip, &(vardata->varids), varids, NVarInBadConss)); + // vardata->NVarInBadConss = NVarInBadConss; /**copy nVarConss to VarData */ + // vardata->varids = varids; + // // /**set the variable data to the variable*/ + // SCIPvarSetData(var,vardata); + // } + + // // SCIP_CALL(SCIPstopClock(relaxscip,varslottime)); + - // vardata=SCIPvarGetData(var); - SCIP_CALL(SCIPallocBlockMemory(scip , &vardata)); - SCIP_CALL(SCIPduplicateBlockMemoryArray(scip, &(vardata->varid), varid, nVarSlotConss)); - vardata->nVarSlotConss = nVarSlotConss; /**copy nVarConss to VarData */ - // // vardata->varquotient = varquotient; - vardata->varid = varid; - // /**set the variable data to the variable*/ - SCIPvarSetData(var,vardata); - } + // FILE* AfterPreProcessing; + // AfterPreProcessing = fopen("AfterPreProcessing.txt","w+"); + + // SCIP_CALL(SCIPprintOrigProblem(relaxscip, AfterPreProcessing, "lp", FALSE)); + + // SCIPinfoMessage(relaxscip, TimeCollector, "\n row and column identified in (sec) : %f\n", SCIPgetClockTime(relaxscip, varslottime)); + // for(int r=0;r<nSlotConss;r++) + // { + // id = badconss[r]; + // SCIP_CONS* cons = SCIPgetConss(relaxscip)[id]; + // SCIP_CALL(SCIPdelCons(relaxscip,cons)); + // } + + // /******************************************************************************************************************/ + // /*Next, we will do the initial iteration of finding the dual mulpliers of each slot conss, and their sum(dualsum) */ + // /* In the end, we will subtract this sum from the objective of the function. */ + // /* It's initial, because while we would search for more dual multipliers to solve the Lagrangian relaxation */ + // /******************************************************************************************************************/ + // SCIP_Real* dualmultipliers; + // SCIP_CALL(SCIPallocBufferArray(relaxscip,&dualmultipliers,nSlotConss)); + + // SCIP_Real* subgradients; + // SCIP_CALL(SCIPallocBufferArray(relaxscip,&subgradients,nSlotConss)); + // //initialize subgradients; + // SCIP_Real stepsize = 1.00000; + // SCIP_Real sumofduals=0; + // for ( int r = 0; r < nSlotConss; ++r) + // { + // // id = badconss[r]; + // // SCIP_CONS* cons = SCIPgetConss(relaxscip)[id]; + // //if k=1 iteration// + // dualmultipliers[r] = 1; + // sumofduals+=dualmultipliers[r]; //adds the negative of the minimum in each iteration + + // } - // SCIP_CALL(SCIPstopClock(relaxscip,varslottime)); - SCIPinfoMessage(relaxscip, NULL, "\n row and column identified in (sec) : %f\n", SCIPgetClockTime(relaxscip, varslottime)); - /******************************************************************************************************************/ - /*Next, we will do the initial iteration of finding the dual mulpliers of each slot conss, and their sum(dualsum) */ - /* In the end, we will subtract this sum from the objective of the function. */ - /* It's initial, because while we would search for more dual multipliers to solve the Lagrangian relaxation */ - /******************************************************************************************************************/ - SCIP_Real* dualmultipliers; - SCIP_CALL(SCIPallocBufferArray(relaxscip,&dualmultipliers,nSlotConss)); - int sumofduals=0; - for ( int r = 0; r < nSlotConss; ++r) - { - id = badconss[r]; - SCIP_CONS* cons = SCIPgetConss(relaxscip)[id]; + // /*******************************************************************************************************/ + // /* The reformulation of the problem can be written as follows */ + // //*>>>>>>>>>>>>>>>>>> min sum { (w[i]+sum{dual[j]})}x[i]-sum{dual[r]} <<<<<<<<<<<< */ + // /*where i is nvars, j is NVarInBadConss, and r is nSlotConss for our case *******************************/ + // /****************************************************************************************************************/ + // /* The following function will add the following to the obj(weight) of the variable, */ + // //* the obj(weight) of var + the sum of the dualmultipliers of bad constraints which contains this variable */ + // /****************************************************************************************************************/ + + + // FILE* solutions; + // solutions = fopen("sol.txt","wr"); + // FILE* dual; + // dual= fopen("dual.txt","wr"); + // FILE* variableinfo; + // variableinfo = fopen("var.txt","wr"); + // FILE* subgrad; + // subgrad = fopen("subgrads.txt","wr"); + // FILE* varobjects; + // varobjects=fopen("varobjs.txt","wr"); + + // int maxiter=20; + // SCIP_Real lagrdual =-SCIPinfinity(scip); + + // for(int iter=1;iter<=maxiter;iter++) + // { - - // dualmultipliers[r]=SCIPconsGetMultiplier(relaxscip,&cons, 0,0,0,true,0); //returns the minumum - dualmultipliers[r] = 0; - sumofduals+=dualmultipliers[r]; //adds the negative of the minimum in each iteration + // for(int v=0;v<nvars;v++) + // { + // SCIP_VAR* var = vars[v]; + // double sum =SCIPvarGetObj(var); + + // vardata=SCIPvarGetData(var); + // int* varids = SCIPvardataGetvarids(vardata); + // int NVarInBadConss = SCIPvardataGetNVarInBadConss(vardata); + + // for(int t=0;t<NVarInBadConss;t++) + // { + // sum += dualmultipliers[varids[t]]; + // fprintf(varobjects,"{%d, %f, %f\t",varids[t], dualmultipliers[varids[t]],sum); + // } + // fprintf(varobjects,"}\n\n"); + // SCIP_CALL(SCIPaddVarObj(relaxscip,var,sum)); + + // } - } - - /*******************************************************************************************************/ - /* The reformulation of the problem can be written as follows */ - //*>>>>>>>>>>>>>>>>>> min sum { (w[i]+sum{dual[j]})}x[i]-sum{dual[r]} <<<<<<<<<<<< */ - /*where i is nvars, j is nVarSlotConss, and r is nSlotConss for our case *******************************/ - /****************************************************************************************************************/ - /* The following function will add the following to the obj(weight) of the variable, */ - //* the obj(weight) of var + the sum of the dualmultipliers of bad constraints which contains this variable */ - /****************************************************************************************************************/ - - + // SCIPinfoMessage(relaxscip, TimeCollector, "\n finished changing the variable's weight after (sec) : %f\n", SCIPgetClockTime(relaxscip, varslottime)); + + // SCIP_CALL(SCIPaddOrigObjoffset(relaxscip,-1*sumofduals)); + // SCIP_CALL(SCIPprintOrigProblem(relaxscip, AfterPreProcessing, "lp", FALSE)); + // SCIPsetMessagehdlrQuiet(relaxscip, TRUE); + // // fclose(AfterPreProcessing); + + // SCIP_CALL( SCIPtransformProb(relaxscip) ); + // SCIP_CALL( SCIPsolve(relaxscip) ); + // relaxval = SCIPgetPrimalbound(relaxscip); + // SCIPdebugMessage("relaxation bound = %e status = %d\n", relaxval, SCIPgetStatus(relaxscip)); + // /*get the best solution*/ + // SCIP_SOL* bestsol = SCIPgetBestSol(relaxscip) ; + // SCIP_Real* solvals; + // SCIP_CALL(SCIPallocBufferArray(relaxscip,&solvals,nvars+1)); + - /* change variable types */ - for( i = 0; i < SCIPgetNVars(relaxscip); ++i ) - { - SCIP_VAR* var; - SCIP_Bool infeasible; + // /*text output*/ + // SCIPinfoMessage(relaxscip, TimeCollector, "\n first iteration: problem solved after (sec) : %f\n", SCIPgetClockTime(relaxscip, varslottime)); + // fprintf(solutions,"first iteration \t bound=%f, \t objsol=%f \n",SCIPgetPrimalbound(relaxscip),relaxval); + // SCIP_CALL(SCIPprintBestSol(relaxscip,solutions,FALSE)); - var = SCIPgetVars(relaxscip)[i]; - assert(var != NULL); + // /*store the solution in solvals so we can later export it to subgradient function*/ + // SCIPgetSolVals(relaxscip,bestsol,nvars,vars,solvals); + - SCIP_CALL( SCIPchgVarType(relaxscip, var, SCIP_VARTYPE_CONTINUOUS, &infeasible) ); - assert(!infeasible); - } + // stepsize = 1/double(iter+1); + // fprintf(solutions, "\niteration %d\n",iter); + // // fprintf(dual, "\niteration %d\n",iter); + // fprintf(variableinfo, "\niteration %d\n",iter); + // fprintf(varobjects, "\niteration %d\n",iter); + + // SCIP_CALL(SCIPaddOrigObjoffset(relaxscip,sumofduals)); + // // SCIP_CALL( SCIPfreeTransform(relaxscip) ); + // // SCIP_CALL( SCIPtransformProb(relaxscip) ); + + // counter = 0; + // int checker = 0; + // for(int r=0; r<nSlotConss;++r) + // { + // id = badconss[r]; + + // SCIP_CONS* cons = SCIPgetConss(relaxscip)[id]; + // // SCIP_CALL(SCIPgetConsNVars(relaxscip, cons, &nconsvars, &valid)); + + // double ax=-1; + + // for(int s=counter;s<(counter+listnconsvars[r]);++s) + // { + // // printf("%s->",SCIPvarGetName(vars[listconsvarids[s]])); + // ax+=SCIPgetSolVal(relaxscip,bestsol,vars[listconsvarids[s]]); + // fprintf(subgrad,"%s\t,%f\t, sum %f",SCIPvarGetName(vars[listconsvarids[s]]),SCIPgetSolVal(relaxscip,bestsol,vars[listconsvarids[s]]),ax); + + // } + + // counter += listnconsvars[r]; + // if(ax<0){subgradients[r]==0; } + // else{subgradients[r]==ax;checker++;} + + // } + + + - SCIP_CALL( SCIPtransformProb(relaxscip) ); - FILE* saveniter; - saveniter = fopen("time.txt","w"); + // SCIP_CALL( SCIPfreeTransform(relaxscip) ); + // SCIP_CALL( SCIPtransformProb(relaxscip) ); + // for (int v = 0; v<nvars; ++v) + // { + // SCIP_VAR* var = vars[v]; + // SCIP_CALL(SCIPchgVarObj(relaxscip,var,weights[v])); + // fprintf(variableinfo,"(%s,%f,%f)->%f\n",SCIPvarGetName(var),solvals[v],SCIPvarGetObj(var), weights[v]); + // } + // SCIP_CALL( SCIPfreeTransform(relaxscip) ); + // SCIPinfoMessage(relaxscip, TimeCollector, "\n subgradients found after (sec) : %f\n", SCIPgetClockTime(relaxscip, varslottime)); + - SCIP_CALL(SCIPprintOrigProblem(relaxscip, saveniter, "lp", FALSE)); - SCIPsetMessagehdlrQuiet(relaxscip, TRUE); - fclose(saveniter); + // //add back the sum of the duals we subtracted from the main obj function + + // int sum=0; + // for(int r=0; r<nSlotConss;++r) + // { + // dualmultipliers[r] += subgradients[r]+stepsize; + // if(dualmultipliers[r]<0){dualmultipliers[r]=0;} + + // sum+=dualmultipliers[r]; + // // fprintf(dual," then %f \n",dualmultipliers[r]); + // } + // sumofduals=sum; + // fprintf(dual,"iteration %d, sumofduals=%f\n",iter, sumofduals); + // SCIPinfoMessage(relaxscip, TimeCollector, "\n new dual found after (sec) : %f\n", SCIPgetClockTime(relaxscip, varslottime)); + // if(checker==0){printf("solution found in %d iterations\n",iter); break;} + // } + // SCIPfreeTransform(relaxscip); + // fclose(variableinfo); + // fclose(dual); + // fclose(subgrad); + // fclose(varobjects); - SCIP_CALL( SCIPsolve(relaxscip) ); - relaxval = SCIPgetPrimalbound(relaxscip); - SCIPdebugMessage("relaxation bound = %e status = %d\n", relaxval, SCIPgetStatus(relaxscip)); if( SCIPgetStatus(relaxscip) == SCIP_STATUS_OPTIMAL ) { @@ -608,6 +860,8 @@ SCIP* relaxscip; if( (! SCIPisRelaxSolValid(scip)) || SCIPisGT(scip, relaxval, SCIPgetRelaxSolObj(scip)) ) { SCIPdebugMsg(scip, "Setting LP relaxation solution, which improved upon earlier solution\n"); + + SCIP_CALL( SCIPclearRelaxSolVals(scip, relax) ); for( i = 0; i < SCIPgetNVars(scip); ++i ) @@ -628,6 +882,7 @@ SCIP* relaxscip; } SCIPdebugMsg(scip, "LP lower bound = %g\n", relaxval); + *lowerbound = relaxval; *result = SCIP_SUCCESS; } diff --git a/src/relax_lagr.h b/src/relax_lagr.h index 44a1f2691e841d8524f9509ea2caf8c6483d7429..352b5fd8fdb275e97a5f12298d05511f518fec26 100644 --- a/src/relax_lagr.h +++ b/src/relax_lagr.h @@ -39,6 +39,15 @@ SCIP_RETCODE SCIPincludeRelaxlagrangian( #ifdef __cplusplus } + +int SCIPvardataGetNVarInBadConss( + SCIP_VARDATA* vardata /**< variable data */ +); + +int* SCIPvardataGetvarids( + SCIP_VARDATA* vardata /**< variable data */ +); + #endif #endif diff --git a/src/relax_lagr32.cpp b/src/relax_lagr32.cpp index 646dc85e19b9fe0f40298c5c12a31bd27984e1d7..61f4b2358b5c4c46c7258324113dd3e769ca7894 100644 --- a/src/relax_lagr32.cpp +++ b/src/relax_lagr32.cpp @@ -225,7 +225,7 @@ SCIP_DECL_RELAXINIT(relaxInitlagr) for(int k = 0; k < niters; ++k) { - // stepsize = 10*(1/(0.5*(k+1))); + stepsize = 10*(1/(0.5*(k+1))); // printf("%f\n\n",stepsize); sumofaddonvars = 0; SCIP_CALL(SCIPfreeTransform(relaxscip)); @@ -239,9 +239,7 @@ SCIP_DECL_RELAXINIT(relaxInitlagr) // printf("*****************************upperbound*********************---> %f",SCIPgetUpperbound(relaxscip)); // SCIP_CALL(SCIPprintOrigProblem(relaxscip, file, "lp", FALSE)); - SCIPsolveiteration(relaxscip,nSlotConss,&subgradients,2,&stepsize,&bestsolvals,&upperbound, k); - //prinf("\t\t\t\t%fUpperbound \n",upperbound); - + SCIPsolveiteration(relaxscip,nSlotConss,&subgradients,2,&stepsize,&bestsolvals,&upperbound, k); SCIP_CALL(SCIPduplicateBlockMemoryArray(scip, &(relaxdata->bestsolvals), bestsolvals, nvars+1)); // printf("\n best obj = %f \n",bestsolvals[nvars]); diff --git a/subgrads.txt b/subgrads.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/time.txt b/time.txt index 4e649a39a1f38c4ccbcb466bd687f4540a08c40b..b7aef1dabdbc8cdb0a811f651e446132db02f872 100644 --- a/time.txt +++ b/time.txt @@ -1,119 +1,1127 @@ -\ SCIP STATISTICS -\ Problem name : data/6f4s.lp_relaxscip -\ Variables : 54 (27 binary, 0 integer, 0 implicit integer, 27 continuous) -\ Constraints : 36 -Minimize - Obj: +120 t_x_{6}_{120} +105 t_x_{6}_{105} +90 t_x_{6}_{90} +75 t_x_{6}_{75} +60 t_x_{6}_{60} +45 t_x_{6}_{45} - +30 t_x_{6}_{30} +15 t_x_{6}_{15} +120 t_x_{5}_{120} +105 t_x_{5}_{105} +90 t_x_{5}_{90} +75 t_x_{5}_{75} - +60 t_x_{5}_{60} +45 t_x_{5}_{45} +30 t_x_{5}_{30} +15 t_x_{5}_{15} +120 t_x_{4}_{120} +105 t_x_{4}_{105} - +90 t_x_{4}_{90} +75 t_x_{4}_{75} +60 t_x_{4}_{60} +45 t_x_{4}_{45} +30 t_x_{4}_{30} +15 t_x_{4}_{15} - +105 t_x_{3}_{105} +90 t_x_{3}_{90} +75 t_x_{3}_{75} +60 t_x_{3}_{60} +45 t_x_{3}_{45} +30 t_x_{3}_{30} - +15 t_x_{3}_{15} +120 t_x_{2}_{120} +105 t_x_{2}_{105} +90 t_x_{2}_{90} +75 t_x_{2}_{75} +60 t_x_{2}_{60} - +45 t_x_{2}_{45} +30 t_x_{2}_{30} +15 t_x_{2}_{15} +120 t_x_{1}_{120} +105 t_x_{1}_{105} +90 t_x_{1}_{90} - +75 t_x_{1}_{75} +60 t_x_{1}_{60} +45 t_x_{1}_{45} +30 t_x_{1}_{30} +15 t_x_{1}_{15} +1 t_x_{1}_{0} - +120 t_x_{3}_{120} -Subject to - slot1: +1 t_x_{1}_{0} +1 t_x_{2}_{0} <= +1 - slot2: +1 t_x_{1}_{15} +1 t_x_{2}_{15} <= +1 - slot3: +1 t_x_{1}_{30} +1 t_x_{2}_{30} <= +1 - slot4: +1 t_x_{1}_{45} +1 t_x_{2}_{45} <= +1 - slot5: +1 t_x_{1}_{60} +1 t_x_{2}_{60} <= +1 - slot6: +1 t_x_{1}_{75} +1 t_x_{2}_{75} <= +1 - slot7: +1 t_x_{1}_{90} +1 t_x_{2}_{90} <= +1 - slot8: +1 t_x_{1}_{105} +1 t_x_{2}_{105} <= +1 - F_6: +1 t_x_{6}_{0} +1 t_x_{6}_{15} +1 t_x_{6}_{30} +1 t_x_{6}_{45} +1 t_x_{6}_{60} +1 t_x_{6}_{75} +1 t_x_{6}_{90} - +1 t_x_{6}_{105} +1 t_x_{6}_{120} = +1 - slot10: +1 t_x_{2}_{0} +1 t_x_{3}_{0} +1 t_x_{4}_{0} <= +1 - slot11: +1 t_x_{2}_{15} +1 t_x_{3}_{15} +1 t_x_{4}_{15} <= +1 - slot12: +1 t_x_{2}_{30} +1 t_x_{3}_{30} +1 t_x_{4}_{30} <= +1 - slot13: +1 t_x_{2}_{45} +1 t_x_{3}_{45} +1 t_x_{4}_{45} <= +1 - slot14: +1 t_x_{2}_{60} +1 t_x_{3}_{60} +1 t_x_{4}_{60} <= +1 - slot15: +1 t_x_{2}_{75} +1 t_x_{3}_{75} +1 t_x_{4}_{75} <= +1 - slot16: +1 t_x_{2}_{90} +1 t_x_{3}_{90} +1 t_x_{4}_{90} <= +1 - F_4: +1 t_x_{4}_{0} +1 t_x_{4}_{15} +1 t_x_{4}_{30} +1 t_x_{4}_{45} +1 t_x_{4}_{60} +1 t_x_{4}_{75} +1 t_x_{4}_{90} - +1 t_x_{4}_{105} +1 t_x_{4}_{120} = +1 - F_2: +1 t_x_{2}_{0} +1 t_x_{2}_{15} +1 t_x_{2}_{30} +1 t_x_{2}_{45} +1 t_x_{2}_{60} +1 t_x_{2}_{75} +1 t_x_{2}_{90} - +1 t_x_{2}_{105} +1 t_x_{2}_{120} = +1 - slot19: +1 t_x_{1}_{0} +1 t_x_{3}_{0} +1 t_x_{5}_{0} <= +1 - slot20: +1 t_x_{1}_{15} +1 t_x_{3}_{15} +1 t_x_{5}_{15} <= +1 - slot21: +1 t_x_{1}_{30} +1 t_x_{3}_{30} +1 t_x_{5}_{30} <= +1 - slot22: +1 t_x_{1}_{45} +1 t_x_{3}_{45} +1 t_x_{5}_{45} <= +1 - slot23: +1 t_x_{1}_{60} +1 t_x_{3}_{60} +1 t_x_{5}_{60} <= +1 - slot24: +1 t_x_{1}_{75} +1 t_x_{3}_{75} +1 t_x_{5}_{75} <= +1 - F_1: +1 t_x_{1}_{0} +1 t_x_{1}_{15} +1 t_x_{1}_{30} +1 t_x_{1}_{45} +1 t_x_{1}_{60} +1 t_x_{1}_{75} +1 t_x_{1}_{90} - +1 t_x_{1}_{105} +1 t_x_{1}_{120} = +1 - F_3: +1 t_x_{3}_{0} +1 t_x_{3}_{15} +1 t_x_{3}_{30} +1 t_x_{3}_{45} +1 t_x_{3}_{60} +1 t_x_{3}_{75} +1 t_x_{3}_{90} - +1 t_x_{3}_{105} +1 t_x_{3}_{120} = +1 - F_5: +1 t_x_{5}_{0} +1 t_x_{5}_{15} +1 t_x_{5}_{30} +1 t_x_{5}_{45} +1 t_x_{5}_{60} +1 t_x_{5}_{75} +1 t_x_{5}_{90} - +1 t_x_{5}_{105} +1 t_x_{5}_{120} = +1 - slot28: +1 t_x_{4}_{0} +1 t_x_{5}_{0} +1 t_x_{6}_{0} <= +1 - slot29: +1 t_x_{4}_{15} +1 t_x_{5}_{15} +1 t_x_{6}_{15} <= +1 - slot30: +1 t_x_{4}_{30} +1 t_x_{5}_{30} +1 t_x_{6}_{30} <= +1 - slot31: +1 t_x_{4}_{45} +1 t_x_{5}_{45} +1 t_x_{6}_{45} <= +1 - slot32: +1 t_x_{4}_{60} +1 t_x_{5}_{60} +1 t_x_{6}_{60} <= +1 - slot33: +1 t_x_{4}_{75} +1 t_x_{5}_{75} +1 t_x_{6}_{75} <= +1 - slot35: +1 t_x_{4}_{105} +1 t_x_{5}_{105} +1 t_x_{6}_{105} <= +1 - cf1_0: -1 t_x_{2}_{60} +1 t_x_{3}_{0} +1 t_x_{3}_{15} +1 t_x_{3}_{30} +1 t_x_{3}_{45} +1 t_x_{3}_{75} - >= +0 - cf1_1: -1 t_x_{1}_{15} -1 t_x_{3}_{30} -1 t_x_{4}_{15} -1 t_x_{6}_{30} >= -3 -Bounds - 0 <= t_x_{6}_{120} <= 0 - 0 <= t_x_{6}_{105} <= 0 - 0 <= t_x_{6}_{90} <= 0 - 0 <= t_x_{6}_{75} <= 1 - 0 <= t_x_{6}_{60} <= 1 - 0 <= t_x_{6}_{45} <= 1 - 0 <= t_x_{6}_{30} <= 1 - 0 <= t_x_{6}_{15} <= 1 - 0 <= t_x_{6}_{0} <= 1 - 0 <= t_x_{5}_{120} <= 0 - 0 <= t_x_{5}_{105} <= 0 - 0 <= t_x_{5}_{90} <= 0 - 0 <= t_x_{5}_{75} <= 1 - 0 <= t_x_{5}_{60} <= 1 - 0 <= t_x_{5}_{45} <= 1 - 0 <= t_x_{5}_{30} <= 1 - 0 <= t_x_{5}_{15} <= 1 - 0 <= t_x_{5}_{0} <= 1 - 0 <= t_x_{4}_{120} <= 0 - 0 <= t_x_{4}_{105} <= 0 - 0 <= t_x_{4}_{90} <= 0 - 0 <= t_x_{4}_{75} <= 1 - 0 <= t_x_{4}_{60} <= 1 - 0 <= t_x_{4}_{45} <= 1 - 0 <= t_x_{4}_{30} <= 1 - 0 <= t_x_{4}_{15} <= 1 - 0 <= t_x_{4}_{0} <= 1 - 0 <= t_x_{3}_{105} <= 0 - 0 <= t_x_{3}_{90} <= 0 - 0 <= t_x_{3}_{75} <= 1 - 0 <= t_x_{3}_{60} <= 1 - 0 <= t_x_{3}_{45} <= 1 - 0 <= t_x_{3}_{30} <= 1 - 0 <= t_x_{3}_{15} <= 1 - 0 <= t_x_{3}_{0} <= 1 - 0 <= t_x_{2}_{120} <= 0 - 0 <= t_x_{2}_{105} <= 0 - 0 <= t_x_{2}_{90} <= 0 - 0 <= t_x_{2}_{75} <= 1 - 0 <= t_x_{2}_{60} <= 1 - 0 <= t_x_{2}_{45} <= 1 - 0 <= t_x_{2}_{30} <= 1 - 0 <= t_x_{2}_{15} <= 1 - 0 <= t_x_{2}_{0} <= 1 - 0 <= t_x_{1}_{120} <= 0 - 0 <= t_x_{1}_{105} <= 0 - 0 <= t_x_{1}_{90} <= 0 - 0 <= t_x_{1}_{75} <= 0 - 0 <= t_x_{1}_{60} <= 1 - 0 <= t_x_{1}_{45} <= 1 - 0 <= t_x_{1}_{30} <= 1 - 0 <= t_x_{1}_{15} <= 1 - 0 <= t_x_{1}_{0} <= 1 - 0 <= t_x_{3}_{120} <= 0 -Binaries - t_x_{6}_{120} t_x_{6}_{105} t_x_{6}_{90} t_x_{6}_{75} t_x_{6}_{60} t_x_{6}_{45} t_x_{6}_{30} t_x_{6}_{15} - t_x_{6}_{0} t_x_{5}_{120} t_x_{5}_{105} t_x_{5}_{90} t_x_{5}_{75} t_x_{5}_{60} t_x_{5}_{45} t_x_{5}_{30} - t_x_{5}_{15} t_x_{5}_{0} t_x_{4}_{120} t_x_{4}_{105} t_x_{4}_{90} t_x_{4}_{75} t_x_{4}_{60} t_x_{4}_{45} - t_x_{4}_{30} t_x_{4}_{15} t_x_{4}_{0} -End + + row and column identified in (sec) : 0.000172 + + finished changing the variable's weight after (sec) : 0.000414 + + first iteration: problem solved after (sec) : 0.003492 + + subgradients found after (sec) : 0.008049 +, lowerbound = 1.000000 + + new dual found after (sec) : 0.008091 + + finished changing the variable's weight after (sec) : 0.008106 + + first iteration: problem solved after (sec) : 0.010124 + + subgradients found after (sec) : 0.014033 +, lowerbound = 1.000000 + + new dual found after (sec) : 0.014076 + + finished changing the variable's weight after (sec) : 0.014095 + + first iteration: problem solved after (sec) : 0.016643 + + subgradients found after (sec) : 0.026668 +, lowerbound = 1.000000 + + new dual found after (sec) : 0.026862 + + finished changing the variable's weight after (sec) : 0.026919 + + first iteration: problem solved after (sec) : 0.033669 + + subgradients found after (sec) : 0.039234 +, lowerbound = 1.000000 + + new dual found after (sec) : 0.039348 + + finished changing the variable's weight after (sec) : 0.039378 + + first iteration: problem solved after (sec) : 0.050431 + + subgradients found after (sec) : 0.063768 +, lowerbound = 1.000000 + + new dual found after (sec) : 0.063828 + + finished changing the variable's weight after (sec) : 0.063845 + + first iteration: problem solved after (sec) : 0.069662 + + subgradients found after (sec) : 0.081571 +, lowerbound = 1.000000 + + new dual found after (sec) : 0.081627 + + finished changing the variable's weight after (sec) : 0.081643 + + first iteration: problem solved after (sec) : 0.092082 + + subgradients found after (sec) : 0.098960 +, lowerbound = 1.000000 + + new dual found after (sec) : 0.098998 + + finished changing the variable's weight after (sec) : 0.099017 + + first iteration: problem solved after (sec) : 0.110073 + + subgradients found after (sec) : 0.116468 +, lowerbound = 1.000000 + + new dual found after (sec) : 0.116506 + + finished changing the variable's weight after (sec) : 0.116523 + + first iteration: problem solved after (sec) : 0.137771 + + subgradients found after (sec) : 0.146675 +, lowerbound = 46.000000 + + new dual found after (sec) : 0.146714 + + finished changing the variable's weight after (sec) : 0.146730 + + first iteration: problem solved after (sec) : 0.163891 + + subgradients found after (sec) : 0.170033 +, lowerbound = 1.000000 + + new dual found after (sec) : 0.170076 + + finished changing the variable's weight after (sec) : 0.170090 + + first iteration: problem solved after (sec) : 0.185949 + + subgradients found after (sec) : 0.202449 +, lowerbound = 46.000000 + + new dual found after (sec) : 0.202493 + + finished changing the variable's weight after (sec) : 0.202560 + + first iteration: problem solved after (sec) : 0.220240 + + subgradients found after (sec) : 0.236488 +, lowerbound = 46.000000 + + new dual found after (sec) : 0.236539 + + finished changing the variable's weight after (sec) : 0.236588 + + first iteration: problem solved after (sec) : 0.247929 + + subgradients found after (sec) : 0.257980 +, lowerbound = 46.000000 + + new dual found after (sec) : 0.258025 + + finished changing the variable's weight after (sec) : 0.258043 + + first iteration: problem solved after (sec) : 0.267446 + + subgradients found after (sec) : 0.272147 +, lowerbound = 1.000000 + + new dual found after (sec) : 0.272175 + + finished changing the variable's weight after (sec) : 0.272190 + + first iteration: problem solved after (sec) : 0.283181 + + subgradients found after (sec) : 0.292040 +, lowerbound = 75.000000 + + new dual found after (sec) : 0.292135 + + finished changing the variable's weight after (sec) : 0.292170 + + first iteration: problem solved after (sec) : 0.304545 + + subgradients found after (sec) : 0.313874 +, lowerbound = 46.000000 + + new dual found after (sec) : 0.313925 + + finished changing the variable's weight after (sec) : 0.313937 + + first iteration: problem solved after (sec) : 0.325010 + + subgradients found after (sec) : 0.332073 +, lowerbound = 1.000000 + + new dual found after (sec) : 0.332112 + + finished changing the variable's weight after (sec) : 0.332127 + + first iteration: problem solved after (sec) : 0.344750 + + subgradients found after (sec) : 0.350420 +, lowerbound = 75.000000 + + new dual found after (sec) : 0.350457 + + finished changing the variable's weight after (sec) : 0.350477 + + first iteration: problem solved after (sec) : 0.362271 + + subgradients found after (sec) : 0.367667 +, lowerbound = 31.000000 + + new dual found after (sec) : 0.367718 + + finished changing the variable's weight after (sec) : 0.367735 + + first iteration: problem solved after (sec) : 0.380156 + + subgradients found after (sec) : 0.389135 +, lowerbound = 75.000000 + + new dual found after (sec) : 0.389198 + + finished changing the variable's weight after (sec) : 0.389223 + + first iteration: problem solved after (sec) : 0.403949 + + subgradients found after (sec) : 0.412378 +, lowerbound = 1.000000 + + new dual found after (sec) : 0.412463 + + finished changing the variable's weight after (sec) : 0.412494 + + first iteration: problem solved after (sec) : 0.425490 + + subgradients found after (sec) : 0.436080 +, lowerbound = 75.000000 + + new dual found after (sec) : 0.436199 + + finished changing the variable's weight after (sec) : 0.436247 + + first iteration: problem solved after (sec) : 0.448236 + + subgradients found after (sec) : 0.456060 +, lowerbound = 1.000000 + + new dual found after (sec) : 0.456137 + + finished changing the variable's weight after (sec) : 0.456159 + + first iteration: problem solved after (sec) : 0.468406 + + subgradients found after (sec) : 0.480247 +, lowerbound = 75.000000 + + new dual found after (sec) : 0.480289 + + finished changing the variable's weight after (sec) : 0.480304 + + first iteration: problem solved after (sec) : 0.490254 + + subgradients found after (sec) : 0.507246 +, lowerbound = 31.000000 + + new dual found after (sec) : 0.507302 + + finished changing the variable's weight after (sec) : 0.507316 + + first iteration: problem solved after (sec) : 0.520940 + + subgradients found after (sec) : 0.530743 +, lowerbound = 31.000000 + + new dual found after (sec) : 0.530785 + + finished changing the variable's weight after (sec) : 0.530803 + + first iteration: problem solved after (sec) : 0.544776 + + subgradients found after (sec) : 0.564726 +, lowerbound = 45.000000 + + new dual found after (sec) : 0.564781 + + finished changing the variable's weight after (sec) : 0.564805 + + first iteration: problem solved after (sec) : 0.580204 + + subgradients found after (sec) : 0.583687 +, lowerbound = 45.000000 + + new dual found after (sec) : 0.583727 + + finished changing the variable's weight after (sec) : 0.583743 + + first iteration: problem solved after (sec) : 0.592578 + + subgradients found after (sec) : 0.597884 +, lowerbound = 31.000000 + + new dual found after (sec) : 0.597927 + + finished changing the variable's weight after (sec) : 0.597938 + + first iteration: problem solved after (sec) : 0.601858 + + subgradients found after (sec) : 0.613548 +, lowerbound = 75.000000 + + new dual found after (sec) : 0.613673 + + finished changing the variable's weight after (sec) : 0.613776 + + first iteration: problem solved after (sec) : 0.618175 + + subgradients found after (sec) : 0.622886 +, lowerbound = 1.000000 + + new dual found after (sec) : 0.623006 + + finished changing the variable's weight after (sec) : 0.623073 + + first iteration: problem solved after (sec) : 0.634738 + + subgradients found after (sec) : 0.644929 +, lowerbound = 75.000000 + + new dual found after (sec) : 0.645087 + + finished changing the variable's weight after (sec) : 0.645164 + + first iteration: problem solved after (sec) : 0.650008 + + subgradients found after (sec) : 0.655097 +, lowerbound = 1.000000 + + new dual found after (sec) : 0.655218 + + finished changing the variable's weight after (sec) : 0.655246 + + first iteration: problem solved after (sec) : 0.663799 + + subgradients found after (sec) : 0.666612 +, lowerbound = 75.000000 + + new dual found after (sec) : 0.666659 + + finished changing the variable's weight after (sec) : 0.666675 + + first iteration: problem solved after (sec) : 0.673054 + + subgradients found after (sec) : 0.682264 +, lowerbound = 31.000000 + + new dual found after (sec) : 0.682322 + + finished changing the variable's weight after (sec) : 0.682347 + + first iteration: problem solved after (sec) : 0.687952 + + subgradients found after (sec) : 0.697936 +, lowerbound = 45.000000 + + new dual found after (sec) : 0.697986 + + finished changing the variable's weight after (sec) : 0.698003 + + first iteration: problem solved after (sec) : 0.707602 + + subgradients found after (sec) : 0.714583 +, lowerbound = 45.000000 + + new dual found after (sec) : 0.714626 + + finished changing the variable's weight after (sec) : 0.714643 + + first iteration: problem solved after (sec) : 0.725393 + + subgradients found after (sec) : 0.730832 +, lowerbound = 31.000000 + + new dual found after (sec) : 0.730879 + + finished changing the variable's weight after (sec) : 0.730895 + + first iteration: problem solved after (sec) : 0.746663 + + subgradients found after (sec) : 0.751705 +, lowerbound = 45.000000 + + new dual found after (sec) : 0.751794 + + finished changing the variable's weight after (sec) : 0.751817 + + first iteration: problem solved after (sec) : 0.763637 + + subgradients found after (sec) : 0.769296 +, lowerbound = 120.000000 + + new dual found after (sec) : 0.769458 + + finished changing the variable's weight after (sec) : 0.769536 + + first iteration: problem solved after (sec) : 0.774887 + + subgradients found after (sec) : 0.783403 +, lowerbound = 31.000000 + + new dual found after (sec) : 0.783515 + + finished changing the variable's weight after (sec) : 0.783556 + + first iteration: problem solved after (sec) : 0.789954 + + subgradients found after (sec) : 0.803887 +, lowerbound = 120.000000 + + new dual found after (sec) : 0.803957 + + finished changing the variable's weight after (sec) : 0.803990 + + first iteration: problem solved after (sec) : 0.811035 + + subgradients found after (sec) : 0.820756 +, lowerbound = 31.000000 + + new dual found after (sec) : 0.820823 + + finished changing the variable's weight after (sec) : 0.820861 + + first iteration: problem solved after (sec) : 0.831300 + + subgradients found after (sec) : 0.837327 +, lowerbound = 120.000000 + + new dual found after (sec) : 0.837398 + + finished changing the variable's weight after (sec) : 0.837426 + + first iteration: problem solved after (sec) : 0.854492 + + subgradients found after (sec) : 0.864392 +, lowerbound = 31.000000 + + new dual found after (sec) : 0.864545 + + finished changing the variable's weight after (sec) : 0.864614 + + first iteration: problem solved after (sec) : 0.881985 + + subgradients found after (sec) : 0.886445 +, lowerbound = 120.000000 + + new dual found after (sec) : 0.886498 + + finished changing the variable's weight after (sec) : 0.886517 + + first iteration: problem solved after (sec) : 0.899798 + + subgradients found after (sec) : 0.903220 +, lowerbound = 31.000000 + + new dual found after (sec) : 0.903264 + + finished changing the variable's weight after (sec) : 0.903286 + + first iteration: problem solved after (sec) : 0.914383 + + subgradients found after (sec) : 0.918506 +, lowerbound = 120.000000 + + new dual found after (sec) : 0.918559 + + finished changing the variable's weight after (sec) : 0.918579 + + first iteration: problem solved after (sec) : 0.928877 + + subgradients found after (sec) : 0.939936 +, lowerbound = 31.000000 + + new dual found after (sec) : 0.940008 + + finished changing the variable's weight after (sec) : 0.940026 + + first iteration: problem solved after (sec) : 0.947488 + + subgradients found after (sec) : 0.964042 +, lowerbound = 120.000000 + + new dual found after (sec) : 0.964086 + + finished changing the variable's weight after (sec) : 0.964109 + + first iteration: problem solved after (sec) : 0.973338 + + subgradients found after (sec) : 0.980353 +, lowerbound = 31.000000 + + new dual found after (sec) : 0.980432 + + finished changing the variable's weight after (sec) : 0.980456 + + first iteration: problem solved after (sec) : 0.987019 + + subgradients found after (sec) : 0.993122 +, lowerbound = 120.000000 + + new dual found after (sec) : 0.993286 + + finished changing the variable's weight after (sec) : 0.993330 + + first iteration: problem solved after (sec) : 0.999261 + + subgradients found after (sec) : 1.005822 +, lowerbound = 31.000000 + + new dual found after (sec) : 1.005879 + + finished changing the variable's weight after (sec) : 1.005898 + + first iteration: problem solved after (sec) : 1.012163 + + subgradients found after (sec) : 1.022449 +, lowerbound = 120.000000 + + new dual found after (sec) : 1.022520 + + finished changing the variable's weight after (sec) : 1.022543 + + first iteration: problem solved after (sec) : 1.027397 + + subgradients found after (sec) : 1.039532 +, lowerbound = 31.000000 + + new dual found after (sec) : 1.039577 + + finished changing the variable's weight after (sec) : 1.039593 + + first iteration: problem solved after (sec) : 1.046551 + + subgradients found after (sec) : 1.051828 +, lowerbound = 120.000000 + + new dual found after (sec) : 1.051897 + + finished changing the variable's weight after (sec) : 1.051913 + + first iteration: problem solved after (sec) : 1.059183 + + subgradients found after (sec) : 1.062836 +, lowerbound = 31.000000 + + new dual found after (sec) : 1.062881 + + finished changing the variable's weight after (sec) : 1.062899 + + first iteration: problem solved after (sec) : 1.077821 + + subgradients found after (sec) : 1.081575 +, lowerbound = 120.000000 + + new dual found after (sec) : 1.081611 + + finished changing the variable's weight after (sec) : 1.081627 + + first iteration: problem solved after (sec) : 1.096263 + + subgradients found after (sec) : 1.099700 +, lowerbound = 31.000000 + + new dual found after (sec) : 1.099747 + + finished changing the variable's weight after (sec) : 1.099770 + + first iteration: problem solved after (sec) : 1.115608 + + subgradients found after (sec) : 1.119333 +, lowerbound = 120.000000 + + new dual found after (sec) : 1.119369 + + finished changing the variable's weight after (sec) : 1.119384 + + first iteration: problem solved after (sec) : 1.134438 + + subgradients found after (sec) : 1.138069 +, lowerbound = 31.000000 + + new dual found after (sec) : 1.138116 + + finished changing the variable's weight after (sec) : 1.138133 + + first iteration: problem solved after (sec) : 1.158348 + + subgradients found after (sec) : 1.166183 +, lowerbound = 120.000000 + + new dual found after (sec) : 1.166226 + + finished changing the variable's weight after (sec) : 1.166244 + + first iteration: problem solved after (sec) : 1.181479 + + subgradients found after (sec) : 1.184905 +, lowerbound = 31.000000 + + new dual found after (sec) : 1.184957 + + finished changing the variable's weight after (sec) : 1.184983 + + first iteration: problem solved after (sec) : 1.200687 + + subgradients found after (sec) : 1.207300 +, lowerbound = 120.000000 + + new dual found after (sec) : 1.207356 + + finished changing the variable's weight after (sec) : 1.207385 + + first iteration: problem solved after (sec) : 1.219406 + + subgradients found after (sec) : 1.222643 +, lowerbound = 31.000000 + + new dual found after (sec) : 1.222679 + + finished changing the variable's weight after (sec) : 1.222696 + + first iteration: problem solved after (sec) : 1.238111 + + subgradients found after (sec) : 1.244475 +, lowerbound = 120.000000 + + new dual found after (sec) : 1.244587 + + finished changing the variable's weight after (sec) : 1.244842 + + first iteration: problem solved after (sec) : 1.257716 + + subgradients found after (sec) : 1.273762 +, lowerbound = 31.000000 + + new dual found after (sec) : 1.273810 + + finished changing the variable's weight after (sec) : 1.273827 + + first iteration: problem solved after (sec) : 1.285971 + + subgradients found after (sec) : 1.290857 +, lowerbound = 120.000000 + + new dual found after (sec) : 1.290905 + + finished changing the variable's weight after (sec) : 1.290927 + + first iteration: problem solved after (sec) : 1.311756 + + subgradients found after (sec) : 1.326074 +, lowerbound = 31.000000 + + new dual found after (sec) : 1.326125 + + finished changing the variable's weight after (sec) : 1.326160 + + first iteration: problem solved after (sec) : 1.334530 + + subgradients found after (sec) : 1.349052 +, lowerbound = 120.000000 + + new dual found after (sec) : 1.349107 + + finished changing the variable's weight after (sec) : 1.349124 + + first iteration: problem solved after (sec) : 1.353694 + + subgradients found after (sec) : 1.364390 +, lowerbound = 31.000000 + + new dual found after (sec) : 1.364442 + + finished changing the variable's weight after (sec) : 1.364465 + + first iteration: problem solved after (sec) : 1.368809 + + subgradients found after (sec) : 1.381127 +, lowerbound = 120.000000 + + new dual found after (sec) : 1.381194 + + finished changing the variable's weight after (sec) : 1.381211 + + first iteration: problem solved after (sec) : 1.390071 + + subgradients found after (sec) : 1.398892 +, lowerbound = 31.000000 + + new dual found after (sec) : 1.398947 + + finished changing the variable's weight after (sec) : 1.399007 + + first iteration: problem solved after (sec) : 1.412047 + + subgradients found after (sec) : 1.417008 +, lowerbound = 120.000000 + + new dual found after (sec) : 1.417149 + + finished changing the variable's weight after (sec) : 1.417165 + + first iteration: problem solved after (sec) : 1.429299 + + subgradients found after (sec) : 1.432734 +, lowerbound = 31.000000 + + new dual found after (sec) : 1.432779 + + finished changing the variable's weight after (sec) : 1.432807 + + first iteration: problem solved after (sec) : 1.439484 + + subgradients found after (sec) : 1.452770 +, lowerbound = 120.000000 + + new dual found after (sec) : 1.452826 + + finished changing the variable's weight after (sec) : 1.452858 + + first iteration: problem solved after (sec) : 1.466494 + + subgradients found after (sec) : 1.470024 +, lowerbound = 31.000000 + + new dual found after (sec) : 1.470077 + + finished changing the variable's weight after (sec) : 1.470098 + + first iteration: problem solved after (sec) : 1.482338 + + subgradients found after (sec) : 1.488006 +, lowerbound = 120.000000 + + new dual found after (sec) : 1.488054 + + finished changing the variable's weight after (sec) : 1.488087 + + first iteration: problem solved after (sec) : 1.504377 + + subgradients found after (sec) : 1.507797 +, lowerbound = 31.000000 + + new dual found after (sec) : 1.507849 + + finished changing the variable's weight after (sec) : 1.507864 + + first iteration: problem solved after (sec) : 1.512105 + + subgradients found after (sec) : 1.520699 +, lowerbound = 120.000000 + + new dual found after (sec) : 1.520751 + + finished changing the variable's weight after (sec) : 1.520767 + + first iteration: problem solved after (sec) : 1.528500 + + subgradients found after (sec) : 1.541864 +, lowerbound = 31.000000 + + new dual found after (sec) : 1.542110 + + finished changing the variable's weight after (sec) : 1.542185 + + first iteration: problem solved after (sec) : 1.552735 + + subgradients found after (sec) : 1.564996 +, lowerbound = 120.000000 + + new dual found after (sec) : 1.565076 + + finished changing the variable's weight after (sec) : 1.565098 + + first iteration: problem solved after (sec) : 1.580799 + + subgradients found after (sec) : 1.585080 +, lowerbound = 31.000000 + + new dual found after (sec) : 1.585129 + + finished changing the variable's weight after (sec) : 1.585152 + + first iteration: problem solved after (sec) : 1.599165 + + subgradients found after (sec) : 1.602631 +, lowerbound = 120.000000 + + new dual found after (sec) : 1.602675 + + finished changing the variable's weight after (sec) : 1.602692 + + first iteration: problem solved after (sec) : 1.616960 + + subgradients found after (sec) : 1.621737 +, lowerbound = 31.000000 + + new dual found after (sec) : 1.621923 + + finished changing the variable's weight after (sec) : 1.621995 + + first iteration: problem solved after (sec) : 1.636517 + + subgradients found after (sec) : 1.641711 +, lowerbound = 120.000000 + + new dual found after (sec) : 1.641970 + + finished changing the variable's weight after (sec) : 1.642051 + + first iteration: problem solved after (sec) : 1.656004 + + subgradients found after (sec) : 1.659406 +, lowerbound = 31.000000 + + new dual found after (sec) : 1.659453 + + finished changing the variable's weight after (sec) : 1.659469 + + first iteration: problem solved after (sec) : 1.675267 + + subgradients found after (sec) : 1.678431 +, lowerbound = 120.000000 + + new dual found after (sec) : 1.678479 + + finished changing the variable's weight after (sec) : 1.678497 + + first iteration: problem solved after (sec) : 1.685132 + + subgradients found after (sec) : 1.696662 +, lowerbound = 31.000000 + + new dual found after (sec) : 1.696718 + + finished changing the variable's weight after (sec) : 1.696772 + + first iteration: problem solved after (sec) : 1.707206 + + subgradients found after (sec) : 1.715269 +, lowerbound = 120.000000 + + new dual found after (sec) : 1.715314 + + finished changing the variable's weight after (sec) : 1.715328 + + first iteration: problem solved after (sec) : 1.730080 + + subgradients found after (sec) : 1.734707 +, lowerbound = 31.000000 + + new dual found after (sec) : 1.734849 + + finished changing the variable's weight after (sec) : 1.734881 + + first iteration: problem solved after (sec) : 1.744065 + + subgradients found after (sec) : 1.757242 +, lowerbound = 120.000000 + + new dual found after (sec) : 1.757308 + + finished changing the variable's weight after (sec) : 1.757331 + + first iteration: problem solved after (sec) : 1.772778 + + subgradients found after (sec) : 1.776581 +, lowerbound = 31.000000 + + new dual found after (sec) : 1.776661 + + finished changing the variable's weight after (sec) : 1.776715 + + first iteration: problem solved after (sec) : 1.788041 + + subgradients found after (sec) : 1.791603 +, lowerbound = 120.000000 + + new dual found after (sec) : 1.791644 + + finished changing the variable's weight after (sec) : 1.791666 + + first iteration: problem solved after (sec) : 1.804485 + + subgradients found after (sec) : 1.811822 +, lowerbound = 31.000000 + + new dual found after (sec) : 1.811865 + + finished changing the variable's weight after (sec) : 1.811887 + + first iteration: problem solved after (sec) : 1.816012 + + subgradients found after (sec) : 1.831486 +, lowerbound = 120.000000 + + new dual found after (sec) : 1.831672 + + finished changing the variable's weight after (sec) : 1.831734 + + first iteration: problem solved after (sec) : 1.837399 + + subgradients found after (sec) : 1.852032 +, lowerbound = 31.000000 + + new dual found after (sec) : 1.852074 + + finished changing the variable's weight after (sec) : 1.852090 + + first iteration: problem solved after (sec) : 1.858960 + + subgradients found after (sec) : 1.874654 +, lowerbound = 120.000000 + + new dual found after (sec) : 1.874708 + + finished changing the variable's weight after (sec) : 1.874723 + + first iteration: problem solved after (sec) : 1.881609 + + subgradients found after (sec) : 1.894558 +, lowerbound = 31.000000 + + new dual found after (sec) : 1.894651 + + finished changing the variable's weight after (sec) : 1.894701 + + first iteration: problem solved after (sec) : 1.914189 + + subgradients found after (sec) : 1.918536 +, lowerbound = 120.000000 + + new dual found after (sec) : 1.918665 + + finished changing the variable's weight after (sec) : 1.918728 + + first iteration: problem solved after (sec) : 1.932328 + + subgradients found after (sec) : 1.942495 +, lowerbound = 31.000000 + + new dual found after (sec) : 1.942625 + + finished changing the variable's weight after (sec) : 1.942659 + + first iteration: problem solved after (sec) : 1.954691 + + subgradients found after (sec) : 1.969142 +, lowerbound = 120.000000 + + new dual found after (sec) : 1.969201 + + finished changing the variable's weight after (sec) : 1.969223 + + first iteration: problem solved after (sec) : 1.975786 + + subgradients found after (sec) : 1.993815 +, lowerbound = 31.000000 + + new dual found after (sec) : 1.993863 + + finished changing the variable's weight after (sec) : 1.993878 + + first iteration: problem solved after (sec) : 2.008093 + + subgradients found after (sec) : 2.019121 +, lowerbound = 120.000000 + + new dual found after (sec) : 2.019164 + + finished changing the variable's weight after (sec) : 2.019180 + + first iteration: problem solved after (sec) : 2.030906 + + subgradients found after (sec) : 2.034102 +, lowerbound = 31.000000 + + new dual found after (sec) : 2.034144 + + finished changing the variable's weight after (sec) : 2.034160 + + first iteration: problem solved after (sec) : 2.045757 + + subgradients found after (sec) : 2.059330 +, lowerbound = 120.000000 + + new dual found after (sec) : 2.059665 + + finished changing the variable's weight after (sec) : 2.059770 + + first iteration: problem solved after (sec) : 2.067335 + + subgradients found after (sec) : 2.076437 +, lowerbound = 31.000000 + + new dual found after (sec) : 2.076619 + + finished changing the variable's weight after (sec) : 2.076666 + + first iteration: problem solved after (sec) : 2.084611 + + subgradients found after (sec) : 2.092310 +, lowerbound = 120.000000 + + new dual found after (sec) : 2.092434 + + finished changing the variable's weight after (sec) : 2.092461 + + first iteration: problem solved after (sec) : 2.106273 + + subgradients found after (sec) : 2.113490 +, lowerbound = 31.000000 + + new dual found after (sec) : 2.114016 + + finished changing the variable's weight after (sec) : 2.114102 + + first iteration: problem solved after (sec) : 2.137330 + + subgradients found after (sec) : 2.140904 +, lowerbound = 120.000000 + + new dual found after (sec) : 2.140941 + + finished changing the variable's weight after (sec) : 2.140958 + + first iteration: problem solved after (sec) : 2.155801 + + subgradients found after (sec) : 2.160276 +, lowerbound = 31.000000 + + new dual found after (sec) : 2.160327 + + finished changing the variable's weight after (sec) : 2.160345 + + first iteration: problem solved after (sec) : 2.173429 + + subgradients found after (sec) : 2.176844 +, lowerbound = 120.000000 + + new dual found after (sec) : 2.176889 + + finished changing the variable's weight after (sec) : 2.176905 + + first iteration: problem solved after (sec) : 2.189498 + + subgradients found after (sec) : 2.193006 +, lowerbound = 31.000000 + + new dual found after (sec) : 2.193080 + + finished changing the variable's weight after (sec) : 2.193122 + + first iteration: problem solved after (sec) : 2.206445 + + subgradients found after (sec) : 2.216242 +, lowerbound = 120.000000 + + new dual found after (sec) : 2.216291 + + finished changing the variable's weight after (sec) : 2.216308 + + first iteration: problem solved after (sec) : 2.227342 + + subgradients found after (sec) : 2.241271 +, lowerbound = 31.000000 + + new dual found after (sec) : 2.241314 + + finished changing the variable's weight after (sec) : 2.241332 + + first iteration: problem solved after (sec) : 2.246007 + + subgradients found after (sec) : 2.249583 +, lowerbound = 120.000000 + + new dual found after (sec) : 2.249640 + + finished changing the variable's weight after (sec) : 2.249656 + + first iteration: problem solved after (sec) : 2.265344 + + subgradients found after (sec) : 2.269057 +, lowerbound = 31.000000 + + new dual found after (sec) : 2.269077 + + finished changing the variable's weight after (sec) : 2.269093 + + first iteration: problem solved after (sec) : 2.297654 + + subgradients found after (sec) : 2.303096 +, lowerbound = 120.000000 + + new dual found after (sec) : 2.303371 + + finished changing the variable's weight after (sec) : 2.303458 + + first iteration: problem solved after (sec) : 2.318736 + + subgradients found after (sec) : 2.322329 +, lowerbound = 31.000000 + + new dual found after (sec) : 2.322373 + + finished changing the variable's weight after (sec) : 2.322388 + + first iteration: problem solved after (sec) : 2.340886 + + subgradients found after (sec) : 2.358288 +, lowerbound = 120.000000 + + new dual found after (sec) : 2.358459 + + finished changing the variable's weight after (sec) : 2.358501 + + first iteration: problem solved after (sec) : 2.365414 + + subgradients found after (sec) : 2.392701 +, lowerbound = 31.000000 + + new dual found after (sec) : 2.392796 + + finished changing the variable's weight after (sec) : 2.392824 + + first iteration: problem solved after (sec) : 2.397168 + + subgradients found after (sec) : 2.400464 +, lowerbound = 120.000000 + + new dual found after (sec) : 2.400518 + + finished changing the variable's weight after (sec) : 2.400535 + + first iteration: problem solved after (sec) : 2.416346 + + subgradients found after (sec) : 2.422995 +, lowerbound = 31.000000 + + new dual found after (sec) : 2.423040 + + finished changing the variable's weight after (sec) : 2.423055 + + first iteration: problem solved after (sec) : 2.440188 + + subgradients found after (sec) : 2.443503 +, lowerbound = 120.000000 + + new dual found after (sec) : 2.443540 + + finished changing the variable's weight after (sec) : 2.443556 + + first iteration: problem solved after (sec) : 2.458354 + + subgradients found after (sec) : 2.464748 +, lowerbound = 31.000000 + + new dual found after (sec) : 2.464921 diff --git a/var.txt b/var.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/varobjs.txt b/varobjs.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391