diff --git a/bin/LagrangianRelaxation.linux.x86_64.gnu.opt.spx2 b/bin/LagrangianRelaxation.linux.x86_64.gnu.opt.spx2 index 8d59f26c17f5b79eef8f33cf16528b0e4000d161..da8080aaa60f596fd376d0221fb6993eba14d8bc 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/data/1500iters.png b/data/1500iters.png new file mode 100644 index 0000000000000000000000000000000000000000..de76bc72b67a87abf4ecbcc461f3e17c07a17db4 Binary files /dev/null and b/data/1500iters.png differ diff --git a/dual.txt b/dual.txt index f824c8055e1ee3b4703c99bbdc9734a885554b0a..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 --- a/dual.txt +++ b/dual.txt @@ -1,351 +0,0 @@ -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 86.815897 objective value: -52440 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{15} 1 (obj:30) -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 = 60.000000, lowerbound=30.000000, norm of subgrad 70.915443 objective value: -72380 -t_x_{1}_{30} 1 (obj:60) -t_x_{2}_{30} 1 (obj:60) -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 = 120.000000, lowerbound=60.000000, norm of subgrad 61.473572 objective value: -84998 -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 55.108983 objective value: -101690 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{15} 1 (obj:30) -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 = 60.000000, lowerbound=30.000000, norm of subgrad 50.289164 objective value: -110880 -t_x_{1}_{30} 1 (obj:60) -t_x_{2}_{30} 1 (obj:60) -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 = 120.000000, lowerbound=60.000000, norm of subgrad 46.603188 objective value: -119066 -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 43.726422 objective value: -129901 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{15} 1 (obj:30) -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 = 60.000000, lowerbound=30.000000, norm of subgrad 41.178473 objective value: -136241 -t_x_{1}_{30} 1 (obj:60) -t_x_{2}_{30} 1 (obj:60) -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 = 120.000000, lowerbound=60.000000, norm of subgrad 39.102430 objective value: -142151 -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 37.425077 objective value: -150107 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{15} 1 (obj:30) -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 = 60.000000, lowerbound=30.000000, norm of subgrad 35.763109 objective value: -154911 -t_x_{1}_{30} 1 (obj:60) -t_x_{2}_{30} 1 (obj:60) -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 = 120.000000, lowerbound=60.000000, norm of subgrad 34.392530 objective value: -159531 -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 33.293071 objective value: -165805 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{15} 1 (obj:30) -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 = 60.000000, lowerbound=30.000000, norm of subgrad 32.078030 objective value: -169663 -t_x_{1}_{30} 1 (obj:60) -t_x_{2}_{30} 1 (obj:60) -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 = 120.000000, lowerbound=60.000000, norm of subgrad 31.088583 objective value: -173458 -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 30.320833 objective value: -178633 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{15} 1 (obj:30) -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 = 60.000000, lowerbound=30.000000, norm of subgrad 29.365513 objective value: -181872.960784314 -t_x_{1}_{0} 1 (obj:51.0196078431372) -t_x_{2}_{0} 1 (obj:49.0196078431372) -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 = 100.039216, lowerbound=1.000000, norm of subgrad 28.748455 objective value: -186587 -t_x_{1}_{30} 1 (obj:60) -t_x_{2}_{30} 1 (obj:60) -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 = 120.000000, lowerbound=60.000000, norm of subgrad 27.910571 objective value: -189604 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{15} 1 (obj:30) -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 = 60.000000, lowerbound=30.000000, norm of subgrad 27.263267 objective value: -192431 -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 26.810785 objective value: -196367 -t_x_{1}_{30} 1 (obj:60) -t_x_{2}_{30} 1 (obj:60) -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 = 120.000000, lowerbound=60.000000, norm of subgrad 26.099309 objective value: -199005.355731225 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{0} 1 (obj:29.6442687747036) -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 = 59.644269, lowerbound=15.000000, norm of subgrad 25.612497 objective value: -201505.355731225 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{0} 1 (obj:29.6442687747036) -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 = 59.644269, lowerbound=15.000000, norm of subgrad 25.119713 objective value: -204478.355731225 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{0} 1 (obj:29.6442687747036) -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 = 59.644269, lowerbound=15.000000, norm of subgrad 24.656096 objective value: -207362.355731225 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{0} 1 (obj:29.6442687747036) -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 = 59.644269, lowerbound=15.000000, norm of subgrad 24.218909 objective value: -210140.355731225 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{0} 1 (obj:29.6442687747036) -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 = 59.644269, lowerbound=15.000000, norm of subgrad 23.805762 objective value: -212819.355731225 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{0} 1 (obj:29.6442687747036) -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 = 59.644269, lowerbound=15.000000, norm of subgrad 23.414555 objective value: -215404.355731225 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{0} 1 (obj:29.6442687747036) -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 = 59.644269, lowerbound=15.000000, norm of subgrad 23.043437 objective value: -217904.355731225 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{0} 1 (obj:29.6442687747036) -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 = 59.644269, lowerbound=15.000000, norm of subgrad 22.690768 objective value: -220324.355731225 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{0} 1 (obj:29.6442687747036) -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 = 59.644269, lowerbound=15.000000, norm of subgrad 22.355089 objective value: -222668.355731225 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{0} 1 (obj:29.6442687747036) -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 = 59.644269, lowerbound=15.000000, norm of subgrad 22.035096 objective value: -224940.355731225 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{0} 1 (obj:29.6442687747036) -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 = 59.644269, lowerbound=15.000000, norm of subgrad 21.729622 objective value: -227146.355731225 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{0} 1 (obj:29.6442687747036) -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 = 59.644269, lowerbound=15.000000, norm of subgrad 21.437617 objective value: -229289.355731225 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{0} 1 (obj:29.6442687747036) -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 = 59.644269, lowerbound=15.000000, norm of subgrad 21.158135 objective value: -231373.355731225 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{0} 1 (obj:29.6442687747036) -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 = 59.644269, lowerbound=15.000000, norm of subgrad 20.890318 objective value: -233399.355731225 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{0} 1 (obj:29.6442687747036) -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 = 59.644269, lowerbound=15.000000, norm of subgrad 20.633391 objective value: -235374.355731225 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{0} 1 (obj:29.6442687747036) -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 = 59.644269, lowerbound=15.000000, norm of subgrad 20.386647 objective value: -237296.355731225 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{0} 1 (obj:29.6442687747036) -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 = 59.644269, lowerbound=15.000000, norm of subgrad 20.149442 objective value: -239171.355731225 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{0} 1 (obj:29.6442687747036) -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 = 59.644269, lowerbound=15.000000, norm of subgrad 19.921186 objective value: -241000.355731225 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{0} 1 (obj:29.6442687747036) -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 = 59.644269, lowerbound=15.000000, norm of subgrad 19.701342 objective value: -242786.355731225 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{0} 1 (obj:29.6442687747036) -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 = 59.644269, lowerbound=15.000000, norm of subgrad 19.489413 objective value: -244530.355731225 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{0} 1 (obj:29.6442687747036) -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 = 59.644269, lowerbound=15.000000, norm of subgrad 19.284945 objective value: -246235.355731225 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{0} 1 (obj:29.6442687747036) -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 = 59.644269, lowerbound=15.000000, norm of subgrad 19.087518 objective value: -247901.355731225 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{0} 1 (obj:29.6442687747036) -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 = 59.644269, lowerbound=15.000000, norm of subgrad 18.896745 objective value: -249532.355731225 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{0} 1 (obj:29.6442687747036) -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 = 59.644269, lowerbound=15.000000, norm of subgrad 18.712267 objective value: -251128.355731225 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{0} 1 (obj:29.6442687747036) -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 = 59.644269, lowerbound=15.000000, norm of subgrad 18.533753 objective value: -252690.355731225 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{0} 1 (obj:29.6442687747036) -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 = 59.644269, lowerbound=15.000000, norm of subgrad 18.360895 objective value: -254221.355731225 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{0} 1 (obj:29.6442687747036) -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 = 59.644269, lowerbound=15.000000, norm of subgrad 18.193405 objective value: -255721.355731225 -t_x_{1}_{15} 1 (obj:30) -t_x_{2}_{0} 1 (obj:29.6442687747036) -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 = 59.644269, lowerbound=15.000000, norm of subgrad 18.031019 \ No newline at end of file diff --git a/first.ipynb b/first.ipynb index ad6adc5dbf62fd4d43a87ffb76c42039bfc4a6d0..28d54ea7745f1796d86353d2481c8273c6c5fc58 100644 --- a/first.ipynb +++ b/first.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 55, + "execution_count": 28, "metadata": {}, "outputs": [], "source": [ @@ -20,17 +20,26 @@ }, { "cell_type": "code", - "execution_count": 69, + "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "150\n", - "\n", - "[6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 48.0, 48.0, 6.0, 48.0, 48.0, 48.0, 6.0, 76.0, 48.0, 6.0, 76.0, 34.0, 76.0, 6.0, 76.0, 6.0, 76.0, 34.0, 34.0, 62.0, 6.0, 76.0, 34.0, 62.0, 6.0, 76.0, 34.0, 62.0, 6.0, 76.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0, 91.0, 64.0]\n", - "91.0\n" + "11\n", + "\n" + ] + }, + { + "ename": "ValueError", + "evalue": "could not convert string to float: ", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m<ipython-input-30-82752eb5f629>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmaxiter\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0mg\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m=\u001b[0m \u001b[0mfile\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreadline\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0mg\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfloat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mg\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 11\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mg\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m>\u001b[0m\u001b[0mmax\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0mmax\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mg\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mValueError\u001b[0m: could not convert string to float: " ] } ], @@ -55,7 +64,7 @@ }, { "cell_type": "code", - "execution_count": 70, + "execution_count": null, "metadata": { "scrolled": true }, @@ -84,7 +93,7 @@ }, { "cell_type": "code", - "execution_count": 71, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -93,7 +102,7 @@ "(125, 1)" ] }, - "execution_count": 71, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -106,7 +115,7 @@ }, { "cell_type": "code", - "execution_count": 74, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -115,13 +124,13 @@ "Text(0.5, 1.0, '6flights, four sectors, opt using lagrangian r.')" ] }, - "execution_count": 74, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX4AAAEWCAYAAABhffzLAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAACShklEQVR4nO1dd3gVRfd+JySBhN577026BQUFVFDArqCiAmL3A0UECxYsKHbxs2EXUeFDVGwoiCCIjSpdkN57SyAhZH5/vPf8Znbv3gISSGDe57nPvXd2dndmyztnzjlzjtJaw8HBwcHh5EHC8W6Ag4ODg8OxhSN+BwcHh5MMjvgdHBwcTjI44ndwcHA4yeCI38HBweEkgyN+BwcHh5MMjviPIpRStymlNiul9imlSiqltFKqVmjbG0qph+I8zvtKqSdytrX/fy5Pm4/FOR1yDkqpB5RSb+fQsf//ec5LUEp9p5S64Xi3IzdBOT/+w4NSqjuARwBUAbAJQE+t9TSlVBKAPQBO11rPC9XVAGprrZcf5jneB7BOaz04wvYjOm7AccLanNdwtK7FsYRSqhqAlQCStNZZx7k5cSMvXmuHYCQe7wbkJSilzgMwDEA3AH8AKG9tLgugAICFx6FpR4oca7NSKjG3k1peaOPJgBPlPuSpfmit3SfOD4AZAG4MKK8DIA2ABrAPwORQuQZQK/T7fQBPWPsMBLARwAYAfQLqvgrgGwB7AfwOoGZo28+hummhc3UDUArA1wB2AdgBYBqAhBh9idTm1gD+BLA79N3a2mcVgHOt/48C+Cj0u1roWDcCWAPg54BzRmwngAoAPgOwFZSG+1r75QPwAIB/QtdjFoDKQdciVP8mAMtD5xgPoIJ1LA3gDgDLQudRAF4EsAWc/cwH0CjO5yHatZoC4ClQQNgD4EsAJULb1ljXfR+AMwKO7X9ezgFngfJ/EID1oeuxFECHKPfkhtA5twF40DpGCoAPAOwEsBh8JtdF6a/9jHYGMCfUt7UAHvXVvR7AagDbATxkPzuhNo4F8FFo/z4ATgXwa+jZ2AjgvwCSfee+NXTfdoHvh2gs8gF4PtS/lQDuDNVPtO5Fn9DvmgAmh9q1DcAoAMV8z/gAAH+F7utoAAUiXI+eAH4JPT/b7fuV2z/HvQF55RN6uDIB3AeSyrrQw5kS2i4vWaK1TyDxA+gEqokaAkgNvQD+uttDL0Ni6OH8NOi4of9PAXgDQFLo00Zeihh98rQZQAmQBK4Lnffq0P+Soe3///KG/j+KcJL5EEBBuS6+8wW2E7Q1zQLwMIBkADUArADQMbTfvSAh1w3Vb2K1yX8t2ode6OYA8gN4BdYgFKo/MdTXFAAdQ+cuFjp2fQDl47h2sa7VFJCYG4Wux2cB1yoxyvH//3kJ/T8HIVIOXYe1CA1ooePVjHJP3gr1tQmADAD1Q9ufBjAVQHEAlUCyi5f4zwHQOHTvTgGwGcAloW0NwAHtrND9fA7AQXiJ/yCAS0L7pwBoAeD00LWsBg5Ed/nO/XXoPlUBBYROoW23AlgU6kNxAJMQmfhrATgPfDZKg8LDS9Z5VoGDdYXQPV4M4NYI16MngCwA/wm1O+yZz60fZ9yNH2VBsroCJKymAJoBCNTDx8BVAN7TWi/UWqeDL4Ifn2ut/9CcOo4KnS8SDoJqp6pa64Na62k69GQeJjoDWKa1Hqm1ztJafwJgCYCuh3GMR7XWaVrr/YfRzlYASmutH9NaZ2qtV4Bk1T20Xx8Ag7XWSzUxT2u9PcL5rwXwrtZ6ttY6A8D9AM4I6dUFT2mtd4TaeBBAYQD1wMFysdZ6Yxz9jOdajdRaL9Bap4FS71VKqXxxHDsWDoHE1UAplaS1XqW1/idK/SFa6/2adpx54AAA8DkcqrXeqbVeB2B4vA3QWk/RWs/XWmdrrf8C8AmAs0ObrwDwldZ6utY6ExzQ/c/jr1rrL0L779daz9Ja/xa6lqsAvGkdT/C01nqX1noNgJ9g3omrALystV6ntd4JDmiR2r1caz1Ra52htd4K4IWA8wzXWm/QWu8A8BWiv3sbtNavhNod9MznSjjijx9yU1/RWm/UWm8DH5oLj+BYFUCJTbA2oM4m63c6gEJRjvcsOAv5QSm1Qil13xG0Sdq12le2GkDFwzhGUF8EkdpZFUAFpdQu+YCqnbKh7ZVBNU888PRBa70PnD3ZfVhrbZ8MztxeBbBFKTVCKVXkcM8Tgv9arfVtSwLVXf8KmsbVu0CBYYtS6lOlVIUou0R6luJ5DgOhlDpNKfWTUmqrUmo3KHVL3zzHDQk3/oHacy6lVB2l1NdKqU1KqT0AhiL8Wv3rfiilyoau1/rQeT46jPMEIe5rlpvgiD9OhCSJdfBKLkciVQPUYVay/lc+0nYBgNZ6r9b6Hq11DQAXAeivlOpwBIfaAJKwjSqgygKgLj3V2lYuqDlH0M61AFZqrYtZn8JaaxlU14K62cPug1KqIICSVh/C2qi1Hq61bgGqKOqAqqXDOk8I9rUCvPe1Cji72OY/fwREvdZa64+11meF2qBBp4PDxb95Dj8G7SeVtdZFQRWeCjquUioFvAc2/NfgdXDGVFtrXQQc+BXiw+H0Y2jo3I1D5+lxGOcJwpFywHGFI/7Dw3sA/qOUKqOUKg7gblDveLgYA6CXUqq+UioVVAMcDjaDenAAgFKqi1KqllJKgQapQwCyQ9veD7mHxoNvAdRRSl2jlEpUSnUDyVD6OBdAd6VUklKqJTiljxtR2vkHgL1KqUFKqRSlVD6lVCOlVKvQrm8DeFwpVVsRp1hrDjzXAlQ59FJKNVVK5Qdf9N9D6oOgNrUKSa9JINkegLl2PZVSgfvFca0AoIdSqkHoHj8GYKzW+hCon872tduPuQAuVEqVUEqVAyV8aXNdpVT7UP8OgLPR7CjHioQxAO5XShVXSlUEjaLxojCAHVrrA0qpUwFcY20bC6CrUqq1UioZnJnEItfCoKF3n1KqHoDbDqMtYwD0U0pVVEoVAw3f0c6zD8DuUJ/jGeRPODjiPzw8Dnpv/A0afeYAePJwD6K1/g7Up/4Eqj5+C23KiPMQjwL4IKQWuQpAbdCgtQ/0jHhNa/1TqG5l0PMgnnZtB9AFwD3g1HwggC4htRbAAaomaMQcAkp9h4PAdobIsAuoS10JSsVvAyga2u8F8OX+ASSHd0CDIOC7FlrrSaF2fgZKgjVhbAVBKALaE3bCeKE8G9oW8drFca0AYCRopN0Eus32De2bDj43v4TafXrAKUaC+vhVoX6PtrblB/XY20LHLgPaMg4Xj4Gz2JXgfRmL+J/B2wE8ppTaC+rwx8gGrfVC0OD5KXgP9oFeU9GOPQAcPPaC92N0lLp+vAVeo7/Ad/Jb0Oh6KKDuENDwvxv0mht3GOeJCqXUtUqpPOHO7RZw5QIopeoDWAAgvz6KfsAhaWsegFO01geP1nFPFiilfgDQT2u9+Aj2nQJ61+TIKtqcgFLqNgDdtdZ+Y+e/PW4h0AWzttZ65dE8doTzXQDgDa21XxXnEIKT+I8TlFKXKqXyh1RGw0AviKO6+CPkIVPfkf6RQWt9/pGQfl6BUqq8UupMpVSCUqouOHv5/Cgdu6tSKjVkY3kOdMdddTSOHXCuFKXUhSGVW0VwZf1R6ceJCkf8xw+3gNPff8Ap6eHoNB0cjgaSQbfJveCipi8BvHaUjn0xaADfAKr4uh+hi3E8UKAKZyeo6lkMqp8cIsCpehwcHBxOMjiJ38HBweEkQ54I0laqVCldrVq1490MBwcHhzyFWbNmbdNal/aX5wnir1atGmbOnHm8m+Hg4OCQp6CU8q8uB+BUPQ4ODg4nHRzxOzg4OJxkcMTv4ODgcJLBEb+Dg4PDSQZH/A4ODg4nGRzxOzg4OJxkcMTv4ODgcJIhT/jx/xucc0542VVXAbffDqSnAxcG5M/q2ZOfbduAKwIizt92G9CtG7B2LXDddeHb77kH6NoVWLoUuOWW8O2DBwPnngvMnQvcdVf49qFDgdatgRkzgAceCN/+0ktA06bApEnAE0+Eb3/zTaBuXeCrr4Dnnw/fPnIkULkyMHo08Prr4dvHjgVKlQLef58fP779FkhNBV57DRgzJnz7lCn8fu454GtftoKUFOC77/j78ceBH3/0bi9ZEvjsM/6+/37g11+92ytVAj76iL/vuovX0EadOsCIEfx9883A3397tzdtyusHAD16AOvWebefcQbw1FP8ffnlwHZf3qgOHYCHQtkTLrgA2O9LttelCzBgAH+7Zy98u3v2+DveZ0/6c7ThJH4HBweHkwx5Ikhby5YttVu5mwexfTtQpAiQlBS93qZNQNmygFLesnJBmR0tHDoE7NgBlLZWpGdmAnv3UnwTHDjAT7FipiwtDcjOBgoXjn6OXbuAAgX4yYl+aQ1s3uwtC+pXEI5Fv7ZuBUqUAPJZOeKD+uXHsejXnj1sV8GC0fsVhJzuV7zPYRCC+nWEUErN0lq39Jef+Kqe988JK7uq4VW4vdXtSD+YjgtHhc+3ezbtiZ5Ne2Jb+jZcMSZ8vn1by9vQrVE3rN29Ftd9Hj7fvueMe9C1blcs3bYUt3wdPt8e3HYwzq1xLuZumou7JtwVtn1oh6FoXbk1ZqydgQd+DJ9vv9TpJTQt1xSTVkzCEz+Hz7ff7PIm6paqi6+WfoXnfw2fb4+8dCQqF62M0QtG4/WZ4fPtsVeNRanUUnh/7vt4f+77Ydu/vfZbpCal4rU/X8OYheHz7Sk9pwAAnruoFL4+szTQoMH/b0tJTMF313wDJCTg8amP48cF44GZM4HatYEKFVAytSQ+K9wHuPBC3D/iKvyatNlz7EpFKuGjyzjfvuvhUzF3w2zgzDOBRD7KdeasxojhqwCtcfNXN+Pv7X8Dy5cBu3YDLVuiabmmeKnTS0ClSujRfhfWdfXmHDmj0ul46tynAQCXj7kc278bBxQuBDRvAQDoUL0DHjrnYeDKK3HBxXux/6BX19OlThcMaD0AWLAA5zzf+P/7BQDYsQNXfToftz8+Aent2/DZ274dWLCA8/zkZD57oxZi22vP4YqXTb8EnmdvcANg3z7gbNOHe4bPRNc5aVi6dUn0Z69+cdx1pekXAGDqVAzNbofWH0zms/fDIGD6dKBePRIigJdq3Ymmba7EpJf64omi88KO///P3ku34/m/3gBataJuBgBW/IORL69D5VU7MHr9D5GfvbPOx/t6Dt7vZ92bX6YDWYfw7Yg08+yNHAQUSPE8X1N6TQVatsRzL3fD1397dT0pSSn47trvgB078PgVZfDj2ZWBGqHsl2lpKPnzTHzW7nXg1ltx/6T78es6r66nUpFK+GhTa+COO3DXqB6YmxnKs75iBbB2Lep0vh4jrvgAAHDz0DPw99q5QJs2/79/08mL8NLIrYDW6DGuB9bt8ep6zqh0Bp469ymgaFFc3iMJ2zu0/v936WjDqXoccgYHQ7lftm41ZdnZwPcTgGeeMWUZoWx8mVZWPlGubthgyvbsAVauoCQlWL6M31lW/hqRpg5ZWfcyD/LcNnbtCm/zvHnAJ5+Gl6db5J4dOu7//mfKsrL48u/da8qWLuX3zp2mTEjc7oNcJ3vmPXasOa5gzRrg56nm/ABJ34+0tPCyNWuALVvCy/f69lfKK43K+e1rt2oVv2fNso6zF5g2jVKvYHWo3kErB5A8C/Y12boVWOVLyjVnTnhbixUPl+Lte2zDrx347TfeH4G00zbQpKfze+JEU5aWxmcsw3o2J0wI9WGXKUsJZQG171dGBpDgmznY74Jg6VJg9uzw8swczp2ktc71nxYtWmiHPIZdu7QmnZmyTZv4/9JLTdnUqSybNMmUzZnDsk8+MWWXXMKyzz83ZR06sGzrVlP23HMs27PHlHXtqvUpp3jb529bpLL8+bUeNMj8z87WunBhra+7zpQtWcL9atUyZV99xbJHHzVlf/3FsrFjTdnw4SzbssWUVavGsqVLTVmLFuH96tJF62bNvO3t3l3rMmXi62vRot6ysmW1vvnm8H599JEpGzs2/B6+9x7LXnstvF/2vfnww/B+Sdt2747e3uuu43WxUaWK1jfcEL2v+/bxf/364f0aNcqUbd7MsuHDTdmQISx7/HFTduONLPv1V1M2ciTLli0zZX36aF2hQvS2RSoL6tcRAsBMHcCpJ7yqx+E4oUgRoF8/4JRTTNnGjfz+6y9TJpJWcrIpEz2uLS36JXYAaNIE+P13uoEIxC0jPd0c56uvzDESQpPct98G5s+P3odDhyi52W1TiuezJXS/aw9g9OQdO5oy6ff69aZMXEt++QW45BL+Hj0a+O9/gUKFTD2RsO1+padTCtba6KWLFkVMiKTcv78p27mTuuvJk02Z3JtHHgGuvZa/L7yQLik9eph6//zDb1uilX1FGgaMzjroeqWn85kB6HbkrzNyZPg+a9YAH3zgdf955BHvddu9m9+LrQya0jZRQdm/DxwwZUEznnr1+G0/1+PH89uebb0dSrW8efP/q8kwZgxdjez7FYT0dG/bcgBO1eOQM1CKvmu9e5syeTHsh17UFS+/bMoWLeK36MZt2C/hsGHA6tXeKb+oieTltmG/1DfeaHzrIkHI5/HHTdmWLcDKlTQMCoLOdf75LG/e3JSJ+sdWM0l/7H6deirw4YfB/bfJZfJk9tcmycmTvQbLIOTLR1K77z5TJn6ry5ebsqB+paSQhO0BLQh//snv7783ZXJvhOBt2Of64Qf6MR6J48mjjxp/Wv9xBfIcDBxoyuSZK17clMn57XYMGMDnzR7Q/vgj8rnssiuv5EAVjfQB+vIG+boeRTjid8gZrF9PZ2dbFxz0Ylx2Gb/tRDviAH3qqeH1bfKeMYNeE7azsxBykMRkn//BB4FPPzUvddCMolAhoFMnoGFDU7Y5ZGxu29aUBenVlWLbxOkfMDp+ezAQErD79f77HGyCdNh2H4YPDy/bs4eO/IJI5HnllcBpp4Uft0MHU2a3STBjBnDHHcH6avtcQ4eGH2PzZqB6dX78sPvw5ptA/vwkwEgI6teuXcBNN9HeEHRcwRlnAFWq8Fsgz1zQ4gsby5fzufjUsgWJN48tDAjsZ+Ohh4A33gg+rt2fPn2A8uWjt+NfwhG/Q85g7VpK8S0tTzJ5CUWlAVD1UqKE14Am9WzJVQjSfpE//ji8rH59oH17M70GzKoau97QocDVVxtDqxCUz4sGRYt6VU7yIidYr06Q6mLqVJZv2hS+rVMn8/uVV8LbNmQI8PDDXK0kEPWOrcoR1Ym9b3o6VVNCJEHkvWUL8Pnn3hVIcox77jFlHTpwVVLTpqZs/nyunrr11vDj2gO1DLz+tqWkBA+ydr1HHmEdu6xwYe+KM6WAvn297p07d1LFYg/KcozzzvOer2DBYOOuLcmLis8m5dGjuZ9N6FWr0rOobl1TJqvH7D488QRX4K0OyI1iX5PU1OAB6yjCEb9DziDatLdPH1P244/0srA9QuSlevJJUzZyJMnGlr7Fw8I+l+xrk7WtEwe8L7KUyfcLL5ht69fzRbeXYEo9makAwEUX8aW2VSfiqWF73qSnc8CwX/Ig8pb22WV163JZcOXKpuzRR8P7tXcv7QOiTkpJod3DJs0gaV2O4V+bUKiQd/CIREgFCnApsyBoUJ41iyoV2yNq0SLeV9vfXTyQ7H6lp3MWYN+71NTYbcvM5H4PPmjKZsygzl88lOx9+/Y1ZQ89xBlEC8vlNUitIzp5f9sitckuK1aM5xEhZ88ezuTENpFDcMZdh5xB0APfvTvJyya+337jd9AL7Jf4Iuk97XoixU6caGIivPMOUKuWkZbtQSE9nXrdUqVYvm+fMb7Z7qTR+gV4iSVSvcxM9n3gQGNfGDWK37axMOgYf/zBa5SVZWYla9d66wX1C+AgZQ9UQW2TGdd55xkCmzqVA5iobSLt+/jjnKUcPGgGjl9+Ca8fNKDVrx/7vh48SLXXsGHAf/4DVKxINdBbbwGNGxujfVDb2rbldbPVZmLotd1KI91XmS36YUv869ZxJvT++0CvXiwTNVyZMpH7JW0Q3x6lvIRvX8+jDCfxO+QMgl4kpahbtg2DUu/yy02ZDAL2Mf77X+Cxx2JLUOI5Y5f9/DMD34je1H5p/Trz4sWNP75sa93a1LFVUoKJEykZBnm12GT8wgtUQdnnnDiROv8g3bJdb+FCSpFffBFeT6TlINXF+vU0ZE+bZgbcoGt4wQUM/lO1qimTa3nzzdH7BTCQzR13mP9CtM2ambIgKfiuu4B33/X6wPvPlZxsguRI2fbt/AwYYNRukci7d2+gZs3w43brZsrk2tjtePNNqr7sMumXfS7xzPLPbnr18iwuCzs/QFtBvnzAsmXebcWLB6vEjhIc8TvkDIJ0y99+Sy8PW6oR98RrrjFlI0aQgGyCHjeOut+HHzZlMj22ddB+1UlWFiXtgwcNaQcR5KpVRr8dTf1z+eVUTdjL82fNom7ZHiCC7BkAVSd+NUFCgrdN+fN7jwEAgwaF9wvgYChkXbQodfd2vc2bSaxt24arUM4806ueKFgwWG1mQ8jIbu+rr9JV1953/37grLO8g7x4+tj1Xn6ZA5OohmySte00MmhIm+Q7Kcm0Kcj9d8oU4L33zOzIPv/gwaZs8GDeP7ttU6fy3vfs6e0XwBXJ/rb572uBAmagsGcc9uDVs6dRZdnb3n/fPAc5AEf8DjmD66+ndGqHcBS1TpAh19bxA3T5879IgJeMEhMppZ55pikT8pZ68qI+/7wxllaoQN3yoEFGWrZDJfpfwoyMcL180OBh1zl0iOex3Vlffpk+735ynTnT61O/eDFw991e3bK0XfaV82vtXQnsJ6Gga3jwIEnptdeM0XziRHqcBM1abKPtU0/RIG2rjmS1q/9cSUleAUAMp9FmbQcO8N6/8AINywAHFQk16u/XlVcaXf2559Luc9ddhmjFTdO+N5FmBn6jatA1TE6mTeeii0zZvffy2342t2+nCuutt/g/Xz4adW+/naoqgGoeeRf8z3f+/Dkq8Tsdv0PO4eKL+RH4SQsgCe3dS08c0c8/9xxfADsucdBLuHQpX549e0gW2dlGFRJU334x69cHnn46/Ph2PSHUs8+mtFy6NL01Ro8G7rwzer+GD2doil27TBiEb74Jb0dQOxMSvLOMINISQn3kEaoxrr2WBPjYY9TTi7QcRGQXXURbhgQ+S0hguAqB6JuD2gZ4+x6pD4mJwE8/kbA/YPwa3H472yVupEH9KlSI1ywjg9c/OZnXXgakWPe1Y8dgVaLdL1ENVa9uFhUOH851BvaajaBzffedWdgnErm9aDBSvwC6kL76avA2/76dOlHV1rgxcgJO4nfIGXzxBaexGzaE65btB/7dd6lrtcs+/5wvpa3+iURCtWqZwPFChklJhlyCjMZ//822TZtmyDroJbz6arYPMOQyaxZnB/ZMJmg2AlDHa0vLQbrlIP10nz5UT4itwe6DnKN0aTNLkX03bqRRtX9/E3wsqF8AF4gVLRpuIB440EjLQS60zz/PmdKePeHHtetNm0b9tl02ahQHKHFnjeSRs2EDZwcyYMi2hg1pSwCCVSfff08Hgg0bgnXxIl0/8ghXlfvVOtWrc6YlkGvtf+ZOOcW7ctlvC8rIMD79sm3TJs5OpkwxKqkgAaBtWyMgRJqZHAU44nfIGfz6K1/cihWNa6E8yPff763r1y2np/PFlcVSNqSe1iTvHTuCdfJnncXfVasaNZJsX7uWbWvbFvjyS++2bt28IXeDVCdKcSrvX2Bl92HYMBru/P266CKv+mfuXK51sPv13nus06+f97iFC3vtCH69t63KkQHNbqPU+/pr44dv96tAAbZbvIaefZaDqt2HSZM4k7Hdau2B0oatOhE9tlLGxfXAAaNqk3qrVxvPGP99ff11EzLhggvMwj3ZvmgRZ2MVKxoXXOnzvffGtmfkz+91vw1yte3dm+fx92vwYGPPSUnh85GcbOpt28bge+3aUcVmH7d5c69RPZor6FGCI36HnEGQpKk10KiR19/9yScpVfvrT5ni9XRZvpz6UpkFZGaGS4S2ysV21YtH7y3L8J991ryE48YZTxV7X62pshB3z9deo2fH4MFmduPXydv7+v3oU1O96iX/DCkjg+qiV14xK2v//pueREH9uugiYyy9/HKS6YMPmjUA8+YZNZY9aCQlcZC0DaypqfwvUmrQNSxQgIPwbbeZshtuoO1Cji92kuefN+s4SpQgIQ4ebMIXb9kSbjOw1SD2LMF/X4Mk6ORkqsKeecbYGJ55hi6q/n7NmkV1jOCHH/hsSpwigM+EfXzpV7584TM+e+CLNPMqV47uxk2a8P+ECSa1Wg4Sv9PxO+QMgnSwH3zA8jVrKJXlyxeuk7d/+x98e+FXUP2MDErFAweSGN96i26QTz9NaVTIJWjf667joLJ1K9tbsCCJS2LYxHqB27fnJ1ofkpMZMK5lS7N689praZ+49NLIx69YkQPZrl3GZrBhQ7huOVLbqlQJVk3Zv5OSTOKQJUu4YOzJJ0l+Dz1kBiO/Vw3ABVH79/NaiQTvX8AVSScPePXq9jb7t1IUBF55hTaG8eM5SN95pwn3EdSvxx/nQrddu2g/SEykWseuV7Ro5GdOZh/+49rPXMWKXMcwezbbtWYNF4KdeqoRXoLa1qED76MkaClQgHYrvwovB+AkfoecQSQSGjmSErW4FqalUV89ZIiZisuiFdkvK4sEOWqUiWwZdPzatal7rlnTqzr46CN6egQRv00ua9bQ11/i4Uu9xx4z0rId0kG2S4iFDRuMtGwTg6hb/vqLUrGtkvn4Y9ojRP0TifgAuhD6ZyCdO3tnRhKzXrZ/9hnVVxs2BJO21Hv++XBX0EmTeE8eeyzcxdTuF0B/elHDHDzI61CnjiHOzEyjQpNjLFvGGcnPPxsX36D72rWrUcFI2xcuZJKYZ581aqdI9/Wrr+gXv2CBqZcvH9VY4hIsi/vsfl19NX35ZfZ48GD4zKdoURL1mWeasq1bqUK84w6j/on0Puzfz5mBP+7SnXfSfpVDcMTvkDOwY9nIwzx4MF8kuyw9nStsBw0yxsQVK+iWadf5+GMa1Pzk3amTV2cOBE+x9+41KhatTehe2f7JJ0ZVYe9bvjwlXgks9uabJuKk1PvuO0qWFSsa18K0NA5ATz4ZOQ6L6OGzsozaKDPTrBGQegsXMkv7qlXhao2nn6YbI0CC9+v7585lOOCKFcNVY488YozA0jZ//xMTaWsRwrMja0r7r7ySROe/5rfcYq5puXI0Pp93ntm+aRNVJ2efbXzlZVu3bqZfQPiAZn9Ln+04O/ag/Mgj3muWns5jP/mkeQ5+/JGDiL3vF1/QFiIGZSlv0SK+Zw4wRvCEBCM8SDu+/JL31d8fpTgQ2IvfjjIc8TvkDEaNorT9zDNGbzp+vMmuZL+EWpPs7QU4YnyzF7dIfYAEWbw4XQRF7z97NqU0ezGRfJ97rvHx792bA8FTTxmd+cyZ4YSenk5Jd906rxdLPLrlQoWoa3/gAbPI6PLLeQ7pl+w3ZIiJ2FmjBmdDH39sVsyuW8f4NllZwcRnR7FMSCABRlP/pKRQ3fToo8ZXfvBg495q7/vTTyRtCXPw22803D/2mIk7NHYsZ2L++6V1eJC6WHrvfPm4/uHpp03Ijf/9j9fODssg3yVLmpAPTz3Fazd4sOnXtGnhq7nT03lPtm6NvAbCtidIvzIzOVv9z3+M98/y5Zx1zZ8fPuhefLFxSe7UiTPKp54y7qZLl4a7+Kan8/7s3etUPQ55FFWq0JtCJJ30dJM0RR7q1FSqFGrWJHns308pSAyBdpTGkiXN74YNaYg880wjZa9ebUIt+0m5RInwF+m++0wkx/T0cA+TAgUofVWubMLw3ncfPUeeesqEAUhPD3ffW7CAEuXq1SSM9HRKtyLZHzhg6ga17eqrw71b7P7ny8c4MBdeaDx0Ro0i0Tz6qCGXoLa9/DIT2GzcaAa0yZONL79NkP59AeD00zkLSk01Ur9cuwMHOIBXqsT7JwS8cCEHwoYNwz2K7H5deimfg2LFjH1l4UJK335dvMQisttWujRnX40amW3++1q6NAeyMmVMML1LLuF5Hn6Y9z2oX6VL81m76iqjqtyyhYZ8ucf2eSI9c357TvHi5nfhwiau1HPPIafgiN8hZzBgAB/c5cuNO2daWjjxr1plApalp1OX+7//Ucrs39/rLVG6tJG+BAMHmpW7Uu/uu42KISGBL6/sC3A5/PXXk2BkAU96Ol+6/PlNvbffNsQgZRMmUHK77z6vr7xfPQNQt1ytGnXZtk7+mWc4oGRlUbqtUMH0a84cEsMffxgDsOxbqpT53aOHiW8vZfPmUYIcONCoSdLTqZ6xXQsBEn6FCmadQno6SfqJJ0x44ZIljYpL2telC9cArFtHfbhcc/u+VqlCl9levcx+GzfyenTqFK5SK1Uq3J5x/vle75YCBTh7kllA4cJsr92vBx6goLFlixnQgoSNyZPpSWP3a/x4EvWQId4BRva12/fkk7x2toBx3XXG/pKUxGejXDmzfcwYuqBu2eJ1Ly5QgH2Reo8+yvvov19HGY74HXIG48dTh1m7ttf75JRTgBdf9AbNsqfY8oJlZ3MqnJlJY1uZMnyRDh2iRPnbb5Rut24Nl7R69jTqn1tuoSrEfglnzqSUdu65JlxxWhrbMWyYN7yw35db1D8rVxqjX/HiXs+SAwc4zZ80yZTJ/u3akZwKFCDBrl/PRUfSr7VrKd32729iEMk1ueMOqhls2P7o6ensw+bNRsVSuDCJ2FaxDBjAfvr7Va0a3T7FSPvHH0aNkp5Oov/mG8ZSqlyZKhRblTZ0qDe+TMGCpl9SLzubAydAgqxShfdWto8cycGlQIHwfg0YwIET4OD522/efk2fTjVU2bLePAfVq5PQ7bUH9n3NyCCJJyVxgMrIYJtr1TKuvenp9N/v2JGzBX+/rrvOPEtdujA0R6NGZvvff1NouOwyr8RfsCAFFTsEBJDjMflz1J1TKXU3gD4ANID5AHoBKA/gUwAlAcwCcJ3WOjPiQRzyJoIkrWLF+DLIC7J7N0laJEybIH/8kS5xS5aQADdvZpAvifezciUHlEsuCSf+tDS+aKJmAPgiiS5ciMR+uQoVogFUFk0B/F2+PA2c9jkyMynRDR9OIl60iJLchx+SNNPSOPDZHh32S7x8OVUhYrC0SchWR8jv5GS27brrTPiHd9+lUdnfr4IFOXBVrEgJ+7//5bbhwxmmAjB6e3s2JdLnmjUcLESNYg/Kfik4PZ0EWL06jbYSnmPOHErftlFU9n3xRbY7I4Mqk6uuooAgM69Fi+hCeu653jAN0s+srPAFdvZ9L1+e/ZKy8uUZ9sAO7nf++camYrdt9mxK8lOm0OC8bBml7zZt+Hz88w/bJv3039d160yfg9qWnMzZl/SreHHeEztXwsCBxtMnLxK/UqoigL4AGmit9yulxgDoDuBCAC9qrT9VSr0B4EYAOZtg0uHYwyZ+IZfVq/niin41PZ3Srfjni9QNhA8aAN0ZJSqiTUKZmTxucjJJ4dln6Zq4bRsDj82YQcnfL0HaL5ck7F6zxuj1f/iBpOE3SAa1rUwZk+tVwiDY9bKzKd3OnEnj8uzZJL8nnuDg98IL3um93a+ePc0q5WXLOIuaN48Lnc49N7xf/lWpgDfBiAwQdr1y5ajaqVqVhtX+/Sm5XnEFZweNGwerdWrWpGH+wAGq7WRh24QJjLop9YL6Ja6x/nhO/ntTvDgH8Usv5TX68UdKyfnzcxW4rY4qWNC779SplObXr2d5oUK8brYkHzSgCZo0MYur7EEZ4PWQmdtbb9Hj6+BBeoh98AFdMmXWFtQvWb+wcyevSdmyFG6ys3Oc+HNa1ZMIIEUplQggFcBGAO0BhByl8QGAS3K4DQ7HA+npwYbBHTsYw8UOZ9CwIafm9evzJa1Y0Rs7/+efKT0vXkyjqW0YtV/W22+n5Ggby2bNIlFcfLEJKWC/hH7d8kUXGXWK1Bs2zEjvZct6SWPvXuqdv/ySs4xt24Lb1qgRBz6Z5qelcYD45hv2++67vS+77GsHfnv6aS8JpaZyQJDokMWLcyZiH+eOO6g33rDBuzDIT0IzZ3LAVIptS0/nwLdvH6XQ+vXDic++r9OmkYBnzTLlHTrwmAULkiBr1jSJSfbvpw2lc2fO/P75xxzTPyg9/zzvod3eX36hqunOO436J6hfgkqVONuQ8ipVqKtv1oyzlvr1veq6OXO4IO/PPykMRBogLrmEs9LatU2/li7lrOHii71hNyK1rXt37ywiNZUD75VXIqeQY8SvtV4P4DkAa0DC3w2qdnZprWVN+DoAFYP2V0rdrJSaqZSauTUoVZxD7kV2NgmydGnzoG/bRgnSzswkL0C1amYFZqtWJCjRs6enU63z5ZfUyzduzBdL9r3oIuqh7UxF4m0iHkGi95YFPMWKheu9b76ZBG8PBrLvrbca75/Fi41HS1oaif+776i+qVuXMwc5Zp06NFzb2bWCVCda87jp6XTlq1bNSy6vvUYSCOpXly4MjwDwOnz7bbjEO38+JXfxPRdyHTLEGwFVKbOv7J+SQlLeto3trF3b66X122+cddiDiux7+umcBRUtSpvL8uXefRct4oDxwgvUp9v96t7dG9pDrp1/drN5szl31aq8rzJoHDrE+/bxx+H9KlOG6qgmTbjfokU8pxx782aqxH7+mdunTzf7nnUWB2FRhwXdV3k+Vq3idStThoO/3Ye+fTkw+FVCqak0gIuQkAPISVVPcQAXA6gOYBeA/wHoFO/+WusRAEYAQMuWLXWM6g65CQkJxiOlRAlKU7t2UboVorFfwuRkklPZskYijKVbTkmhFHfaacAZZ7D85ZcpcYorn8wMUlNpDBwxgkT94Yfc/t13ZsXopEnhulXZd+VKvrz2YichF6krbn8yaNSsyY8MGD//TOOn7cpo65ZvuIGGyRtv5GfBAqoyUlMp2f78s1FzSb8KFiQhb94cbri0By+/+qNKFc6qZJ1AejoHkDvvDCfI1FSSsqxO/vtvXsMDB6gnX7qU0vj114f3KyGBqqkKFYwdI4ggZduBA7z/9ep5Dey33kqSDTJkX3st95s+ndcI4OBSvjzv57RpFA789ys1lc9owYLmuQqytdjPXMGCnK2eeqqZZbz1Ft1obddbadurr3LwSksz+aN/+MFk5frzT9pTbHuOfV8PHPDaDI4iclLVcy6AlVrrrVrrgwDGATgTQLGQ6gcAKgFYn4NtcDje6N2bxCwPtu0yqRSl28RESsUffUT9a+fOrPPGG5TIgnTLfftSVbJvH6flaWkk/WnTvFEr/VNs2xX0ggu8Up6/XqVKJJDu3alG2rGDRsxvv+XsoHv34H41a0bp9qyz6Bu+aRPVBd9/z0HObhvg1RkLGjUiEYurn5C31CtThoT88su8dlpzwHjsMZKwGDOD1FqzZlHaXbuWg9q+fZRuN28OJ/5ChbweNtLX/v052AQRZKFCJO+FCznr+e03Gpk7dyZpvvQSZ11222TfF1+kUXrnTqpQtOb+S5YED8pB9ow+fXgum+TtfU85xQwwzz7LNQ1t2tAO8MwzFCZsF2I53xVXsE9FinAWtG8fB8I///QOGiK1B0X3PP98Y28JUv/UqUOBoXfvcE+fo4icJP41AE5XSqUqpRSADgAWAfgJgMwvbwDwZQ62weF4YMMG+mtPnswX1lbN2A9669YknnbtuE3UOt9+S/XALbd4/dQj6ZabN+cLKQTZrh0lsdRU7iN67+xsGtGuu44v/KZNZiWxXzJWiu2+5x5TtmcPZwZbtlDCa9vWtMUvVQNUNTRqRF22lNeoQUmwVSsSZK1a3gVGL7xAtU5aGmdB+/YFE+Sbb9KrSfqVkUGJd+lSkostgUfSLV9/PW0E9r0ZMoRStFKUTEuWNIPG1KmMC/TPP7yvmzaFE39aGq/v4sXeZDCLF9M9tH59qjeKFzcEGRSG+I03WDcz09Tr1o32CoAqp2rVTL/27+fz9OmntPOsXGnI2+5/zZo0jHfsaMo2buSMIV8+2kuaNg0e0AQLFvC+/fSTub5NmtAWUbo0Z1NNmnj71acPvXf27OEsyFZr2YPXhAkMMWHP2nIAOabq0Vr/rpQaC2A2gCwAc0DVzTcAPlVKPREqeyen2uBwnLBzJ6Xb3r1pGJTFWAAf9Fde8frxJyUZl0l52AsUoAqkXDkSZJ06lDQB1hs2jGQi+m17it2woVF9SJLul1/md1oaB6QCBeji+NxzJE3Z96abzIpRgeiSpW0FC1Kil+xV9eqRyIRIJk6kDviDD0y/5MUuV46zB4B9uuUWEw4hPZ1k/8cflCLbtfOSy5lnkhDFpVPa5u//1q3UezdrRoKqXJmqtvR0fnftaga0zZu9xG8bFBcuNOXp6RzQp06lR07jxiRJGYwrVeL1FLWb3ba0NEPe+/eTlCtXJkEmJnrr3XADy+1BQ/rVoYMJsTFtGr9vvNEc/9dfacDv04eDs3hqpabS+0ecDez2+dU///zD+1u0KMnbFjaGD6e3mB1PX9pWu7Z5xiX0haz2Tk/ns1yxInMt3HWXySORmkoDsT8gW1515wQArfUjAB7xFa8AcGpOntfhOCNIus+Xjw93sWL0kQaYEGT4cLq/+V/CpCQGwxo6lC9t//6Ult55h9LyuHEm2qWcU16kPXso+darZwaLIIJMTaX73YEDNMxWqGCIZdMmksj99wcTRO/e7NNPPxnifuYZEuCyZRxctA42ls6bR0lScq9GapuUVahAybtuXbPm4eqrObgFEeSbb9IAnZlpVh5PmUIvlb17Kd327GnaZkvGq1ZxP/8aCH89KStWjINAqVLGG+q553g+STNot23+fKpSvvnGRKRcvpx1y5Sh2qVJE+OiaavrduygOqZhQxMEMOjeyAwlIYGzwTJlTATTqVMZEPCDD0w9e9/GjXltXnqJqryDB6l+atOGpD1vXvD9ysjgtStf3gSyi3VfGzXigHHOOfxkZHDgvOuuvE38Dicp/OqPXbvMghiAHhRaU/KbODHcmyQxkVK+nfcV4Atle6YEEWRqKiXm886j6uOll6gC6NqVEqAsx7f3PXjQSLcbNlD3XawYyeuWWyKTi53sBTCrhSXmjZ8gGzWijr9ZM66QTUlh9Mz33ydZt25t1Dd2v95+m7/T0jig1axJ76iUFK8Pe9A1kXDDQnxLloS3LTGRZFuyJA2pO3fSx3zIEHrEDBlCYpfE5fa+vXoZw+bChTzfkiXsVyziE9SqZSTeSARZvTqv0z330F5y2WWcTV51lVc1Y7etfn3aMwDOgNLTOaD//jvVcJHuq922pCSzwOrVV71tS0ujuilfPj7bjRsz3Mi4cZzZ9e3LmaaE5PD3S4IC7t7NAa10aaoed+xwxO+QB2G/SAULmsBkgptu4jaJJyPqn0qVOIVv3Ng7GDz6KKWpd9+lCqR8+eAXSZJ/zJhhyqZOZf06dfjJyqJE699XpLQRI0h0M2eatvXpQ6+XpCSSkKh11q/nrOWZZ/jC797NQSRIMr79dqPikbLlyw1B2h42kQhy3jyqeyZMMPVOP52zoJIl2bYqVUx465UrSeSDB9Oounq12Wa3rVkzk+he+rV+Pa+j1sYAbl+TIKPqaaeZhXKpqRwEXn+dRu4lSzh42P268krOYB58kEbSqlW9thapJ2qdN97g9+bNbMvOnTxGmzZmZhOpbX37kpxtleP997Purl2MVmpfk2eeodfXTz9xsJVj+u+NhL5YsYLfaWkmw1m1asGGXKknkJDg9vW9+GLeS0kQf5ThiD834Y8/aNgUA1YkjB1LdYYdE/yddyhVXn55zp8rCC+8QOI5/3xKtfXr88WXF+mzzygxff65MVylp/Ohzp/fuHmefrpZkCQv2z//mAicp59O41daGo9frhyn7RKoDQiWNPfsoVGuWjVKt6JfBkhKV1xBwhdPDAmDkJpqcgAAVFVIeXo6yXTaNPbjjjtY1qED/xcoQAIRF1W7fXbbAEqmpUoZLye7D5dcQlK11zbIvuI2KscAjLuqSLe7dvEaDRzIQUOubY8eJjdxUNvk/4oV/F+qFAeJAgVMvSee4Dm++sqrEkpN5XMg7qsSOkJiCKWlkehSUkj6TZtSUpZ+NWvGWZCow+z7at+b7dt5DxISeI3KlDHtmDiR5D56dHC/JBY+YNIrSr1//jEqvLZtOcOQtqWksD9B+Y/96p9ly9iH5s0peMjztWULBZz77jP7ynql1FQe2z7+UYYj/mONSZOoxjj99PBtp53Gb5uMe/fmiyWqCMAY4Gwy7tOHEkK8xD9kSHzEH3SuIDz0EHXv559P4hO1wO230xtjyRJKT0JqkuIwNZUkOX8+pXE7+YSfSOxY89WqcWpcsKDxYLngAp6/Sxf+37fP+ObPm8cXeOJEI92uXEkf7Hz5qDrZsyeYXDZsIPmdeaaRvoL8wqVfpUrxWihl7sdDD5Hg/CQk5zvrLOrIJVpmRgZ/n3EGB7ry5Q1p2P1KS+OAVru2MV4G9UHKDh2idFuyJK/1mWeStB9/nOEzggjypptIrnPnmvAaQ4ZwlvT+++Ze29dEzjdvHgdoWRXrJ0i/m2rz5vR8qlaNs6CtWzkoPPxwcL8+/ZRur5s3mzhOCQm0A2zaZAbDoH6tWUObh70GQq6prB62961dm/c2IcFE4rz0Ug68tvus9H/NGpL7yJH03weocnrtNQ5QCxbwmRMDsvRLZiGrV1OAEhfgowhH/Mca553HB1ncCINw6JBJCZee7k1xFwmNGx9eqrZ69by5R/8tmjULnpKKl4e8gCkp5kUqXdoQfb9+JP4zzuDL/u671I+WLcvpubz0sq94TAA0VlaoQMm7QQNTV7xzZPoPeFUA1avz8+uvpp7sm53N+1S8OCXo++/nC/zqq1Tv9O7NQUZWA6ekGOLr29dM8ZcsIUkvXGhsHEEE6dfp5s/vXRRkt23XLgoJVavy+KefTgn0vfdI4K1aUcK3A63Jvg0aUF0GkCz/+YcE9eefkVfuBumbZVXpa6+F90HCFwA0KF99NQfZFi04iL39Ntv/6KPhqpPp0/n7wAFes+xsDh5794YTZCSV2Gmn8SOqIVuFU7Ysr1dKCo28s2ZR2p86lQb5+++nSu+dd8L7JRm6AA52qakUWGQWIO0IUlcJKlWiWkdUQ3YfsrJoCytXjjPj3r153WTQPIpwYZmPB0Ti9EM8SmyMHk0do43LL/dKKQAfQAmHEA9Wr6ZkE8+gEg9++YXGUIBSdJs2PP7q1ZSy09OpIkhIMFLVoEFGfysv17x5ZnZz0UV8gaMRJMDr9tZbpl7JktT3t21L6bZSJbP/X3/xmFOmUNqaOtUEVbNfwpYtOTjXr2/KliyhVJmYyGNcfjnPmT8/B+qgtt17LyVmuw/DhnFgqFPH3EcZDM47z+iNf/+ddgA/8Wdnsx29epmyjRtJYvv2cUC4/noT/TMSQY4eTYlfImOmppIE33iD5HPmmd5+PfigWVS0fLlZOOe/N6+9ZlwepWzOHJ4nXz66YMrir0htW7WK9+DLL81xmjShQFC/PmdIotaRvjRpwkFs2zaj4rL7n57O6/Lrr95+rVxpYgVdfDFjL8V65jp14mI5IfmkJKqmOnfmwFKnjtl/3ToKWqNHU/c/Z45Z2W4PEFWr8rk844zga3IU4ST+3IQ33uD0VKT9SNi40ZCVDckKFA8kRv7evV6/cD/sla7xYuVKSm7JyfSjHzzYeMcA1Ptedpl3HxkMbCKYN48qD1msY9c75xweo29flu3YYdwnCxQwAdlEupUY8OvW0b4hHjLnnMO2ybFbt2bSjAoVvG0DvJLm+vVU3ZQpY2Y1QhD33svziJuqv1+iirJtB7Lvn3+awaBTJ6rJJFpj4cKcdbRsafYLskmkpVG4SEsjCZUsaRKTfPABB+IJE4L7ZUdAta9LejpnLMuXs+yBByhsSDwmgBK8nffW3tcm0tmz+btNG6pJpHzZMtqJhg41US3ttlWsaGZBkmFs/Xp+r1zJQT0hgSqrm24yBvPUVA7S9ep5jaV22+Q6rlrFAaNBA5MKVOp17Mh2SUwnf7/kfBMn8jsjg9+bN5tFjJs2UZ1lt61ePQoufhdawBH/SYHUVE5xMzK8CS382LTJBLv6t7Bzjh4NSHKKxERKQfIAFyliCEu++/YlOcm0Wl4k8U2/7z6qa/74wxz/5ZepwjjrLGP8Sk31EgTg9eaxy20DmpQlJJDsihXjda1cmQPWyy+bqJAAzyH9GjOGKqhdu0wu3549qdp4+21jxAzq16JFHHDFpuOvZ0uau3ezr2L07dGD0mmTJvSXF1WZ3f9Vq7jPmDFGjVW8OGdBixZR4kxM9A4a0q9Nm0hSZ5xhdMvRVFMNGpjjSPyadu04oMoKVD+5dunCujJD1Jq2gpQUzhTEfmH3q2BBvhtz59IG4I/pZNeTsuLF2Q5ZE9KiBZ+pmTNpawu65o8+SluUSOQA91GKg4nEzgnad/58Ch2i6kpO5rMVpJrSml5t5crx06cPbS3t25s8C0COEb9T9eQmPPQQp/q25B40AJQoYUIDC0T/GS8k8qFIJZGgVPzuZJUqmXR0/qBcd91l/JZXreLDPW/e4em9AUpdzZpxgLHr7d1L6VZezK5daSxt3pyzj6JF6XIp/uw2QZx6KgeXmjV5nEmTqDaZOZMvr/Rl61bvOQFv+5o3pwdOkPqjYUPaYQAaAvv0oSpF9MZPP80BxN+vhASqw2QG8+uvVPP89VcwQUZSnVSowGPYx5bfJUuScAAmkDnnHK6glVDB3bvTziFGT/t+vfEGQxUAnAH9/jvbZrdH3FzlfH53S6V4PvFOSk0151GKA0np0jSyn3EGdd8NGnCQatSIsyCbkOU83bqRxOXe/fILBzVbtZeRwXse7Zm74ALOvvzP5r59bJssqrv0Us6SatbkjFopqqY6dQpvW82anBk0b07h688/aS/6+2+jhvLfw6MIJ/EfD3TtGlwuS8xtKfyee+gSaEP8fW107Hh4On6JEHi0JP6EBEq8kkwkGkGOHUt1SP369EQCOPXt2pXSv7RNXsJTTyUx3HEHpVVZF+AnMfGckLJ16yjhHjhAqe+KK3huex9/21au5OBbv75xNT31VLoazp5Njyz73L16cSD++GNzvt27vRJpWhpVLHbb0tNNIDeAhmJRx9iDpj9ey6WXmtg+otb69FOSV3a2ia0DcE3C889zIVtyMge3FSt4ryTyJ8Bra8+eAEqvEuq6aVN+XnjBazD2k9ITT5jwxbYEnZnJ84vzQWoqSa5uXa6KvfBCEp84PEi/AA6Y4nm2eTO/V62iq2ViIr1sevQgYSYkeAdqu30TJlC/37Chadtll5kgciJgSb/atOFn6FBes23bvAN6wYK85pMnm3MULMg2rlhhBKobbvDasaRfdtt27uQzZj/3tWvTWC+RZo8yHPEfa4wfH9n7JiHBBNyyy/Lnj72Q48cfjZEuHojrWyyJPx5kZ/Pz++988KtUMWoMeVGuvZZRESV4GsCXSfK7SqYjkY5k3337SMaiRhgyxCzQkuO89JIhZHtfe/oPUPpbt44kV6yY2X/4cJKk5HCVtqWm8pqXL0/CteOjS705c8z9HD+eg1Pp0mZF7fXXe3X5sq+ENpbjLFhAQjvnHK89Y+ZMEsKrr1K6TE016qqCBfl8dOvG/+JquXcvv5cv5+wxOZmDZbt2xiCqFK/3//4XrFvets1I4Js20eBev743zIQMyhddRDuO3C+7X7JIT5Kky74rVrBtInh06+Zd+KYUbSQ28QXNbjIyOKAlJ/PZEc8kgMJExYoUCOxZm9yvxo35kdmUXNP0dA4sMkMbNowDf0aGOfbAgfTC8d9X21sHoGpK8kuULWucGz74gDOVqVONjc1WQxYsSEEqh+BUPccaFSoES+yAMeraUvi4cXxoYqlbNm7kSxgv/vqL3/HG+87OjrxNKapxJk7k9+DBdEcDqM749luTlAIIJ1eA28aPNwY1qefX3dsSmdg52rXjtTvlFDOgBe171VVULf3yC/tdsCANga1aUe2UnOxtm+03P2GCdwWybTPwq7Xq1DHJVxo3JjE2a0aJWerZrqYAJcu77+bgJAPMU09RRbZ4sdfQ6O/X9OlmYRlgDKxCJLLgCiD5iPdYmTKcBT30kDmn3S/5PWECCfyRRyjVy7X87DMOWLb3jL9tS5caF0372tkkJ99JSZxtSUTM7t05sNau7X1W7H5t307vrTJlGP8H4Ezik09oV7JtLf5+bd1KO4Mtfcs2CZsA8P7u2UPhQwSVDh14nqpV+QxF6n+PHrxO335rBrF33+UMb+VKrx1M9k1J4f2eMcMYr48yHPEfS0j+VFlw5IcQvy2FBxl6g/T5hQt7V6/GQtmynPZKqIJYiKYSUsp4tsh0XFCuHAcuezWqfNetazxYvvqKOuXKlY3/9U03USqy90lNpb7+55/NLGD2bKpw5s/3EqQMVpH0twkJPGf58nzZRBqTdksSlfXr2YeaNRlyGKCh8KuvvK6i8v3mmyRJgNLe119T8rMJMlbbAEr/4t1i18ufnzp5UbvIbKp+fQ6wiYkkmy5dwvvVq5chqv37OVhPm+Z16QTYPv+AZqudGjbkYGFL96mpnJl26mSk6uee4yBdo4ZRxT3yCL2C/P1q3Jh1xDj6+++cyS5fzkE5Xz72PTs7vF/2tStVioNGkSLh96ZRI/OsTplCoaFECQ5+AAfpMWOMh5jse+gQ77fMrv75h3aqNWuM5B/vfe3WzdgFUlNNv8qX5/OYkMB9zjyTM7IcgCP+Y4n9+82CnyD/eXnJ7an3P//QL/7AAVN23XXhqo29e72LmmJhyxZO30XKiAQZGPzTWhsZGSYS4+bNlHLEFXD3bhLNsmXhRCILo+yyzZtNVqwGDcxg5l9FaWPYMErHdr0XX6R0evbZJlBZairtKA0bmus/aRIlKz9B3HGHeemk7MABI/WXKUNitaXpIBL6/ntj07GlwPffpxQtKiGJaVS7ttEJz59PsrH3TU3lzO7HH419RLYtWWKEhMsuM+klI7Vt2zZKngsXmu0NG/J+XXqp8b6ySVOu86ZNrOcnSMDsb5etXGmuedu2xmU0GkH27GlsI1Lvk0+42E8GfSm/+26jJszMNLkg/G0bOpT+93ZZRgZndQAHT3G39RO/PRsdPtwbewmg+uepp3i/bRvPd99RoBGhaPZsMzOV2VlqKl1O7dkD4Iy7JwRs8ty/P5y8R44kudi5PAUZGcYwtGSJeVBtbNwYf1AniSA5d67RwwZBSDga0tMNgW/ZQtWE+MGvWxdOAqedRskuSLds/161iiqjM8/0em3s2sUX9KOPKHkH7Xvmmfw8+GD4tuXLzezqhhtIuKI2SkqihC5T+khtk7j+5cuHS+WSZUryqfr3rVePH8kl4G+bSI0vvOCNKQ+QuBJ88ppsS0428Yd+/pltPP980698+aiGmz3bRAH1H6NkSUqd4tEDmMEUMM/dTz+ZaKSy7xVXUGq316EEnWPxYj5/F17oNVR/9x0HwrlzTZwnf7/8thbp16FDRn22d69RZ4mevlYtzgpbtIjetq1bqZrq0ME8A7KtWDHOBrp08e4r10cMwjak3rp1xj32ppt4D5KSjAH93Xe9nnp2joocgJP4jyVs4g+6oSVK0DvBH83Sv+/06ZFj8kSTzG0EqZWOFPY5JbGHrR8ViI6zdGmqMVq1orEXCH4Jf/iBvvJjxpjB6cYbWbZkSfi02v49a5YJSObfFvTSipunUpQmBw82xByJIC66iKqTgQNZ1rQp7RSAIcigfdet44pUW3USVE++O3Y0BsDWrekBU6uWV63lP0afPry3ErFUKZ6zXLlwPbR9HQ4coD5a7DGx2laxolHr1KnDAbR6deNGGbTvq69SYv7mG0N2Dz3Efq5a5V1x7D/GjBkm/If0yz+TtOvLjFECGLZrZ7yEgtr266+cLT3zDF1zARL94MEU1mRBY9C+y5dzJmYj2rWz3+FLLuEaBslVIfVyKAuXI/5jiVjEP3w4pZnffzdlos+3982fPzzio6gT4nXPlGBgseqLH3/QSmGBtO2aa6heCXLnfPVVE9d8715O4ZctMwRpDxD+fe2Hv3ZtE+DOP7h06GASr7z8MvXydmiLF16g37T/Zbz4YhPREuCA8+mnXiOivdrT/rbvY4kSRuLz1ytSxHjrTJnCF71QITPll8xR/n6lpHAAK1eOZX/9xVnAqlVGCg4ivCDVSefOJGapJwQLGNWLGDGrVzduxHXrmkxm/nN9+qnx2Nm0iWrJdeuiE2RQ2844g6olccm069vuz7ffznq2l9DHH7Ouv18PPWRmogcP8r4uXWrUptFI2W5frVo0OgPhg8y555p3dMQI/i9fnsZhABgwgM+rv1+nnUa1leDPPzkQikdWpOt0lOCI/1hCCPKuu7whAQQS38SWwsWLwrYJbN3KOOd2mUxt45XgxbgU70ARpFoSSL/atSOB+BcwAd4HeMsWTnft7S1acDA67TSj1pGXrE4do5qSuPz2vvYMQdRksq89YLVqxX7HIkgJJSz1lOKxW7c2K2VtW4CdaSoSQf7vf978A37UqmWkU3vf/fu9HlWvvWZCHshg9OSTHDj8rrBffulNpfjTTyQYu1+pqVwrMmBAeNuEIIsVM3mRo93XGTNozLW3X3opyfeCC7zRQ/fv5zuwfz/LFi826id7kG3c2Dsoy3FlzQNgBip/v+y2ZWSYMA9Sr1o1CiCtW4erddq0MQsOt271rv+wv0eODI88ummTGXxOP93E3vGHirDRrx9Vtfb1f+cdk2HuKCNuHb9SqjqAZgAWaa2X5EhrTnSULs2Xr06d4FCrorsVMtba6PyDYuZkZVFlk5VlDJHxErmoJOIdKKLVkwFozRqqZdq0MbpVeZDvvZcvfu/ewZJW8eLebE72NsC8ND//bFQ4sv2GG8ID3AVJwTNn0sho101NpWdLz55Gn+6X6gCStm0LsbcJee3ebdIPyvZGjWhAFjuAf19b/fPLL7x2tjEaoLS/ebPXR90+RsuWRqXjP65to5GIofa+X35pjMSAN9aO1MvMpDRqR4C11VA//8x2B/WrRg3aJYLatnGjMUa//TbVd/ZMVtQrQfva55o+nffMzi2QmsrFa8WK8ThB/SpcmB52tpdd0DM3axYTBdnbL7iAtiC5V/59hfiXLaNXmB37PzWVhvv27c0CMP/sFfDOao4yIkr8SqkvrN8XA5gMoCuAL5VSPXOsRScyJI7H2LEmaJgNv959/35KAoMGeRNSCETS3r+fpHHddcZYFguffEJVgRj/YiHagCIeCwUL0lVtxAgjNSckmEEpaIpt+8p//LEJAuav53/hK1UyxvHq1ak+Ed95u579wo8YwRgs4i4KGAlVXC2DzgVwsLFXRtsG1qCXVqTAokV5X5s0MbrpILXWr7+S/F57zUjG3bqR1HftClc12f2aN89EsRQEDV7y217v0b49SVvWGAQZZvfv52Konj3NoFmrlpkl2Plv/ftu2sS1KHaaSruef1/RqwOcBb7wglfVE3Rv7rmHgsPdd5syGQjFDmL3S67NoUMc0P7+O7ht/nOVKmXWGFSrxme1cmXvwjN/vz78kO+7pM+U9iYleT31gvr1xx8m1tJRRjRVjx0MZhCA9lrrXgDOBHB38C4OUbF7N2Oy9OtnsvvY8Ev88u2fHYg+Vohfvlu0MF4CsZCURNIX3XEsRJP48+WjpCZk5/flF0+KoIdb1Dq7dtEfvXZtk9ijSRPjN+/f97PPvBEVn3sueNBITPSW+afYTZuSxIJeeDspzK23UqK0Bw2/x42Q8RNPGF3/gQMccNavj06QQWEGqlYlSdtSpdSzZx/vvkvClBSJQLjLouzbtq2ZlQAkvi1bvK6K/rYFqXUKFzYStr9ecrIxRs+aRSNmiRJmZnjRRZz1ij3G3lcSsAN8Dj7/PHiBlX/w9N9XaZtdTyBqzuxsGm7r1jWSd6VKxhXZjksE8DqLinbbNqp5tm8PN0bbSE3leWzBqXlzqjSDngNRqQEU+AYNCj/mUUA04rd1C4la65UAoLXeBiDKMk6HiFi71qSgCzLaFC7MF0ZCFgvZ9u/vjRYoZOgn/hEjYvvlC8R7Q0g2Evz+1kHYtInTaXGn8+tlRfqSF0jc2O6/30if9vFFOitSJFynHkRCv/9Ona89OPXowZda0hXKvrt30zNIMHMmBww/kbRoYQjAhk2Qfj936Zfdtv37jRFP6tWtyyB5bdoY8pNtdsTO9eup57X7JfXs+E3SdtsI3qSJST5v7+t/7vyqKYDtbdbMhGwQYeKhh4wx+uDB8MV10o4PPzSScdB9rVKFenXbbTnovsrx7XvzwAN8Jv1qnWnTzBoDwOjn7fNXrEhVowSks4Uk21AunjXRnrn5880MTvp1/vmcpQWpK+00in//TfWU/95UqmTUcVJ2HPz4myil9gBQAPIrpcprrTcqpZIBxAgY7xAIvx+/H999R6mwfHn+t6UE0dVqbVQOIkHJcRct4gAhL100yDRz/HgTHCoIdkjkSNi0iQbGJ580ZTZBDh7Mb/tBnzYtOJ+q/Ts9nfrj2rXDX8J27YI9RwSVK5vFT/7j2moH/wIhgKQaKUSFXW/KFKrWbP/rgwep0+7WjaqnoH4VKuQlqUh9mD2bpG8T/+WXc8Cx14DYkrZg7lyqz+wUn4mJHOiGD/cSjP/83bt7Zw82hCCzs01OByHmqlUpOdueVEES9+bNtLXYPu9S7/zzTQ4FW1AQnHJK+DMp2207mKh97H59/HHkKLZSLzubhN6sWXgqy+7dKZQlJQX3q1Kl8EWUsq9tjB4zJrxfd9/tXdch+x5rrx6tdT6tdRGtdWGtdbLWWiKApQIIEIUcYiKWO2flyjT+SpRC+4W3pfvRo7nsPcjVM17jrqgdoqlwtI4vEYucPxKRiwHP3r5hA6VbCctsh6WQfdPSuJKxb19Dag0a0GAapCe3sXo1oxtG0i37y5o3N2UVKnBgsfWyQcd4+21KcraU3r8/v4UgbTK2jaWjRnnzKEdrm338SpU4kNoBvKSevXDvk094HnERBcx6g6BBzb6ekyZ5o04Gtcnul6zuTk1l0DEx7Nv1bSxYwHr2jEoMmXYIkaB+LVzI5z9a2wAzm7AXCQKcYcrK6KB9laJdoXNn836VK2dmvkLWQf3ato2Doa3qjHZfJXQEwGvWubM3B/bxIP5I0Frv0lrnjMXhREcs4h8xgmoccR0rXty4+PnVOikp5oUoW9YY5+L10pEXO9pAsX8/BwilqBaKBGlTmTJcsQp4H/gWLWgUtD1b3n2X5C8vkv1yR5tiFyrElyQoQ5atk589m9N6ceEDTBRGW+qTfXv0MGVTp1JtFUSQsVQnskgtiLRESj94kOezI0/WqEGJ2TbOyzFsMli/njONoIBx9iCdmspZnd0HmZnYJC+zwxo1TNl55/F+2Qul7Gxc0q9ChTjQCVkfOsQ4RXY+iWjE588X0KCBkbLtevag/OmnlLwlPSUQrK6qXp3X11YJffstZ0FBHnV2v/z5AvLn5wAfNCjZXkh//83Vy7bdTIzhdh5i2ffaa03ZokUUdPzvQW4hfgBQSo042g05KSAE+dZbJCU/nn6a30LeJUua4FF+4r/vPvOCJScbqTBeib9iRT5Y8bhpAkZ/HwRpk2Q6AmIT5Ndfh9d78EGqJsRYJsZS28B14AClWcmRah9DrpVdJgtpABOMLcgFz1a9vfdeeNtefZVqBlutM2MGV2ousbybZRpvk2uZMjQOy6zGn55QztW0qTdaahBByixh3TpTdsklbJvt/if3TpKkSHv9/apfn6QfFNnVJkjxmIp2X5Uy0TAFFSqQqO3nXY5h21+2bCH52SoRuYa22kmI0X5uxR01lsFXBgu7D8OGUfK204/u20dByh5IR470tk2OMWRIeHttlCtHpwdb2Agy5IsdyCb+fv3oEZUDONJYPW8e1VacLGjalDrW2rXD4/QAhkCFvA8cIOFWqWJeQnvWsHMnSWXHDhoBgfgl/lde4YMXbaCwzxXtuFIvXz6TjNxW60yaxO/Vq8Mzh9kv4RNPmAVrQHhMGsC015Zk69ShdCrGSMCbwUmwZg0J3vZbl5WSr7/OtQaR2ta5swkM5odNkP41BgBtN7bdJahfWVkczCRom32MK64IDk8hKFfOLHDzwx7QZHGZPfA8/HBkqdI+18qVJC/bE2fLFno5vf565H4VKOBdoWof1yZWcamUePaASS4kNi//PoJVq3gPbKl6+nSW//67V1Xm79fAgUYF5of97NgCBEChbPLkyDGd7P209tYTweaBB4zaKii+lr3PUcYRSfxa61mxazmEoVAhSsRvvRUeRwYwBCok+8cfnA6++67xILHJWH5v2MA6Tz8dvpApEp56isf0k11Qe4DoA0TbtiSPtm0pATdt6jUYi8QelEbSflnGjjUx1SNB6ttumikp9KSQdJL+4wokMqroawEjJdsqBoFNZH/+Gazzj3QuOxzCBx/Evi9as3122yRwnH9Frh8bN/L++6VtP0QFYRPpokWUeO14/kHnmjWL3kj2oOEn1CBoTWnZVhvFa2spWJAeNrYLbRBmzeLzaa/jkBWvsZ65KVOiqzEjISmJtpagmYyNVaso8NgGb7nH4lYaCX//TYN0kKvtv0S0BVxFlVJPK6WWKKV2KKW2K6UWh8qKHfWWnAxYs4Z6/AEDwj1OgHCJX77th1dWGwLhXj3+cATRkJXFBzBa0vZ4Jf6EBBJCvny0N/j9+CXJeFDbbHK98koTEldQqZK3jYmJlO5k8RDA6/TXX8YbBIisTgHCbQaAV/0jsxVb3969O8NM2GsF7rwzvF+dO5O87AVDH33k3S8IQa6gBQqQrIPUP7YB9ZdfTPA6gbgs2rMgIR/b4Dl9OmcF0fTeAK+nf2YgiUiiQSk+ryK4AEYvbi/WknPZZatX8xn0P09+yL223VntTGECsWPYuvp27cJnckHpDitXDs+INWOGd6YV9HwHtU1mo7Z9wF4YJpgwgYKfHb/nKCGaxD8GwE4A52itS2itSwJoFyobc9RbcjJg/nxjJAuaXmdl8YWVxTdCth07Gv/pAgVMVD+/3v/55yNP+YPO9fnnDFcQCSkpDIpVqFD0TF0LFjD+0Nq1lJ7WrvUaH+UcNhlfdVV8U9nq1b3kBYTrb2X6b0uVVauSgMWVFDB2CokICjBoF+ANbSBSp/0SyiBrD1QyoPnDAfjvrV9NAJBE/HFYDh40dh6A6h1Je2gfHwhWOwX5+9u+8tJOu32yqtp2LXz9der8bSL79lsazG18/rl3fQnAwcAOTxCEpCSSrz1oBLVN1pjYK2svu4z3x15xLhEx7UxfIgTYA1rnzrweQbp4G/Xq0fZhIzk5OFKmne60SBEak1980ZSJACCJeQCTVUuCAAJmULJnyrZ321FGNB1/Na31MLtAa70JwDClVIBl0iEmYnn1SCINkT5F4k9PNw9JWprJZCR6Xznu9OnUaTZpEl9bdu7kNFoiD/pRrBiNmhKELBKWL2c0zBtu4MA1erR3liKLymxyee654GQ0fiQmeqVxgKt8v/iC5wTMy237rKemegcCwEiB9hRbdOA2yV12Gb04bO+M1q1JcrZtJjmZL7vdr8mToxvCBWJA9sOeZYje17ZnlCtHArYHJRmUbVWHzCDs44lBePNmM4sK6tett5qQG4JixbxhLYBgSXTs2GD7lT+USM+eXj9+eV6mTTML7KRf9vPcrFn4fW3WjDNoW4Uljg/2fe3f37u4Cgju1/nnez3QANpfbIeCoH7lyxfuKiqzC1stJmtobCGidWvOIGxhqEEDhsoIUlf9W2itAz8AfgAwEEBZq6wsGL5hUqT9cuLTokULfUJg7Fh6xicmat2lS+Q648fz9yefiCe91uPGsezvv/n/o4/MPtOmmXrDh8fXlpQU1o/UDq21zsrSeu9erQ8ejK9ff/2ldXq61jNnerfv2sVtsbBundYrVnjLVqxguY0lS7TessVb9tdfPE8szJjBfgmys7WePp3f0RBvv7ZsYftsBPUrCDndr6wsrX/91btfUL+CcLT7FYSZM9keG/5+BeFo9ysI8T6HQTjSfh0FAJipg/g9qJD1URzAMABLQPXODgCLQ2UlIu2XE58Thvg//ZSXvEQJrTt0CN/+8MPcfv75/L90qdY338yyMWNYtmgR/3/6qdlv/36t58xh+XPPxdeW7du1btRI6/POi1xHzgVo/fjjsfu1aFF853ZwcDgmiET80Vbu7tRaD9Ja19NaF9fU89cPlQUoLR1iQlQy338fbNx9/HF+i662Th2z9Nyvz+/d2+h+CxQwOsl43TlLlOAnXndOWx8ZqV7ikXoHOzg4HEvE5c6plGpvfzscIbp2pR7/lFPCvU6ys42RUsh4yxb6NTdpYvTcQrLp6cZItGKFWTEbRORbtphIknKu+++nTjEe/3zAW++nn7zxUrKzqd+0PVkcHBxyLeL143/O9+1wJChShIbFzz8PT05hGzqFZD/6iJ4IP/9s/M2D/PgXL6YP+/jxwYtRLr6YRi0ZKLKy6D1y441mpSlArxLb6ByJ+Nu39xqrrruOde1l/w4ODrkWh7uAK2B5mUPcmDePLpfjxpnVjoIgkpVv2yWtbl0Tktfvx1+pUrAvsd8PWupXr+71ke/a1evqFmkBV4kSOZodyMHBIWeRozl3lVLFlFJjQ4vAFiulzlBKlVBKTVRKLQt9F499pBMEv/zChUdah7tzCskOGGBiiQvZtm5tJPMiRYwPs1/v/9xzdHP0QxJOiypJ6k+c6PVpl/MKKlak/3Hnzt4VpSkpXlfHH3/k7CEHFpo4ODgcfeR0svWXAUzQWtcD0AT0CroPwI9a69oAfgz9PzkghFukSDjxFypEH/0nnzT+5iLxz5ljpPbNm6kqAoxOXY778cfBy8+TkugT7h8ofvzRG0PfjypVGBny66+5QEuwfr030cqCBQwZYM8QHBwcci1yjPiVUkUBtAXwDgBorTO11rsAXAwglP0CHwC4JKfakOtgE78/ZK4k0p4yxSxMstUrotaZP58RAadNYwo7+7hAsLF2/37gjjvMop8ge0IQDhzgytGgWCFBtgZn3HVwyBOIl/j3hb4PZy5fHcBWAO8ppeYopd5WShUEF4TJOudN4KKwMCilblZKzVRKzdwazZUwL8EmfsCbbHnXLkrVDzxgQjZ078745va+Qa6Tl19Ogq5RI9ir55dfvDOBUqVI+LfeGt2dc8oUroasUMEbQ6dLF2/sexlInDung0OeQFzEr7Vua3/HiUQAzQG8rrVuBiANPrVOaIFBYIonrfUIrXVLrXXL0pHSpeU1CGkPGkRp3zbE7tlDSX/5ciOFt2xpArL5if+qq0y44wIFGDcmUnz9GTPo8ilxVZSiwThSfb8t4OBBbyarpCTvLMD58Ts45ClEJX6lVD6l1JJodaJgHYB1WuvfQ//HggPBZqVU+dDxywPYEmH/Ew99+1I/XqBAePxtkZpTU40UvnQpVTtnn23ilgjJrl3LGOkAfeofeoj7BUnwUk9mTtu2MbLkvHne+mPHMvuUtE3OVbCgGSB27qSNQUIcAxxEihVzqh4HhzyCqMSvtT4EYKlSqkq0ehH23QRgrVJKImJ1ALAIwHgAklX4BgBfHu6x8ywKFaLaZM4cBl8Sv3rAS7IHD3JGMGQIcM01VLlIasAg3fqffzKBycSJwV49ApHSd+5k4LXLLuMAIrjwQq4W9gd/swejIM+dAQN4TEf8Dg55AvGoeooDWKiU+lEpNV4+cR7/PwBGKaX+AtAUwFAATwM4Tym1DMC5of8nByZOJEGvXUs3Stu/3iZZgCSdmRkema99e5OsxK/+KVQoWN1iH9OuX7KkCS0McHApX96kmAuS+MUbKVJ0SQcHh1yPeJSyD8WuEgyt9VwALQM2xZkm6gTDxInAf/8LfBma5Nhp8Q4dYpjW/v1pPE1OJtkmJzNkQ48ezJZVogT9+mUf+1vSL/qzan33HdVFfuKfOZMqmwceoN5e8ntKvSZNgGefZX2JVy9ttuO8f/gh+zZy5JFfGwcHh2OGmMSvtZ56LBpyUuDQIUrkQUknGjXidq2Njl0k/vnzzexg6VJm5ilZ0sQ9t4O/bd8eTvwFCnhzpUr9uXNpIO7XzzuzEOKvXz88IYW0ecgQhoKQ43x58mjsHBzyOiISv1JqL4I9bhTokFMkYJtDNGRlkfiDUgAKZs+mkXXQIEr8+fNzHzvZyl13MY2jhFuwVTJ2RiDBCy8Aw4aZvK/Z2TyuhGfIyPCuKZDj7dpFg3D16tTfizcQQDuFv18ODg55AtHCMhfWWhcJ+BR2pH+EyMoigRYsyI9tqF2+nGEPRo9mALWdOxmmecgQL/EHuU4OHMhVv4UKBbtnfvutN31dixZcQ3DppfyfmekdhETiHz2axt5evUx00FatgHvu8bqiSr8cHBzyBHI6ZIODDZGM69YF9u0zuXMBSurvvmvys2ZkMDXd2WcHE/+FF5pQyzKLyJ8/2J1z716Gbf7lF2+5SO8ZGYb4mzc3+ns5V/783gHF78cvKiwHB4c8AUf8xxLDh3slbxt+r57MTIZjnjePydYbNfLWmzuXswSASV0GDCBBa592ziZo8edftIj5ceV/ZibjA40bR119iRLhbcrM5LHHjeOM5OBBc65ixbxRPh0cHHI1nJh2LJE/v5HKe/bk6ttLLuE2ewEXQAm7Tx+qZT75xBwjyI9/2jTgtdcotfvDPQfF19+wgZ44kydz5pGSQo+ijh25tuDAARqEbdsBQLK31x6IpD9s2JFeEQcHh+MAJ/EfS4wcSZJMTCSZz5tntvlJVlbh+v34e/WixJ6S4lX/RFK1HDxoYgP53TlTUni+hAR6Dd13H3X60i7/LCQjw7hz7tvn1DsODnkUh038SqlJSqnvlFJdYtd28OCrr6iXT0igRG1L40qRoDt1osTdurXx42/ThgHVAKph6tennt1P/F98wZmEjVKljHrJT/xr1zKn79Kl1P+/8oq3XseOwBtvsC133UUDrrTZTh355JPALbf8++vj4OBwTHAkItv1AMoDOP0ot+XEh20ETUnxEn/HjmaRlEAk/h076J8PMODa778DjRubZChC/H/9BXzwARdy2V42+fMzVESBAqY+wGO+9BITu9iLyYT4mzblBzCuoNLm3r25GK1QIbqgRrJdODg45DocNvFrrTcA2ABg1tFvzgkOWyWTmuolW8H69SYfrkj8tlfPhAkM+2D73WvNGYCohTIyjHpmwQLOFsaNM3ly8+XjAjBZ1BXJnXP9eiZqP+UUzkJSUoCqVbntgw+YArJQIefH7+CQxxBR1aOUmq+U+ivS51g28oSBTZBVqnh94adPB7p1o/7+v/+lBP3VV1Sh+N05/ST7+uskaXHPtF06t22jGscm9q5dWS7SvO3OCRjif/VVDhZjxpDgly1jQpcRI7z1HPE7OOQpRHtbRYd/R+hbArH0QIQY+g4xcOiQUcHMmOHdtmoVCbZXL/7PzATatePvIOK/9FIS9yOPmGPYEr9ACP3KKxnv/9przTZ7oJDZx/PPAw0bes9l+/sDnF0AXuJ3C7gcHPIMIhK/1no1ACilzgslUhEMUkrNxsmUK/doYcIEr4rGht+DJj2dK2ebNqXBV4yptj5fPIDefJNJVurVowrHdvkU4t++HVgSSq0weTKleUnCfvAgs301bw6cd543Hn9iohlQMjMZTloStAvxV6kSHH7CwcEhVyKe+blSSp2ptf4l9Kc1nBvokSMhdOkefpgral98kf/9xL9zJ9U8zz/PsA0CIePEROP7P3kyB4LFi03GLkGQ0XblSur8X3yRA5EQffnyXBhWpYoZQPwS/6pV/F28uBnEZCBwcHDIE4iHwG8E8JpSapVSajWA1wD0ztlmnaB4+ml60QAMcjbVCnxqL+BKSjKELaQreOwxRuuMpfcXFC3K+DpAuDtnUpIh/T/+oOtm8+beeP9+iT89nR4+O3Yw9ISDg0OeQ0zi11rP0lo3AdAEwCla66Za69k537QTEJ9/ztDJQLhXT0oKwyaUKUOCvekmlufPz9W97dvzf7FirBdE/H/+yfg/K1aY4150EUm9aNHweD/Z2TzPN9/QQHzXXSyXAaJXL5ZXqwYMHmxUOrYPP8BjDBjw76+Pg4PDMUFMVY9SKj+AywFUA5CoQhKi1vqxHG3ZiQjbCOr347/+eq+aRgypyckcCPbt4/8vvqA+v3lzkz1LiH/rVqpwBg0CatTwnrt+fS7mkvpy7LffpotmejoXkO3ZY4i/VSszW3j8cX7v30/vniuuoFtpvXqcvciaAgcHh1yPeHT8XwLYDfrtB8T8dYgb9gKu1NTIBtE+fYy/vN+P//PPGbxNAqwBHESKFg33vgGoWvroI2bbEhQqRCleYvSIO2fRol7iX7SIA07z5jQOFy7MaKFr1wKffcbk8fXqOXdOB4c8hnh0/JW01t201s9orZ+XT4637ESETZCVKzPBiWD0aIZazswERo2i9P777/SyiaXPHzuWmbRsXbxgzRqGZLBx440cOAoVMike9+83MfeF+J94gu6fK1ZQov/8c9oBBg3y1nPE7+CQpxAP8c9QSjXO8ZacDChQwLhg3n8/de+C5cuZG1cpEnhCAnDqqVTPBBF/z54MrWwjSOLfv5+zi2uu8XoHCSRaaHo6z/Xhh8AFF3CbzFD8A4qQfDzGZQcHh1yHeN7WswD0VEqtBFU9knrxlBxtWW7EpEkmLHHjxlSB2Ni0yRhvBW3bGsneVrf4ISSaLx8JfPVq6t87d6bUL7lvhWTXrDES9+DBVNtccglVRLLACiChp6ZSDy+eQx9+SPWP5O5NTDSJ2u0cu353zgMHaHwWQ7Oc/5RTGNXTwcEhTyAe4r8gx1uRF7B7N4OZSfKRmjVNIhTBkiXh0TEvvZQGVz/GjQOee45SvnjcKEVJP39++tN/8QVdPsXDB/D68R84wLJJk+hX/+CDxs9eIMSfL58h6uXLuU9CAvDPP97606YBlSpxsPK7c+7ZQxVUUhI9fGRAGDMm9vVzcHDINYhH1aMjfE4upKWR9J98kgS/aFF4ndNOoz5cPjff7JWgb7vNLHbavBn49Vfj0mmrS0qXNv71yck8ryyW+uQTGnfj9eNv2JBhnZOSjKomqP7IkQwj0a4dZxp2PSH+Xbv43aoVZyTnnx/zsjk4OOQ+xCPxfwMSvQJQAEB1AEsBNMzBduVONGpEL5aghUudOlGytqX7N9/01vn8c5L4TTeFx9UpVQpo0IC/Z8+mtH/ppax3yy3A118zc5as7PUTf758DLx2zTVAv35UEQHAo4/y+/TTg42x995Lw+2TT9KQax/3kUdMNq5hwzjLAcL9+M85Bzj3XKqcHBwccj1iEr/W2mPYVUo1B3B7jrUot6JCBa6YBYDx46kqGT7cbN+xw0jpkWD78fsjad5zDz8CKU9O5j5CxpJasUULqmTkuImJnBVMnAhcfHH4uRs18sbjF+KfOJGunWIEthOpn3qq2X/gQBNzf+9e5g/o35/fCxaYnMAODg65HkcSj3+2Uuq0nGhMnsEffzDImU38GRnhaRJvvpk+7999x/824QZF0hTcfz/wv/+ZenZcnk8/pW7+p59M/TJlqB4Kcuc87zwaXkV9A3DhV+PQeJ6cTNKXePs28f/yCwed00+n6mrfPuC662hA/uEHLuLy98vBwSHXI56Vu/2tvwkAmoOJWE4uLFpE//fnnyfBZmd7wyxnZobH1dmxg943AnsBV+nSlKhln+eeo2H1yy8Zm79YMWDhQhpR/WodO44/wCBtgLEX2IPJypUcGGwMGmR88fPnN5m//BL/wIEsmziRUUJvvJEeQZs3c7vz43dwyJOI520tbP3OAnX+n+VMc3Ixdu4EfvuNUq/tL28nIvdL/OIjLyhThoQOUC/+++9m299/M9YOYAy6ovMPMuT278/22HH9gxKxiFdP3770yPnkE28bk5NZDrDe++9TrWWfS/oSLR6/I34HhzyDeHT8QwBAKVUo9H9fTjcqV0JIL39+r0pFiP/yy8ONvrIqVuB3nbThJ9kpUxhu4bbbOEjYi6by5aOHzbp1LLv2Ws4e+vWjT32JEua4QvyrVtETB2DcndmzaWwuX566//Hj6dNfsmRwm5KTabh+912qeQBD/O3bOz9+B4c8hHhUPY3A7FslQv+3AbhBa70gh9uWu2AbWwsU4MeWrJ99Nnwfv8RvY9486stffx0488xwks3OBu6+mx5AnTsbLx3bj19mAT/+aPLnzpvnPU+Q0XbZMlPvo4+89X/+mauLW7TwGqPz5+fitcxMnqtBAzPAfPtt5Ovm4OCQ6xCPH/8IAP211lW11lUB3BMqO7lgS/y33kpC9evO/WjRgvF3AOr3O3dmTB6AJDx/PlVIgJdkK1Y0x5DBY/duqn/mzqXkbRt8I6latKaHzymneInfnypx40baGFau5AzjqafCjytRQgEuFlu4EOjt0jI4OORFxEP8BbXW/+9CorWeAqBgjrUot6JoUXq3FCkSvL1gQa6ctXHTTVSNACTRb781sfL9cXWqVzfJz199lT7xCQkk3mefpW3AXt0baQFX167A0KH8rRRX1V59dTjxS/0XXgDOOov+/MuXe+u9/75ZB/Doo1xXAHiNyxkZdAcVN1MHB4dcj3gsciuUUg/Bm2x9RZT6JybOOYcrbQEaYYcPJ8FWrkzJev/+6AnHhaT97pwiRT/5pLe+7SVk6/cffRSoVQto1owhFKRczj1vnom7b6Nx4+CBYtEiMxj5VUISix9gTt7162kXSE3lCt8rr2SguNWrTb4ABweHXI94JP7eAEoDGBf6lMbJnnpx/Xrqxrdt4/+sLJK/353z+eepFjl0yBuEDQiOpCl49VXgmWfM4GAT/6hRjN/TqxclcoBG5fLl+dv2vlm9mucfPZoS/ccfm/oSYM5uc2qqdybxxRfG82jZMta97Tb6+//xBwcM/4Dm4OCQ6xGPV89OAH2VUkUBZGut9+Z8s3IhPv2UUvlPP4UvvhKp3e/OefAgvW8yM8MJsnBh5q6VLFq3304J/qOPTPC3BQu8+2RlBevzZ80yv21dfFoaz+9fUSw6fH+b/RL/nXcyFMVpp9GukZnJtQaAqeeI38EhzyGmxK+UaqWUmg9gHoD5Sql5SqkWOd+0XIYtW0jECQnh/vJ2mkQb9gChFCVt8YQpVYphHyT2/fLlxt1TXEYlJIPMEmziHzqU0rwftsQvGb5SU0n2QWEV7DanpNCF9IUXzPls4+7evcag7IjfwSHPIh5VzzsAbtdaV9NaVwNwB4D3crRVuRFBfvz2gqZ+/ah3t2EPECVKMKpnjx7Bx7dX9Yr//6uv8v9ppzGJSkqKIWOZTWRl0R30gw9Yt3lzs55AVvKmpLCuzCR69zbhoytUoM1g7Vr+bt7c9MO/tmDePNo0pM8HD/L7ssvCc/w6ODjkWsRD/Ie01tPkj9Z6OriCNy4opfIppeYopb4O/a+ulPpdKbVcKTVaKZUc6xi5ArYff2oqJXZRoRQuTEm5bVvvPtHi8WRmkiz/+1/+D4rj89JL/G7VCnj4YaZKLFCARC51Dxzg6t0NoSgab79N10zAK/HLYAFwZiGLufr1o/6+UiXWmT49OLaQDGLi0XPqqfREKlGC+Xc7dox1BR0cHHIJIhK/Uqp5KBLnVKXUm0qpc5RSZyulXgMw5TDO0Q/AYuv/MAAvaq1rAdgJ4MYjaPexh6hrEhMpFW/dylDEAKX19HQTM19Qrx6NsAUK0CDctq1Z9ZqYSL9520AsJCuG2oTQ7UlP5yrdrCx+P/usl/jleH6UK8fzly9PyTw7mx+/nWDiRM4otKaaZ+DA8DbJYCTE/8UXwAMPHNYldHBwyB2IJvE/H/o0AVAHwCMAHgVQH0DTeA6ulKoEoDOAt0P/FYD2AMaGqnwA4JLDbvXxQI0a1McHhV5esoR+/J/5QhiddRb9+EuXpqF12jRD9AkJ3uQozZsbT5vevWlUlbg+48ZRxWJn14pE/P/5D8NHAECTJjx/tWomvo7fQDxuHBOqPPoo+2Ybd6dP54wAoDcPEB6Lf/lyhnnw993BwSHXIqJFTmvd7igc/yUAA2ECvZUEsEtrLaqidQAqBuwHpdTNAG4GgCpVqhyFpvxL9Oxp9OJbtjA5yh13UOqPZNy1EWQEtQ2xr7zirZ+REezH36MHV+M2bswBQlJBigF4wwYTN19rM1DVr88FWFp7iX/LFu95beKXBWUA0Lo1M3nJea64gjaBW29lFFIx+jo4OOR6xKPjPyIopboA2KK1nhWzcgC01iO01i211i1Lly59lFv3L3HwIFUdsvApkjvn99+TYH//PZj4bddLG998Q7dRmR3IPgcP0o9/wQJK6e+8w5nGaacZ9ZAdGG74cBL5jh00wI4bxzaefjrDSQS1WYhfa+CNN4yr6MqVnHWIcXrFCpY5rx4HhzyHnHxbzwRwkVLqQjBlYxEALwMoppRKDEn9lQCsz8E2HD3cey9VH7/+Gtmd00+iEk8nM9OoWuzVvRddZBKinH8+vXFeecXkth01yhzHPp9NsiVKMDyzwA4Mt39/cPx+8RYCwmcpQvzZ2VTvPPYYB4k33qA6R9rk3DkdHPIsokr8SqkEpVTrIzmw1vp+rXWlkAtodwCTtdbXAvgJQCh1E24A8OWRHP+YY9Mmk4Ak0gIuP4naq3MLFABatvSGTH7vPWbpAuhlIxK+HF8GiyB9/rvvchBZuzb8nLYfv1I83siR9ETauNFbX84lhuT77wcmTAgndDmueAo54ndwyLOISvxa62wAr0arcwQYBKC/Umo5qPN/5ygfP2eQmWlI0i/xV6vGAG1+W4Qdj6dBA8b4adMm+PhBrpMSkqFBA3rblCvH/4mJJOrsbBp8TzmFydgB/j77bP5OT6cxVimS9PbtbMtZZzHkM0DDc/PmJglM9eo0CkeKLdS3L7+F+EuUYLweWWzm4OCQ6xGPmPajUupyAOO0Fkvi4SEU0XNK6PcKAKdGq58rYRtbk5NJ9oUK8X/t2sATT4TvEy0eD0CCrlKF0ri9gEtI9ssvGe+nRg0S9d69JP/ChU3dPXsY3lkCtt15Jz+AScICeLNmrV3LNksb7JAPf/4J/PWXyafrH4xEVXXaaRxEatUyA5SDg0OeQDzEfwuA/gAOKaX2A1AAtNY6QnziExS2xJ+QQMOmID2d0SlLlvTq8MuWpYRcvTqDmt16KxdYidvmvn3eePxCshJdU9w509OZu7dyZaOq+fRTfsugEqRqOecck1HLJn5/PP5hw9jWnj1pAH7+eeCSS7zH9RP/009HvlYODg65GjG9erTWhbXWCVrrJK11kdD/k4v0AbozyoItP8aMIXHaidUBetq8/DLdInftAubMMWEUAK875/nnm1AJLVqQsE87jf9nzaI7pm3EjeTH/9JLVLtoDVx1FdMs2tuzsryzi7/+Au67j/H/AaPCKVaMbqHixdOpE7/9HlaTJrEfErLawcEh1yOe1IsKwLUAqmutH1dKVQZQXmv9R463LjdBiFFw+eVUk/TtG9m4qzWJPV8+4+ceyZ1TErYIguLxb97MRCv/+Q9z3PbrZ1IuSp30dJMiMSuLRJ6czFnHddcxkYw9uxCffRlAZGagtVEHAca+IIHh7riDC9cGDOC5EnLMM9jBweEoI5639TUAZwC4JvR/H46+wTfv4ZdfmH4QiOzOuXUrjatvvRV7AZeNZcuoz//pJ+8+u3fTiLtuHY24L73EAeDcc00aSNugfPHFTIQOcBbx4YdA1aocPPzx+OUcQvzbtzM0hISG3raNsx5Z1LVjB20FzqvHwSHPIZ639TStdXOl1ByA8fnzTGC1o4mzzqKR9cMP+d/2l4/HnTOIIDt2JMEDJORevRg6QWL+DBjg3cdW62Rn83+tWoy1E3TO9HRjgLbxnhVcVQYK0d0L8W/cyJg9ZcsynPPs2QwGJ6oe587p4JBnEY/Ef1AplQ+ABgClVGkA2dF3OQGxfbshXsArrUeS+G3pu2RJGltFNQMA/fsDjzzC35s3m+MLeftJ1Sb+yZO5atevW7fPaXv1TJvGtQRTpnjr+422PXsCS5eGZ/8Shy5ZXJaUZOL+2PUcHBxyPeIh/uEAPgdQRin1JIDpAIbmaKtyIzIyvMRu6+fbtaOXi0jLdh3Zt21bqm4ixa239e5Cst9+y+9KlYARI8wq38REU/fnn3nMP0Iml1q1aNRVivHzhfgTEtiOzEx6DUmO30KFmAlMkqWXLEn1kbRBzrNkCb8luqhI/DVqUN8v3kMODg65HvGkXhyllJoFoAPoynmJ1npxjN1OPNjGVgBo2JBBygDgjDP48SNfPn6C4vEADPT2ww+Me2N72oh6pkjIeap4ceCmmyiJ164NFC1qJPRdu7wxc9q350eCr8lKYdudc/t2Y9SVTGCChQsZj//00/lf2tSgAb9l8GnRgv1q0cLE/XFwcMgTiMer53EAPwN4X2udlvNNyqXwS/yjR5vfW7ZQrVKtWvh+Dz5I+8DYsQyHMGUKUDEUkFQpunf6PX7KlAEWLTKzg4wMul1Wq2Yib4qKR9Q/tl8+wMHhyy95bsAQv7iTRlLNzJzJuERjx3rrXXklMHcuV/UCHIhuuokDTnY2jx8UstrBwSHXIR5VzwoAVwOYqZT6Qyn1vFLq4hxuV+7D1VfTqyUIEsgsCEOGAOedx4Vay5cbFQpg4t9oTVfLU04x2+rXNwPN5s3MePXVV2a7EHKkBVz58zMInF/ijzRQ+I9bvz4NvOedZ7YJ6dt47z2eSzKAOTg45HrEs4DrPa11bwDtAHwE4MrQ98mF4cO9+XL79TPx+e1VvX7s2GFy4wLh7pwSufPDD0nUQZB95s6lgXjmTM4aHnzQzDJiGVdLlWK0TYknFKm+7cdfrlx44hXB0KE8pvQr0kDi4OCQ6xCT+JVSbyulZgB4HVQNXQGgeE43LNfjn38YIwfwxvHxo2lTxtmJtIArUhwfG3bSlKlTGZenQgXGBzrnHIZXkPAOkVCuHPDaa8zf27u30dX7IcS/bBk9juzQFDYyM722AufV4+CQZxCPqqckgHwAdgHYAWCblUHr5IDEtrHj09junNEkfvH+CZL4W7emR8y2bXS1FM8aP4LUOocOcSBo2hT4/HOuA4gGrUnSyclM4CIhGPwQ4v/7b6qw/GEo/PWi5fx1cHDIlYhH1XOp1vo0AM8AKAbgJ6XUupxuWK5CRgYNmLY6w3bnjCbxywBRvTpXzNr1OndmLJ9Dh6JL/kF+/CtWcHHVuHHx9WHzZp57xIjo9Tp0YMiHhg295/YjXmOxg4NDrkM8qp4uSqlhAN4FI3VOBvBwTjcsVyEop64t8d9yS3gsH4EMEBdfDIwf782GlZ1N4oylLklNBT75hIHcAA5AUvfDD7ma1p+QxQ+pv3o1938nQhqElBSqkST2Tizib9aMQd4izXgcHBxyHeIR0zoBmAbgZa31yem6EZRTt359EwO/Y8fI+0aKxwMwneEdd5jFV5FINjER6N6dq2+bN/fG49+9m6qiWEHSbAk9Ozty/TVrGDBObAaR2tSoEY3b7dtHNko7ODjkSsSzgOtOpVRZAK2UUs0B/KG13pLzTctFCJL4Bw0yv5csIbHWrBm+7513cr9nnmEWrY0bjb+7HC8ttDwiEslqzVW/VauapCkSlz+We6YgXtXM+vV0QZWUkJHqnXceP2lp9FyyU0o6ODjkasSj6rkSwB+gG+dVAH5XSl0Rfa8TDAUL0n2zUaPg7T17UnIPQo8eDKGwZw8lc3uRk8wg8ucHbr+dydYjoUMH4IMPzP9I8fgjIV7il3oXXMAAcpH6LHjqKRMZ1MHBIU8gHq+ewQBaaa1v0FpfD6ZNfChnm5XLUKoUQyCfamWMHD7chDGIZtzdvJl6dTsWj0D2KVoUePVV7/FtKMV9v/qKCdtXr2ZYh6efpnsmEJv4ExMZbVPOEWmGIMSfnc1zRKo3ahSPuXSpM+w6OOQxxPPGJvhUO9sR34Bx4kC8bgoUMLrxnTuBxYtJkNHcOW+7jT7xHTsGr64FKLUfPMjtkcIeJCYCmzbxk5VFI+ygQcCECdwnlnFVKaZY3LiRaxDq1Il8HoAhIaZP5yKxoABsCQm8Lvv3O+J3cMhjiIfAJyilvldK9VRK9QTwDYBvc7ZZuQx//kl1j0SmBIy0npkZ250zM9MbhE1Qty7wwANMrJKc7A3J4EdiotePPzubBH7qqfTsibTC1sauXQz89tJLJqGKHyLxz5kDvPgi8wJHq+eI38EhzyEeP/57AYwAcEroM0JrPSj6XicYIrlzyrZYC7gyMuiNc9VV3m316zM8ctmy/B+NQBMTvfr8rCyGYH7jjfj7UaUKA8Wlp5tkL37UrEl7xOWXR2+TI34HhzyLuFQ2WuvPtNb9Q5/Pc7pRuQ5B7py2xD98OCNVBkEk/uuuC188lZXF9IyxvHoA4NNPGWpB6kndhx+mCsoO/hYJSUlU3xQs6A3FbCNfPm+ymFjE36kT1UEODg55BhGZRim1F6GsW/5NALTWukiOtSq3IUjir1GDK28TEhgrJxKixeOZNYtx78U1NBrxd+xI6XrBAg4mCQnU20sMoHhCIicmxvbq2bePMXrWrYter3p1Jn2/7jr+dnBwyDOIyDRa68KRtp10CJL4L7yQH4CB06pUCSbAbt2o5rn5Zi7AWmzlsJHjpafzOxrxT5wIVK7sTZ2YmGiMwvEgKSm2+2dmJtcbSF8iefXUr8+ZzpYtHCQqVYqvDQ4ODscdJ5d3zpGibl2GZChXLnh7hw7A228Hb2vThiqa/fvDM3HJDKJsWUr9EjI5CDffTKK1IeQdb0jkpKT4/fhvv512gKJFg+tJsve77gLOPju+8zs4OOQKOOKPBw0bAo8/7l2o9P33jGkzfz7VLZGMu5s3U6UTJJnLPlWq0Cc/KIOXIDGR3jt165oB5OWX6dUTr8Q/YIBRS8Ui/oMHqT6KpEKaOZOeRF9/7Yy7Dg55DO6NjQdpafyUKmX8+LOy6BO/cyf/R3LnfPddumx27RqZ+Pfu5XGKFImdGevvv00bbrqJ+Xh/+y2+ftxxBxdclSpl8gX7IcQ/bhwjgL7xRnCb7JXDjvgdHPIUnMQfD959l+qYHTtMmU3a9n8/ZEBITw8nyGLFmMlq0ybGulm4MHIb7H2FiBcupMT/3HPx9WPTJp7ziSci6+Tz5aOUP3Mm1VeRgrnZMwNH/A4OeQqO+OOBqFZsqV5+xyJ+KT/nHCYst1GoEP3qJR5ONAIVshdiBoBzzwUefdQkeYmFrl2ZO3jLluj7ZGXRRdM+lx9C/LHa7eDgkOvgiD8eiDumTe52gLXx4xnULAgyQPTqFR6zX2umNtwSiogRjUDfeQfo0sVbJzGRyc6DooIGISmJUT7LlqUaJxISEoJjC/mPBXAwu/fe+M7v4OCQK+BEtXggEr8t5ZYuTVfNKlWAFi0i7ysDxP79JHpbgs7O5noAIe5oRNuiBXDZZd5Zh9Q/HHdOQTRPoP79gdGjox+3RAnOVq64gu6qDg4OeQZO4o8HGRkkTVvfXaMGV9PWrs0YOxIf3482bRjJsnv3cLfHfPn4iceP/4cfgIoVgc8+M2X/hvij7TNyJLBhQ2RXToBG5aFDaZCONntwcHDIdXDEHw86dWLc+SCsWMEMVJE8a2rUAK65hq6PQWSbnEwd/xNPmKxXQRg6lB8bh0v8fjVRJCQlAX36MClLJGRnM79A9+6s6+DgkGfgiD8enH02cM893rL16yntSvydSMbdnTu5snfHjmCyzZ+fq2AffJDHi4TERB7Hjqo5bBhDJsdL/LffTiOzHC8SkpJMHuBI2LuX6q5Zs5xx18Ehj8G9sfFg0yaqe6pWNWWJiSS/Xbv4P5If/59/mpy89v6C5GQGaluzhi6WkdwnhVy3bTNlF13E0Mm2m2k0XHQRwz788IM3EJsfSUnM9lWwIBPERKrjb5uDg0OegJP448GgQeH6+XjdOYOMsTaefpqLw6pWNccKQlB4hrlzOQPo1y9a6w3WrTMJXFJTI9cT3f4330Su44jfwSHPIseIXylVWSn1k1JqkVJqoVKqX6i8hFJqolJqWei7eE614aghIyOc2P3EHy0RC0Cp/9JLw7f36gWcdRZ/x4rH769z662M4RNtwLBx331A69ZM4BIpHj9A9U2PHvG1J1a7HRwcch1yUuLPAnCP1roBgNMB3KGUagDgPgA/aq1rA/gx9D93IzMznNiF0Js1o298/frB+8p+t99Okvdj2TKGUQCiE+jzz1O69xPub7/Rvz8eJCXR5lCrVmwdflZWdJdPpbi9USPgzjvjO7+Dg0OuQI6JalrrjQA2hn7vVUotBlARwMUAzglV+wDAFAC5O6NXUIatfPnozdK+vTGYBkH227qVvvz+FIndujHNIRCd+GvWZJTP1atNWU65cz7yCF1VJZl8JDz1FENGuOicDg55CsdEx6+UqgagGYDfAZQNDQoAsAlA2Qj73KyUmqmUmrl169Zj0czICMqpqxTw1lskx08+MVm0/KhaFfjiCwZIu+WW8O32cSMZdgHgxx/pO2/H5fk3xB/tXJMn8ztSGGrBvffSALx8eXznd3BwyBXIceJXShUC8BmAu7TWe+xtWmuN4Cxf0FqP0Fq31Fq3LF26dE43Mzr69g0OS6A1Cfmaa0yUTj8KFwYuvpghnSO5cxYowBDL0bJoffgh8NBD3rIjJf5oMXjkeG3asG/RsGYN6z35ZHznd3BwyBXIUeJXSiWBpD9Kaz0uVLxZKVU+tL08gC052Yajgq5dgw2zFSoYKT6ScTcjgzHr166NvICrWTMOLtGQmAisWgW0a2fKHnnEbIsH11xDl9FY9ePx4weAVq1cWGYHhzyInPTqUQDeAbBYa/2CtWk8gBtCv28A8GVOteGoYdEikq4fNuFFcudMS+PA4a9v77d6NbBkSfQ2yL52Fq8zzqC6qUeP6PsKTj0VGDOGs4toSEqi0ThW8DWZQTjid3DIU8hJif9MANcBaK+Umhv6XAjgaQDnKaWWATg39D9346qrgkkwKEyzH/aAEESQ/ftTT3766dHbEKTWmTOHsYL84Z4jYf16unHefHP0epJp7I8/otdzxO/gkCeRY8SvtZ6utVZa61O01k1Dn2+11tu11h201rW11udqreNcdnocEWTcBbykHon4pbxIEZOc3Ub79sD558cmz6AFXMOGAZ07A9u3R99X8N57XDMwb1589eJRCdltc3BwyBNwK3fjQZA7J0BSb9WKknG0lIlKcXVtp07h25cvB6ZPj02ekuzd78eflgbcfXd8/ZB943G/jOXHD5D4k5KAnj3jO7+Dg0OugBPV4kEkif+GGyjJt2oVeV+luO/y5cCePeGB2J55hhJ4xYrR21C6NHDXXfQAEggxH65Xjw50pDJ4+WXq+CMllxE89BAjijZpEt/5HRwccgWcxB8PIkn8d98N1KlDV8to+P57+vo/+2z4NhlQYpH3tGlm5iA4UnfOWMQ/fz6/q1SJXq97d347P34HhzwFR/zx4M03geuuCy8/cIDbBg6Mvn+bNvyO5NUDBA8KNiZOZHA1GzlF/ElJNPC+8Ub0esuXc1YwalR853dwcMgVcMQfD668EmjZMrz88stJepEMu4IvvuB3JD/+pKTYnjmy7xVXmDLR7cdL/B078lwlS0avF68fvwyGsWwBDg4OuQqO+GMhO5tB2NasCd8mhB/Jh18gQcwiSfwHD8b2tAnat149zjguvzz6voIaNbgad/jw2OfauRN4/PHo9WT1r/PqcXDIU3DEHwsZGXS5/Pjj8G1C+LEkfomLE0SQ3bpxe6xFWEH7zpvH+D3xBknbtIleQB06RK9Xvjy/ly2LXi9avxwcHHItHPHHgqyUDSL3eCV+yXYVFMWzfn3698caPILI9eOPubhs8+bo+wqmTaNOXlRPkXDvvczUFYvQncTv4JAn4Yg/FjIy+B1E7vnzk/zGjQvfZqNwYfrwt2gRvm3NGsbyOXQo+jFuuYW6dDshuxDuf/8bfV+BGHd7945dNysrNqFLW4LiGDk4OORaOFEtFqJJ/BddRD17tWrRj5GQwDSJu3Z5iRsAvvuO37t3Rz9GwYLAww97E76IqiVe46odljkaRo0CNm6MnqULYAL6m28OziXs4OCQa+Ek/liIJvF37Uq3x88+i36MJ56gfn3s2PBtctxYJDtzJgeh8883ZaJqiRZb34ZI8LHcOdev53esRWWnnkqX1qAAdg4ODrkWjvhjoVw54KuvvOGQBXv3Uh/+7rvRj1GrFr8juXMCwAMPRD/GvHmMe7/lX0SxPhw/fiB2KIgZM2hjmDLlyNvk4OBwzOGIPxYKFmRO28qVw7c9+ywNq7EMsxMm8DvaAq7WraMfQ/a9z0pRfO21/Panc4yEpk353axZ9HpC/LF8+YcO9bbNwcEhT8ARfyzs2EGJPyj9o5B2LFXL66/zO5rEHysEctC+1aszkmasmDqCEiWAqVOBl16KXk+I/8UX4zuuI34HhzwFR/yxsHAhjbhBC6xiSfqCaP7uZ5zB748+in4M2ddOmbh8OaVyUSXFwq5dVBXFMkZLrt1t26LXc+6cDg55Eo74YyGWO2c8qF6d30HunKVKAY0acSFWNATNKn74gV41sRZaCVavZmiIWDF4JGNYLOOuI34HhzwJR/yxEM2dU4j/iSeiH6NcORK8DAA2duwAFiyIvQirSxd+2yGQd4Ry2Hz+efR9BaLCidVeWVMQi9AbNOB327bxnd/BwSFXwBF/LEST+Fu3Bl54gQnMoyEzk2qTIF99cYWMFasnKQkYMiR49W+8iNeP/4cf+L1iRfR6t9zCVcAlShx5mxwcHI45HPHHQjSJv3FjBjP788/ox5CUi0EGXDlurJW7//zDFIux1C/REC/x793L71KlotcrWZJt2rDhyNvk4OBwzOGIPxbatQMmTw5enbp3LyNYfv999GNIGORo7px9+0Y/xpo1jKr599+x2xwJ8eriJUvYZZdFrzdhAnDjjTSAOzg45Bk44o+FMmVI/gULhm8Two+VgWrGjMjbROKvWzf6MURN9PbbpqxjR37H69VTpgy/L744er14/fjHjOG3zIocHBzyBBzxx8KSJYyCKbr+I8GkSfwOUueIxB/Lj19gr7pt1IhhIOI1riYnM0LnU09Fr7dzJ79HjoxeT7x6Yq0EdnBwyFVwxB8L333HFbIHDhz5MSSIWhDxixooVpC2IGzfThfNeHX3WVnG9z8aChXid6zgb474HRzyJBzxx4JI+vEu1grCaafxOyjsQ1ISwzZL8pNIEJK1F3DNmMEImXPmxNeOrCygVy8TaiESJALoqafGd1wHB4c8BUf8sRDNq0cMvtdcE/0Y4r8fZCfQmkbiuXOjH0P89y+5xJQtXcrvWF5FApkZjB4dvV68fvxiY6hZM77zOzg45Aqc+EsuW7YE9u/3ll11FfDIIwyF3Lhx+D69egEDBpCQX3mFq2aD1B41agBvvRWciN2GnF/cJIMwbVr0Y5QsyTUD9upfGYziVfVIH2KpcMRY/fPP0VNCXn450LBh8MI0BweHXIsTn/jr1Qs3zNpqFVl9aqNsWX4nJHDBVNDgAJCM+/SJ3YZu3YB167xJVARKkdBj5cEtXjw8TPI993Aw6dcvdhsE8Zzr3HMZBXTAgOj1KlTgx8HBIU9B6TxgmGvZsqWeOXPm8W6Gg4ODQ56CUmqW1jpMJeF0/A4ODg4nGRzxOzg4OJxkcMTv4ODgcJLBEb+Dg4PDSQZH/A4ODg4nGRzxOzg4OJxkcMTv4ODgcJLBEb+Dg4PDSYY8sYBLKbUVwOrD3K0UgG050JxjCdeH3AHXh9wB14fDR1WtdWl/YZ4g/iOBUmpm0Iq1vATXh9wB14fcAdeHowen6nFwcHA4yeCI38HBweEkw4lM/COOdwOOAlwfcgdcH3IHXB+OEk5YHb+Dg4ODQzBOZInfwcHBwSEAjvgdHBwcTjKccMSvlOqklFqqlFqulLrveLcnHiilKiulflJKLVJKLVRK9QuVl1BKTVRKLQt9Fz/ebY0FpVQ+pdQcpdTXof/VlVK/h+7HaKXUv8han/NQShVTSo1VSi1RSi1WSp2R1+6DUuru0HO0QCn1iVKqQF64D0qpd5VSW5RSC6yywGuviOGh/vyllGp+/FpuEKEPz4aep7+UUp8rpYpZ2+4P9WGpUqrjsWrnCUX8Sql8AF4FcAGABgCuVkoF5FbMdcgCcI/WugGA0wHcEWr3fQB+1FrXBvBj6H9uRz8Ai63/wwC8qLWuBWAngBuPS6vix8sAJmit6wFoAvYlz9wHpVRFAH0BtNRaNwKQD0B35I378D6ATr6ySNf+AgC1Q5+bAbx+jNoYC+8jvA8TATTSWp8C4G8A9wNA6B3vDqBhaJ/XQhyW4zihiB/AqQCWa61XaK0zAXwK4OLj3KaY0Fpv1FrPDv3eC5JNRbDtH4SqfQDgkuPSwDihlKoEoDOAt0P/FYD2AMaGquTqPiiligJoC+AdANBaZ2qtdyGP3Qcwl3aKUioRQCqAjcgD90Fr/TOAHb7iSNf+YgAfauI3AMWUUuVxnBHUB631D1rrrNDf3wBUCv2+GMCnWusMrfVKAMtBDstxnGjEXxHAWuv/ulBZnoFSqhqAZgB+B1BWa70xtGkTgLLHq11x4iUAAwFkh/6XBLDLeuhz+/2oDmArgPdC6qq3lVIFkYfug9Z6PYDnAKwBCX83gFnIW/fBRqRrn1ff9d4Avgv9Pm59ONGIP09DKVUIwGcA7tJa77G3afrd5lrfW6VUFwBbtNazjndb/gUSATQH8LrWuhmANPjUOnngPhQHJcnqACoAKIhw1UOeRG6/9rGglHoQVOuOOt5tOdGIfz2Aytb/SqGyXA+lVBJI+qO01uNCxZtl+hr63nK82hcHzgRwkVJqFahiaw/qy4uFVA5A7r8f6wCs01r/Hvo/FhwI8tJ9OBfASq31Vq31QQDjwHuTl+6DjUjXPk+960qpngC6ALhWm8VTx60PJxrx/wmgdsiDIRk0nIw/zm2KiZAu/B0Ai7XWL1ibxgO4IfT7BgBfHuu2xQut9f1a60pa62rgdZ+stb4WwE8ArghVy+192ARgrVKqbqioA4BFyEP3AVTxnK6USg09V9KHPHMffIh07ccDuD7k3XM6gN2WSihXQSnVCVSBXqS1Trc2jQfQXSmVXylVHTRU/3FMGqW1PqE+AC4ELef/AHjweLcnzjafBU5h/wIwN/S5ENSR/whgGYBJAEoc77bG2Z9zAHwd+l0j9DAvB/A/APmPd/titL0pgJmhe/EFgOJ57T4AGAJgCYAFAEYCyJ8X7gOAT0C7xEFw9nVjpGsPQIEefP8AmA96MeXWPiwHdfnybr9h1X8w1IelAC44Vu10IRscHBwcTjKcaKoeBwcHB4cYcMTv4ODgcJLBEb+Dg4PDSQZH/A4ODg4nGRzxOzg4OJxkcMTvcFJBKTUj9F1NKXXNUT72A0HncnDIbXDunA4nJZRS5wAYoLXuchj7JGoT7yZo+z6tdaGj0DwHhxyFk/gdTioopfaFfj4NoI1Sam4ofn2+UNz0P0Nx028J1T9HKTVNKTUeXAELpdQXSqlZoZj3N4fKngYjYs5VSo2yzxVaXfpsKD7+fKVUN+vYU5SJ/z8qtNrWwSFHkRi7ioPDCYn7YEn8IQLfrbVupZTKD+AXpdQPobrNwXjqK0P/e2utdyilUgD8qZT6TGt9n1LqTq1104BzXQauCG4CoFRon59D25qB8dg3APgFjKsz/Wh31sHBhpP4HRyI88HYL3PBkNglwdgpAPCHRfoA0FcpNQ+MrV7ZqhcJZwH4RGt9SGu9GcBUAK2sY6/TWmeDy/mrHYW+ODhEhZP4HRwIBeA/WuvvPYW0BaT5/p8L4AytdbpSagqAAv/ivBnW70Nw76TDMYCT+B1OVuwFUNj6/z2A20LhsaGUqhNKwuJHUQA7Q6RfD0yVKTgo+/swDUC3kB2hNJjl69hEYXRwCICTLhxOVvwF4FBIZfM+mDugGoDZIQPrVgSnJ5wA4Fal1GIwouJv1rYRAP5SSs3WDEkt+BzAGQDmgVFYB2qtN4UGDgeHYw7nzung4OBwksGpehwcHBxOMjjid3BwcDjJ4IjfwcHB4SSDI34HBweHkwyO+B0cHBxOMjjid3BwcDjJ4IjfwcHB4STD/wGGKNnTgrkO9gAAAABJRU5ErkJggg==", + "image/png": "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", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] @@ -145,7 +154,7 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -154,7 +163,7 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -163,7 +172,7 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -172,7 +181,7 @@ }, { "cell_type": "code", - "execution_count": 63, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -181,7 +190,7 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -190,7 +199,7 @@ "13" ] }, - "execution_count": 64, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -201,7 +210,7 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -210,7 +219,7 @@ "Text(0.5, 1.0, 'LP-Relaxation problem_t_pricer_0_2.lp')" ] }, - "execution_count": 65, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" }, @@ -237,7 +246,7 @@ }, { "cell_type": "code", - "execution_count": 66, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -287,10 +296,10 @@ ], "metadata": { "interpreter": { - "hash": "ca2525eab514af7f1335f4a0de66f0c96f9a7997643233c6c1749b1bac977781" + "hash": "38b34d0cb5915ebd706651697a9bad136b66d87bcc8c7f5d873fb1545f3d61bf" }, "kernelspec": { - "display_name": "Python 3.7.10 64-bit ('base': conda)", + "display_name": "Python 3.7.11 64-bit ('scip': conda)", "name": "python3" }, "language_info": { @@ -303,7 +312,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.10" + "version": "3.7.11" } }, "nbformat": 4, diff --git a/iter.txt b/iter.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/lowerbounds.txt b/lowerbounds.txt index e66bff0dc68bfc51d3f9df4f00dbe963f7a8ba81..2aa87b782f9b97b49f75845ae77419d8fb71d0e5 100644 --- a/lowerbounds.txt +++ b/lowerbounds.txt @@ -1,51 +1,651 @@ -50 -1.000000 -30.000000 -60.000000 -1.000000 -30.000000 -60.000000 -1.000000 -30.000000 -60.000000 -1.000000 -30.000000 -60.000000 -1.000000 -30.000000 -60.000000 -1.000000 -30.000000 -1.000000 -60.000000 -30.000000 -1.000000 -60.000000 -15.000000 -15.000000 -15.000000 -15.000000 -15.000000 -15.000000 -15.000000 -15.000000 -15.000000 -15.000000 -15.000000 -15.000000 -15.000000 -15.000000 -15.000000 -15.000000 -15.000000 -15.000000 -15.000000 -15.000000 -15.000000 -15.000000 -15.000000 -15.000000 -15.000000 -15.000000 -15.000000 -15.000000 +969553.451655 +911613.111366 +947154.171486 +943263.213453 +961592.718970 +975146.613930 +989344.620330 +999024.176262 +1008350.920374 +1020026.835179 +1023789.204847 +1037572.779662 +1043550.340114 +1051710.589431 +1058427.147271 +1063293.445488 +1072473.640624 +1076886.141898 +1086729.286001 +1091780.455877 +1094896.809334 +1101263.149421 +1103431.934686 +1111036.222705 +1115860.276809 +1119922.138092 +1124960.296185 +1132123.876662 +1133652.768532 +1136144.901815 +1141097.358296 +1143101.259766 +1148002.683780 +1153159.516056 +1153338.723749 +1158674.315675 +1162297.618028 +1164160.056187 +1168498.610213 +1169729.460704 +1173952.832273 +1178270.501656 +1178878.876044 +1181975.581725 +1184448.929978 +1188609.544868 +1188830.345998 +1194249.329747 +1196132.545007 +1197416.779761 +1198769.130753 +1203012.987614 +1204208.203188 +1205848.372438 +1210379.200196 +1210910.524724 +1212408.050573 +1215354.767561 +1214580.986949 +1221664.782381 +1220831.170901 +1219416.355717 +1227249.575602 +1224533.491777 +1228388.071534 +1229978.533500 +1231536.910022 +1233839.968237 +1235535.554008 +1233975.317661 +1238185.735747 +1238853.909670 +1238994.144600 +1243152.502070 +1242133.831560 +1245744.530869 +1245205.494079 +1248084.273841 +1249241.471795 +1250241.022613 +1250118.511084 +1253178.719159 +1253930.665989 +1253037.031825 +1257940.562495 +1257422.828523 +1258452.530575 +1259552.124552 +1259972.856173 +1262403.465110 +1262900.868471 +1263814.432308 +1265019.857869 +1266205.328629 +1267538.210346 +1268243.082402 +1268828.566504 +1269633.765048 +1271300.981826 +1271570.232456 +1272547.671274 +1274184.663697 +1275164.375242 +1275586.924129 +1276457.997280 +1277820.536363 +1278275.750896 +1278990.490910 +1280564.976832 +1281073.034072 +1281705.488007 +1282343.981097 +1283767.327581 +1284804.105702 +1284160.362654 +1285710.159096 +1285496.091083 +1288033.554846 +1286971.082761 +1288215.915504 +1289848.363697 +1289030.663945 +1290973.188680 +1290492.003343 +1291848.086971 +1292324.408432 +1292487.812085 +1293609.540066 +1294633.223598 +1294686.072122 +1296050.502384 +1296017.253994 +1296937.429607 +1297950.589067 +1297811.840367 +1297651.375125 +1299574.754722 +1299551.658085 +1300320.153238 +1300499.048157 +1301639.480237 +1301180.641490 +1302433.129828 +1302600.605011 +1303916.660353 +1303446.451767 +1304125.629501 +1305213.350109 +1304806.278512 +1305683.240203 +1306274.999014 +1306391.252107 +1307002.044072 +1307220.398557 +1307959.594172 +1308102.980862 +1309381.262877 +1308136.300573 +1310254.588455 +1309472.664213 +1310411.849449 +1310747.333112 +1310694.406371 +1311742.132396 +1311729.769803 +1312201.479464 +1313017.181496 +1312766.479616 +1313320.013192 +1313754.621536 +1313839.823459 +1314132.963333 +1314707.356195 +1314971.923391 +1315150.783123 +1315833.627176 +1315961.754241 +1316377.703985 +1316347.105593 +1316843.151918 +1317357.843619 +1317507.001805 +1317896.556602 +1317820.862070 +1318516.372697 +1318621.136050 +1318859.567895 +1319000.843419 +1319567.569621 +1319691.606792 +1319940.385938 +1320349.870713 +1320387.194990 +1320463.880387 +1321216.290686 +1320844.010067 +1321816.561185 +1321394.309372 +1322042.897186 +1322074.670469 +1322470.617749 +1322540.369606 +1322624.341772 +1323133.150634 +1323192.112008 +1323472.765681 +1323644.893299 +1323794.986011 +1324076.938053 +1324264.958891 +1324442.566244 +1324715.952118 +1325062.688091 +1325001.755249 +1325287.710175 +1325353.478519 +1325680.383714 +1325820.296257 +1325875.913080 +1326046.872352 +1326126.935796 +1326501.345304 +1326564.562640 +1326911.515231 +1326768.239443 +1327096.455160 +1327107.467419 +1327515.664580 +1327380.722438 +1327775.196893 +1327787.208340 +1328041.546465 +1327851.807392 +1328410.976074 +1328197.384069 +1328564.688747 +1328678.671736 +1328775.978795 +1328887.841322 +1329055.036630 +1329044.223776 +1329348.721319 +1329225.030464 +1329592.064811 +1329533.261170 +1329768.225012 +1329834.781920 +1329959.481059 +1329998.049238 +1330194.244360 +1330258.236306 +1330297.805555 +1330487.920227 +1330499.755440 +1330650.857400 +1330761.816419 +1330876.275775 +1331012.256430 +1330986.690295 +1331069.452240 +1331219.087946 +1331299.061943 +1331394.712258 +1331437.910522 +1331569.509084 +1331590.246112 +1331707.442314 +1331729.271918 +1331925.588798 +1331901.449987 +1332020.857836 +1332045.244544 +1332216.620575 +1332139.685550 +1332404.915399 +1332320.827795 +1332457.490111 +1332492.645303 +1332570.142631 +1332660.381723 +1332668.388465 +1332824.223489 +1332794.470086 +1332904.600899 +1332958.272951 +1332971.471139 +1333096.368669 +1333076.489937 +1333173.559068 +1333216.631336 +1333278.178399 +1333354.357143 +1333373.487941 +1333417.063195 +1333474.826859 +1333531.509974 +1333574.186483 +1333626.861353 +1333654.696217 +1333721.697539 +1333758.983065 +1333810.811883 +1333849.718520 +1333894.968378 +1333920.772542 +1333966.525451 +1333983.140540 +1334074.116580 +1334075.255517 +1334114.825615 +1334170.619656 +1334195.612049 +1334245.668750 +1334258.050190 +1334312.563191 +1334327.017952 +1334376.638630 +1334414.628163 +1334428.952985 +1334473.878946 +1334507.176953 +1334513.504906 +1334560.653526 +1334586.827564 +1334618.555183 +1334612.959942 +1334693.196304 +1334682.883282 +1334735.514998 +1334735.834499 +1334776.229684 +1334801.656589 +1334819.280544 +1334852.898440 +1334861.696422 +1334889.366810 +1334926.491751 +1334944.734357 +1334952.108667 +1334987.553022 +1335005.212554 +1335028.595335 +1335027.743058 +1335070.312102 +1335089.019878 +1335106.853458 +1335124.059780 +1335148.839438 +1335147.964581 +1335184.533971 +1335194.164261 +1335222.948855 +1335225.977660 +1335254.500253 +1335247.820711 +1335280.710728 +1335303.400319 +1335311.813631 +1335333.072998 +1335342.195150 +1335368.015817 +1335366.553146 +1335396.219658 +1335386.985085 +1335415.334271 +1335427.333966 +1335432.422527 +1335461.464101 +1335452.951670 +1335476.476959 +1335489.220585 +1335501.122677 +1335501.249034 +1335519.238392 +1335528.943228 +1335549.405702 +1335553.446684 +1335567.073889 +1335578.131084 +1335579.934689 +1335589.291297 +1335611.335049 +1335602.160916 +1335628.207138 +1335613.353056 +1335650.123719 +1335637.064103 +1335659.458265 +1335661.553968 +1335672.845075 +1335685.068047 +1335685.039485 +1335694.732548 +1335705.752318 +1335703.643450 +1335723.665903 +1335720.340647 +1335733.996851 +1335737.751938 +1335744.087831 +1335756.295073 +1335757.013146 +1335764.120000 +1335768.897066 +1335773.021132 +1335784.073263 +1335784.387633 +1335798.725227 +1335795.990349 +1335805.996268 +1335810.757984 +1335810.742379 +1335822.569587 +1335824.213961 +1335828.015306 +1335837.620035 +1335839.199097 +1335843.267974 +1335849.292821 +1335854.185243 +1335858.372829 +1335862.962237 +1335863.627055 +1335870.534754 +1335875.173379 +1335875.885217 +1335882.977142 +1335887.870095 +1335888.117441 +1335895.608220 +1335896.700346 +1335899.282689 +1335904.905381 +1335905.573075 +1335912.308425 +1335913.568791 +1335916.690843 +1335919.282865 +1335924.741651 +1335922.478460 +1335928.170376 +1335933.083436 +1335932.067606 +1335937.329801 +1335939.158863 +1335941.623180 +1335944.628023 +1335946.501050 +1335949.689557 +1335952.565278 +1335954.240736 +1335955.327706 +1335960.483202 +1335960.175556 +1335963.302198 +1335964.880074 +1335968.516337 +1335967.511665 +1335972.533672 +1335972.003720 +1335975.454051 +1335976.926362 +1335980.278118 +1335980.665449 +1335982.741810 +1335984.565528 +1335985.721296 +1335988.095886 +1335989.969746 +1335990.790103 +1335992.781829 +1335992.769406 +1335994.815084 +1335997.212355 +1335998.436714 +1335998.895707 +1336001.198297 +1336001.503636 +1336004.371704 +1336003.387836 +1336006.386284 +1336006.707511 +1336009.205788 +1336009.040206 +1336011.026938 +1336012.699560 +1336013.328558 +1336014.591169 +1336015.235470 +1336016.401289 +1336017.683998 +1336018.435939 +1336019.260835 +1336019.875893 +1336021.446091 +1336021.629689 +1336023.404976 +1336024.374479 +1336024.183851 +1336025.775248 +1336026.601759 +1336026.936348 +1336028.399138 +1336028.954093 +1336029.287274 +1336030.377447 +1336030.908848 +1336031.620570 +1336032.497969 +1336033.283151 +1336033.726584 +1336034.316853 +1336035.101205 +1336035.391090 +1336036.374105 +1336036.425212 +1336037.340358 +1336037.975877 +1336038.381303 +1336039.216513 +1336039.627969 +1336040.233754 +1336040.877488 +1336041.044714 +1336041.494222 +1336042.208125 +1336042.656467 +1336042.886236 +1336043.267605 +1336044.056132 +1336044.309351 +1336044.791876 +1336045.038204 +1336045.710375 +1336046.152488 +1336046.334512 +1336046.690252 +1336047.178339 +1336047.369217 +1336048.120864 +1336048.186851 +1336048.353989 +1336049.011752 +1336049.261093 +1336049.244917 +1336049.713562 +1336050.013839 +1336050.558665 +1336050.646385 +1336051.087939 +1336051.364397 +1336051.701982 +1336051.845631 +1336052.002055 +1336052.350198 +1336052.589583 +1336052.701890 +1336053.086672 +1336053.109531 +1336053.608213 +1336053.700714 +1336054.169026 +1336054.169603 +1336054.390320 +1336054.620583 +1336054.756619 +1336054.836978 +1336055.284188 +1336055.287969 +1336055.486929 +1336055.905396 +1336055.882554 +1336056.120410 +1336056.237586 +1336056.418744 +1336056.584080 +1336056.728589 +1336056.878163 +1336057.088426 +1336057.145057 +1336057.478520 +1336057.347685 +1336057.681190 +1336057.685034 +1336058.020093 +1336057.931081 +1336058.155088 +1336058.338127 +1336058.378536 +1336058.505483 +1336058.656019 +1336058.750519 +1336058.922288 +1336058.897930 +1336059.107172 +1336059.194546 +1336059.324416 +1336059.396593 +1336059.554967 +1336059.526521 +1336059.707151 +1336059.776496 +1336059.848736 +1336059.900018 +1336060.091742 +1336060.090568 +1336060.246505 +1336060.297851 +1336060.365240 +1336060.464773 +1336060.600882 +1336060.612843 +1336060.693565 +1336060.786258 +1336060.840988 +1336060.922385 +1336060.980425 +1336061.008804 +1336061.064360 +1336061.159374 +1336061.144582 +1336061.290351 +1336061.335581 +1336061.387480 +1336061.446610 +1336061.475750 +1336061.599322 +1336061.590993 +1336061.680328 +1336061.717224 +1336061.765173 +1336061.795407 +1336061.820433 +1336061.917459 +1336061.911289 +1336062.013914 +1336062.026389 +1336062.057948 +1336062.132268 +1336062.125467 +1336062.177551 +1336062.241709 +1336062.268484 +1336062.290532 +1336062.338909 +1336062.367768 +1336062.390806 +1336062.455449 +1336062.871911 +1336062.125530 +1336062.948754 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 d989a4604f982bc5272425f2402c0cf329a70533..6db3b4a4addd7da63c59396f073ba13656d41f12 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 index ae678f3a999b0eb8291bbfc3e29e160cf5f249a4..d99c9014604eb0b877903d0b144a778b3a8d2c54 100644 --- a/sol.txt +++ b/sol.txt @@ -1,101 +1,651 @@ -number of solutions 1, first iteration bound=2.000000, objsol=2.000000 -lowerbound = 1.000000 - number of solutions 2, first iteration bound=-52440.000000, objsol=-52440.000000 -lowerbound = 30.000000 - number of solutions 3, first iteration bound=-72380.000000, objsol=-72380.000000 -lowerbound = 60.000000 - number of solutions 3, first iteration bound=-84998.000000, objsol=-84998.000000 -lowerbound = 1.000000 - number of solutions 3, first iteration bound=-101690.000000, objsol=-101690.000000 -lowerbound = 30.000000 - number of solutions 3, first iteration bound=-110880.000000, objsol=-110880.000000 -lowerbound = 60.000000 - number of solutions 3, first iteration bound=-119066.000000, objsol=-119066.000000 -lowerbound = 1.000000 - number of solutions 3, first iteration bound=-129901.000000, objsol=-129901.000000 -lowerbound = 30.000000 - number of solutions 3, first iteration bound=-136241.000000, objsol=-136241.000000 -lowerbound = 60.000000 - number of solutions 3, first iteration bound=-142151.000000, objsol=-142151.000000 -lowerbound = 1.000000 - number of solutions 3, first iteration bound=-150107.000000, objsol=-150107.000000 -lowerbound = 30.000000 - number of solutions 3, first iteration bound=-154911.000000, objsol=-154911.000000 -lowerbound = 60.000000 - number of solutions 3, first iteration bound=-159531.000000, objsol=-159531.000000 -lowerbound = 1.000000 - number of solutions 3, first iteration bound=-165805.000000, objsol=-165805.000000 -lowerbound = 30.000000 - number of solutions 3, first iteration bound=-169663.000000, objsol=-169663.000000 -lowerbound = 60.000000 - number of solutions 3, first iteration bound=-173458.000000, objsol=-173458.000000 -lowerbound = 1.000000 - number of solutions 3, first iteration bound=-178633.000000, objsol=-178633.000000 -lowerbound = 30.000000 - number of solutions 3, first iteration bound=-181872.960784, objsol=-181872.960784 -lowerbound = 1.000000 - number of solutions 3, first iteration bound=-186587.000000, objsol=-186587.000000 -lowerbound = 60.000000 - number of solutions 3, first iteration bound=-189604.000000, objsol=-189604.000000 -lowerbound = 30.000000 - number of solutions 3, first iteration bound=-192431.000000, objsol=-192431.000000 -lowerbound = 1.000000 - number of solutions 3, first iteration bound=-196367.000000, objsol=-196367.000000 -lowerbound = 60.000000 - number of solutions 4, first iteration bound=-199005.355731, objsol=-199005.355731 -lowerbound = 15.000000 - number of solutions 4, first iteration bound=-201505.355731, objsol=-201505.355731 -lowerbound = 15.000000 - number of solutions 4, first iteration bound=-204478.355731, objsol=-204478.355731 -lowerbound = 15.000000 - number of solutions 4, first iteration bound=-207362.355731, objsol=-207362.355731 -lowerbound = 15.000000 - number of solutions 4, first iteration bound=-210140.355731, objsol=-210140.355731 -lowerbound = 15.000000 - number of solutions 4, first iteration bound=-212819.355731, objsol=-212819.355731 -lowerbound = 15.000000 - number of solutions 4, first iteration bound=-215404.355731, objsol=-215404.355731 -lowerbound = 15.000000 - number of solutions 4, first iteration bound=-217904.355731, objsol=-217904.355731 -lowerbound = 15.000000 - number of solutions 4, first iteration bound=-220324.355731, objsol=-220324.355731 -lowerbound = 15.000000 - number of solutions 4, first iteration bound=-222668.355731, objsol=-222668.355731 -lowerbound = 15.000000 - number of solutions 4, first iteration bound=-224940.355731, objsol=-224940.355731 -lowerbound = 15.000000 - number of solutions 4, first iteration bound=-227146.355731, objsol=-227146.355731 -lowerbound = 15.000000 - number of solutions 4, first iteration bound=-229289.355731, objsol=-229289.355731 -lowerbound = 15.000000 - number of solutions 4, first iteration bound=-231373.355731, objsol=-231373.355731 -lowerbound = 15.000000 - number of solutions 4, first iteration bound=-233399.355731, objsol=-233399.355731 -lowerbound = 15.000000 - number of solutions 4, first iteration bound=-235374.355731, objsol=-235374.355731 -lowerbound = 15.000000 - number of solutions 4, first iteration bound=-237296.355731, objsol=-237296.355731 -lowerbound = 15.000000 - number of solutions 4, first iteration bound=-239171.355731, objsol=-239171.355731 -lowerbound = 15.000000 - number of solutions 4, first iteration bound=-241000.355731, objsol=-241000.355731 -lowerbound = 15.000000 - number of solutions 4, first iteration bound=-242786.355731, objsol=-242786.355731 -lowerbound = 15.000000 - number of solutions 4, first iteration bound=-244530.355731, objsol=-244530.355731 -lowerbound = 15.000000 - number of solutions 4, first iteration bound=-246235.355731, objsol=-246235.355731 -lowerbound = 15.000000 - number of solutions 4, first iteration bound=-247901.355731, objsol=-247901.355731 -lowerbound = 15.000000 - number of solutions 4, first iteration bound=-249532.355731, objsol=-249532.355731 -lowerbound = 15.000000 - number of solutions 4, first iteration bound=-251128.355731, objsol=-251128.355731 -lowerbound = 15.000000 - number of solutions 4, first iteration bound=-252690.355731, objsol=-252690.355731 -lowerbound = 15.000000 - number of solutions 4, first iteration bound=-254221.355731, objsol=-254221.355731 -lowerbound = 15.000000 - number of solutions 4, first iteration bound=-255721.355731, objsol=-255721.355731 -lowerbound = 15.000000 - \ No newline at end of file +number of solutions 1, first iteration bound=969553.451655, objsol=969553.451655 +number of solutions 2, first iteration bound=911613.111366, objsol=911613.111366 +number of solutions 4, first iteration bound=947154.171486, objsol=947154.171486 +number of solutions 5, first iteration bound=943263.213453, objsol=943263.213453 +number of solutions 6, first iteration bound=961592.718970, objsol=961592.718970 +number of solutions 7, first iteration bound=975146.613930, objsol=975146.613930 +number of solutions 7, first iteration bound=989344.620330, objsol=989344.620330 +number of solutions 8, first iteration bound=999024.176262, objsol=999024.176262 +number of solutions 9, first iteration bound=1008350.920374, objsol=1008350.920374 +number of solutions 11, first iteration bound=1020026.835179, objsol=1020026.835179 +number of solutions 11, first iteration bound=1023789.204847, objsol=1023789.204847 +number of solutions 11, first iteration bound=1037572.779662, objsol=1037572.779662 +number of solutions 11, first iteration bound=1043550.340114, objsol=1043550.340114 +number of solutions 11, first iteration bound=1051710.589431, objsol=1051710.589431 +number of solutions 10, first iteration bound=1058427.147271, objsol=1058427.147271 +number of solutions 12, first iteration bound=1063293.445488, objsol=1063293.445488 +number of solutions 10, first iteration bound=1072473.640624, objsol=1072473.640624 +number of solutions 12, first iteration bound=1076886.141898, objsol=1076886.141898 +number of solutions 10, first iteration bound=1086729.286001, objsol=1086729.286001 +number of solutions 12, first iteration bound=1091780.455877, objsol=1091780.455877 +number of solutions 10, first iteration bound=1094896.809334, objsol=1094896.809334 +number of solutions 11, first iteration bound=1101263.149421, objsol=1101263.149421 +number of solutions 12, first iteration bound=1103431.934686, objsol=1103431.934686 +number of solutions 11, first iteration bound=1111036.222705, objsol=1111036.222705 +number of solutions 11, first iteration bound=1115860.276809, objsol=1115860.276809 +number of solutions 11, first iteration bound=1119922.138092, objsol=1119922.138092 +number of solutions 11, first iteration bound=1124960.296185, objsol=1124960.296185 +number of solutions 11, first iteration bound=1132123.876662, objsol=1132123.876662 +number of solutions 11, first iteration bound=1133652.768532, objsol=1133652.768532 +number of solutions 11, first iteration bound=1136144.901815, objsol=1136144.901815 +number of solutions 11, first iteration bound=1141097.358296, objsol=1141097.358296 +number of solutions 11, first iteration bound=1143101.259766, objsol=1143101.259766 +number of solutions 10, first iteration bound=1148002.683780, objsol=1148002.683780 +number of solutions 12, first iteration bound=1153159.516056, objsol=1153159.516056 +number of solutions 11, first iteration bound=1153338.723749, objsol=1153338.723749 +number of solutions 11, first iteration bound=1158674.315675, objsol=1158674.315675 +number of solutions 11, first iteration bound=1162297.618028, objsol=1162297.618028 +number of solutions 11, first iteration bound=1164160.056187, objsol=1164160.056187 +number of solutions 11, first iteration bound=1168498.610213, objsol=1168498.610213 +number of solutions 10, first iteration bound=1169729.460704, objsol=1169729.460704 +number of solutions 11, first iteration bound=1173952.832273, objsol=1173952.832273 +number of solutions 12, first iteration bound=1178270.501656, objsol=1178270.501656 +number of solutions 11, first iteration bound=1178878.876044, objsol=1178878.876044 +number of solutions 11, first iteration bound=1181975.581725, objsol=1181975.581725 +number of solutions 10, first iteration bound=1184448.929978, objsol=1184448.929978 +number of solutions 11, first iteration bound=1188609.544868, objsol=1188609.544868 +number of solutions 12, first iteration bound=1188830.345998, objsol=1188830.345998 +number of solutions 10, first iteration bound=1194249.329747, objsol=1194249.329747 +number of solutions 12, first iteration bound=1196132.545007, objsol=1196132.545007 +number of solutions 10, first iteration bound=1197416.779761, objsol=1197416.779761 +number of solutions 12, first iteration bound=1198769.130753, objsol=1198769.130753 +number of solutions 11, first iteration bound=1203012.987614, objsol=1203012.987614 +number of solutions 11, first iteration bound=1204208.203188, objsol=1204208.203188 +number of solutions 10, first iteration bound=1205848.372438, objsol=1205848.372438 +number of solutions 12, first iteration bound=1210379.200196, objsol=1210379.200196 +number of solutions 11, first iteration bound=1210910.524724, objsol=1210910.524724 +number of solutions 11, first iteration bound=1212408.050573, objsol=1212408.050573 +number of solutions 11, first iteration bound=1215354.767561, objsol=1215354.767561 +number of solutions 11, first iteration bound=1214580.986949, objsol=1214580.986949 +number of solutions 10, first iteration bound=1221664.782381, objsol=1221664.782381 +number of solutions 12, first iteration bound=1220831.170901, objsol=1220831.170901 +number of solutions 11, first iteration bound=1219416.355717, objsol=1219416.355717 +number of solutions 11, first iteration bound=1227249.575602, objsol=1227249.575602 +number of solutions 10, first iteration bound=1224533.491777, objsol=1224533.491777 +number of solutions 11, first iteration bound=1228388.071534, objsol=1228388.071534 +number of solutions 12, first iteration bound=1229978.533500, objsol=1229978.533500 +number of solutions 10, first iteration bound=1231536.910022, objsol=1231536.910022 +number of solutions 12, first iteration bound=1233839.968237, objsol=1233839.968237 +number of solutions 10, first iteration bound=1235535.554008, objsol=1235535.554008 +number of solutions 12, first iteration bound=1233975.317661, objsol=1233975.317661 +number of solutions 10, first iteration bound=1238185.735747, objsol=1238185.735747 +number of solutions 12, first iteration bound=1238853.909670, objsol=1238853.909670 +number of solutions 11, first iteration bound=1238994.144600, objsol=1238994.144600 +number of solutions 11, first iteration bound=1243152.502070, objsol=1243152.502070 +number of solutions 11, first iteration bound=1242133.831560, objsol=1242133.831560 +number of solutions 11, first iteration bound=1245744.530869, objsol=1245744.530869 +number of solutions 11, first iteration bound=1245205.494079, objsol=1245205.494079 +number of solutions 11, first iteration bound=1248084.273841, objsol=1248084.273841 +number of solutions 11, first iteration bound=1249241.471795, objsol=1249241.471795 +number of solutions 11, first iteration bound=1250241.022613, objsol=1250241.022613 +number of solutions 10, first iteration bound=1250118.511084, objsol=1250118.511084 +number of solutions 11, first iteration bound=1253178.719159, objsol=1253178.719159 +number of solutions 12, first iteration bound=1253930.665989, objsol=1253930.665989 +number of solutions 10, first iteration bound=1253037.031825, objsol=1253037.031825 +number of solutions 12, first iteration bound=1257940.562495, objsol=1257940.562495 +number of solutions 11, first iteration bound=1257422.828523, objsol=1257422.828523 +number of solutions 11, first iteration bound=1258452.530575, objsol=1258452.530575 +number of solutions 11, first iteration bound=1259552.124552, objsol=1259552.124552 +number of solutions 11, first iteration bound=1259972.856173, objsol=1259972.856173 +number of solutions 11, first iteration bound=1262403.465110, objsol=1262403.465110 +number of solutions 11, first iteration bound=1262900.868471, objsol=1262900.868471 +number of solutions 11, first iteration bound=1263814.432308, objsol=1263814.432308 +number of solutions 11, first iteration bound=1265019.857869, objsol=1265019.857869 +number of solutions 10, first iteration bound=1266205.328629, objsol=1266205.328629 +number of solutions 12, first iteration bound=1267538.210346, objsol=1267538.210346 +number of solutions 10, first iteration bound=1268243.082402, objsol=1268243.082402 +number of solutions 12, first iteration bound=1268828.566504, objsol=1268828.566504 +number of solutions 11, first iteration bound=1269633.765048, objsol=1269633.765048 +number of solutions 11, first iteration bound=1271300.981826, objsol=1271300.981826 +number of solutions 11, first iteration bound=1271570.232456, objsol=1271570.232456 +number of solutions 10, first iteration bound=1272547.671274, objsol=1272547.671274 +number of solutions 12, first iteration bound=1274184.663697, objsol=1274184.663697 +number of solutions 11, first iteration bound=1275164.375242, objsol=1275164.375242 +number of solutions 10, first iteration bound=1275586.924129, objsol=1275586.924129 +number of solutions 11, first iteration bound=1276457.997280, objsol=1276457.997280 +number of solutions 12, first iteration bound=1277820.536363, objsol=1277820.536363 +number of solutions 10, first iteration bound=1278275.750896, objsol=1278275.750896 +number of solutions 12, first iteration bound=1278990.490910, objsol=1278990.490910 +number of solutions 10, first iteration bound=1280564.976832, objsol=1280564.976832 +number of solutions 11, first iteration bound=1281073.034072, objsol=1281073.034072 +number of solutions 11, first iteration bound=1281705.488007, objsol=1281705.488007 +number of solutions 11, first iteration bound=1282343.981097, objsol=1282343.981097 +number of solutions 12, first iteration bound=1283767.327581, objsol=1283767.327581 +number of solutions 11, first iteration bound=1284804.105702, objsol=1284804.105702 +number of solutions 11, first iteration bound=1284160.362654, objsol=1284160.362654 +number of solutions 11, first iteration bound=1285710.159096, objsol=1285710.159096 +number of solutions 11, first iteration bound=1285496.091083, objsol=1285496.091083 +number of solutions 11, first iteration bound=1288033.554846, objsol=1288033.554846 +number of solutions 11, first iteration bound=1286971.082761, objsol=1286971.082761 +number of solutions 11, first iteration bound=1288215.915504, objsol=1288215.915504 +number of solutions 11, first iteration bound=1289848.363697, objsol=1289848.363697 +number of solutions 11, first iteration bound=1289030.663945, objsol=1289030.663945 +number of solutions 11, first iteration bound=1290973.188680, objsol=1290973.188680 +number of solutions 11, first iteration bound=1290492.003343, objsol=1290492.003343 +number of solutions 11, first iteration bound=1291848.086971, objsol=1291848.086971 +number of solutions 11, first iteration bound=1292324.408432, objsol=1292324.408432 +number of solutions 11, first iteration bound=1292487.812085, objsol=1292487.812085 +number of solutions 11, first iteration bound=1293609.540066, objsol=1293609.540066 +number of solutions 11, first iteration bound=1294633.223598, objsol=1294633.223598 +number of solutions 11, first iteration bound=1294686.072122, objsol=1294686.072122 +number of solutions 10, first iteration bound=1296050.502384, objsol=1296050.502384 +number of solutions 12, first iteration bound=1296017.253994, objsol=1296017.253994 +number of solutions 11, first iteration bound=1296937.429607, objsol=1296937.429607 +number of solutions 11, first iteration bound=1297950.589067, objsol=1297950.589067 +number of solutions 10, first iteration bound=1297811.840367, objsol=1297811.840367 +number of solutions 12, first iteration bound=1297651.375125, objsol=1297651.375125 +number of solutions 11, first iteration bound=1299574.754722, objsol=1299574.754722 +number of solutions 11, first iteration bound=1299551.658085, objsol=1299551.658085 +number of solutions 11, first iteration bound=1300320.153238, objsol=1300320.153238 +number of solutions 11, first iteration bound=1300499.048157, objsol=1300499.048157 +number of solutions 11, first iteration bound=1301639.480237, objsol=1301639.480237 +number of solutions 10, first iteration bound=1301180.641490, objsol=1301180.641490 +number of solutions 11, first iteration bound=1302433.129828, objsol=1302433.129828 +number of solutions 12, first iteration bound=1302600.605011, objsol=1302600.605011 +number of solutions 11, first iteration bound=1303916.660353, objsol=1303916.660353 +number of solutions 11, first iteration bound=1303446.451767, objsol=1303446.451767 +number of solutions 11, first iteration bound=1304125.629501, objsol=1304125.629501 +number of solutions 11, first iteration bound=1305213.350109, objsol=1305213.350109 +number of solutions 11, first iteration bound=1304806.278512, objsol=1304806.278512 +number of solutions 11, first iteration bound=1305683.240203, objsol=1305683.240203 +number of solutions 11, first iteration bound=1306274.999014, objsol=1306274.999014 +number of solutions 11, first iteration bound=1306391.252107, objsol=1306391.252107 +number of solutions 10, first iteration bound=1307002.044072, objsol=1307002.044072 +number of solutions 12, first iteration bound=1307220.398557, objsol=1307220.398557 +number of solutions 11, first iteration bound=1307959.594172, objsol=1307959.594172 +number of solutions 11, first iteration bound=1308102.980862, objsol=1308102.980862 +number of solutions 10, first iteration bound=1309381.262877, objsol=1309381.262877 +number of solutions 12, first iteration bound=1308136.300573, objsol=1308136.300573 +number of solutions 11, first iteration bound=1310254.588455, objsol=1310254.588455 +number of solutions 11, first iteration bound=1309472.664213, objsol=1309472.664213 +number of solutions 11, first iteration bound=1310411.849449, objsol=1310411.849449 +number of solutions 11, first iteration bound=1310747.333112, objsol=1310747.333112 +number of solutions 11, first iteration bound=1310694.406371, objsol=1310694.406371 +number of solutions 10, first iteration bound=1311742.132396, objsol=1311742.132396 +number of solutions 12, first iteration bound=1311729.769803, objsol=1311729.769803 +number of solutions 11, first iteration bound=1312201.479464, objsol=1312201.479464 +number of solutions 10, first iteration bound=1313017.181496, objsol=1313017.181496 +number of solutions 12, first iteration bound=1312766.479616, objsol=1312766.479616 +number of solutions 10, first iteration bound=1313320.013192, objsol=1313320.013192 +number of solutions 11, first iteration bound=1313754.621536, objsol=1313754.621536 +number of solutions 12, first iteration bound=1313839.823459, objsol=1313839.823459 +number of solutions 11, first iteration bound=1314132.963333, objsol=1314132.963333 +number of solutions 11, first iteration bound=1314707.356195, objsol=1314707.356195 +number of solutions 11, first iteration bound=1314971.923391, objsol=1314971.923391 +number of solutions 11, first iteration bound=1315150.783123, objsol=1315150.783123 +number of solutions 10, first iteration bound=1315833.627176, objsol=1315833.627176 +number of solutions 12, first iteration bound=1315961.754241, objsol=1315961.754241 +number of solutions 10, first iteration bound=1316377.703985, objsol=1316377.703985 +number of solutions 12, first iteration bound=1316347.105593, objsol=1316347.105593 +number of solutions 11, first iteration bound=1316843.151918, objsol=1316843.151918 +number of solutions 10, first iteration bound=1317357.843619, objsol=1317357.843619 +number of solutions 12, first iteration bound=1317507.001805, objsol=1317507.001805 +number of solutions 11, first iteration bound=1317896.556602, objsol=1317896.556602 +number of solutions 11, first iteration bound=1317820.862070, objsol=1317820.862070 +number of solutions 11, first iteration bound=1318516.372697, objsol=1318516.372697 +number of solutions 11, first iteration bound=1318621.136050, objsol=1318621.136050 +number of solutions 10, first iteration bound=1318859.567895, objsol=1318859.567895 +number of solutions 12, first iteration bound=1319000.843419, objsol=1319000.843419 +number of solutions 11, first iteration bound=1319567.569621, objsol=1319567.569621 +number of solutions 11, first iteration bound=1319691.606792, objsol=1319691.606792 +number of solutions 11, first iteration bound=1319940.385938, objsol=1319940.385938 +number of solutions 11, first iteration bound=1320349.870713, objsol=1320349.870713 +number of solutions 11, first iteration bound=1320387.194990, objsol=1320387.194990 +number of solutions 11, first iteration bound=1320463.880387, objsol=1320463.880387 +number of solutions 11, first iteration bound=1321216.290686, objsol=1321216.290686 +number of solutions 11, first iteration bound=1320844.010067, objsol=1320844.010067 +number of solutions 11, first iteration bound=1321816.561185, objsol=1321816.561185 +number of solutions 11, first iteration bound=1321394.309372, objsol=1321394.309372 +number of solutions 11, first iteration bound=1322042.897186, objsol=1322042.897186 +number of solutions 11, first iteration bound=1322074.670469, objsol=1322074.670469 +number of solutions 11, first iteration bound=1322470.617749, objsol=1322470.617749 +number of solutions 11, first iteration bound=1322540.369606, objsol=1322540.369606 +number of solutions 10, first iteration bound=1322624.341772, objsol=1322624.341772 +number of solutions 12, first iteration bound=1323133.150634, objsol=1323133.150634 +number of solutions 11, first iteration bound=1323192.112008, objsol=1323192.112008 +number of solutions 10, first iteration bound=1323472.765681, objsol=1323472.765681 +number of solutions 12, first iteration bound=1323644.893299, objsol=1323644.893299 +number of solutions 10, first iteration bound=1323794.986011, objsol=1323794.986011 +number of solutions 12, first iteration bound=1324076.938053, objsol=1324076.938053 +number of solutions 10, first iteration bound=1324264.958891, objsol=1324264.958891 +number of solutions 12, first iteration bound=1324442.566244, objsol=1324442.566244 +number of solutions 11, first iteration bound=1324715.952118, objsol=1324715.952118 +number of solutions 11, first iteration bound=1325062.688091, objsol=1325062.688091 +number of solutions 11, first iteration bound=1325001.755249, objsol=1325001.755249 +number of solutions 11, first iteration bound=1325287.710175, objsol=1325287.710175 +number of solutions 11, first iteration bound=1325353.478519, objsol=1325353.478519 +number of solutions 11, first iteration bound=1325680.383714, objsol=1325680.383714 +number of solutions 10, first iteration bound=1325820.296257, objsol=1325820.296257 +number of solutions 12, first iteration bound=1325875.913080, objsol=1325875.913080 +number of solutions 11, first iteration bound=1326046.872352, objsol=1326046.872352 +number of solutions 11, first iteration bound=1326126.935796, objsol=1326126.935796 +number of solutions 10, first iteration bound=1326501.345304, objsol=1326501.345304 +number of solutions 12, first iteration bound=1326564.562640, objsol=1326564.562640 +number of solutions 11, first iteration bound=1326911.515231, objsol=1326911.515231 +number of solutions 11, first iteration bound=1326768.239443, objsol=1326768.239443 +number of solutions 11, first iteration bound=1327096.455160, objsol=1327096.455160 +number of solutions 11, first iteration bound=1327107.467419, objsol=1327107.467419 +number of solutions 11, first iteration bound=1327515.664580, objsol=1327515.664580 +number of solutions 11, first iteration bound=1327380.722438, objsol=1327380.722438 +number of solutions 11, first iteration bound=1327775.196893, objsol=1327775.196893 +number of solutions 11, first iteration bound=1327787.208340, objsol=1327787.208340 +number of solutions 11, first iteration bound=1328041.546465, objsol=1328041.546465 +number of solutions 11, first iteration bound=1327851.807392, objsol=1327851.807392 +number of solutions 11, first iteration bound=1328410.976074, objsol=1328410.976074 +number of solutions 11, first iteration bound=1328197.384069, objsol=1328197.384069 +number of solutions 11, first iteration bound=1328564.688747, objsol=1328564.688747 +number of solutions 11, first iteration bound=1328678.671736, objsol=1328678.671736 +number of solutions 11, first iteration bound=1328775.978795, objsol=1328775.978795 +number of solutions 11, first iteration bound=1328887.841322, objsol=1328887.841322 +number of solutions 11, first iteration bound=1329055.036630, objsol=1329055.036630 +number of solutions 10, first iteration bound=1329044.223776, objsol=1329044.223776 +number of solutions 12, first iteration bound=1329348.721319, objsol=1329348.721319 +number of solutions 11, first iteration bound=1329225.030464, objsol=1329225.030464 +number of solutions 11, first iteration bound=1329592.064811, objsol=1329592.064811 +number of solutions 11, first iteration bound=1329533.261170, objsol=1329533.261170 +number of solutions 11, first iteration bound=1329768.225012, objsol=1329768.225012 +number of solutions 11, first iteration bound=1329834.781920, objsol=1329834.781920 +number of solutions 10, first iteration bound=1329959.481059, objsol=1329959.481059 +number of solutions 12, first iteration bound=1329998.049238, objsol=1329998.049238 +number of solutions 11, first iteration bound=1330194.244360, objsol=1330194.244360 +number of solutions 11, first iteration bound=1330258.236306, objsol=1330258.236306 +number of solutions 11, first iteration bound=1330297.805555, objsol=1330297.805555 +number of solutions 11, first iteration bound=1330487.920227, objsol=1330487.920227 +number of solutions 11, first iteration bound=1330499.755440, objsol=1330499.755440 +number of solutions 11, first iteration bound=1330650.857400, objsol=1330650.857400 +number of solutions 11, first iteration bound=1330761.816419, objsol=1330761.816419 +number of solutions 11, first iteration bound=1330876.275775, objsol=1330876.275775 +number of solutions 11, first iteration bound=1331012.256430, objsol=1331012.256430 +number of solutions 11, first iteration bound=1330986.690295, objsol=1330986.690295 +number of solutions 11, first iteration bound=1331069.452240, objsol=1331069.452240 +number of solutions 11, first iteration bound=1331219.087946, objsol=1331219.087946 +number of solutions 11, first iteration bound=1331299.061943, objsol=1331299.061943 +number of solutions 11, first iteration bound=1331394.712258, objsol=1331394.712258 +number of solutions 11, first iteration bound=1331437.910522, objsol=1331437.910522 +number of solutions 11, first iteration bound=1331569.509084, objsol=1331569.509084 +number of solutions 11, first iteration bound=1331590.246112, objsol=1331590.246112 +number of solutions 10, first iteration bound=1331707.442314, objsol=1331707.442314 +number of solutions 11, first iteration bound=1331729.271918, objsol=1331729.271918 +number of solutions 11, first iteration bound=1331925.588798, objsol=1331925.588798 +number of solutions 12, first iteration bound=1331901.449987, objsol=1331901.449987 +number of solutions 10, first iteration bound=1332020.857836, objsol=1332020.857836 +number of solutions 12, first iteration bound=1332045.244544, objsol=1332045.244544 +number of solutions 11, first iteration bound=1332216.620575, objsol=1332216.620575 +number of solutions 11, first iteration bound=1332139.685550, objsol=1332139.685550 +number of solutions 11, first iteration bound=1332404.915399, objsol=1332404.915399 +number of solutions 10, first iteration bound=1332320.827795, objsol=1332320.827795 +number of solutions 12, first iteration bound=1332457.490111, objsol=1332457.490111 +number of solutions 10, first iteration bound=1332492.645303, objsol=1332492.645303 +number of solutions 11, first iteration bound=1332570.142631, objsol=1332570.142631 +number of solutions 12, first iteration bound=1332660.381723, objsol=1332660.381723 +number of solutions 10, first iteration bound=1332668.388465, objsol=1332668.388465 +number of solutions 11, first iteration bound=1332824.223489, objsol=1332824.223489 +number of solutions 12, first iteration bound=1332794.470086, objsol=1332794.470086 +number of solutions 11, first iteration bound=1332904.600899, objsol=1332904.600899 +number of solutions 11, first iteration bound=1332958.272951, objsol=1332958.272951 +number of solutions 11, first iteration bound=1332971.471139, objsol=1332971.471139 +number of solutions 11, first iteration bound=1333096.368669, objsol=1333096.368669 +number of solutions 10, first iteration bound=1333076.489937, objsol=1333076.489937 +number of solutions 12, first iteration bound=1333173.559068, objsol=1333173.559068 +number of solutions 11, first iteration bound=1333216.631336, objsol=1333216.631336 +number of solutions 11, first iteration bound=1333278.178399, objsol=1333278.178399 +number of solutions 11, first iteration bound=1333354.357143, objsol=1333354.357143 +number of solutions 11, first iteration bound=1333373.487941, objsol=1333373.487941 +number of solutions 11, first iteration bound=1333417.063195, objsol=1333417.063195 +number of solutions 11, first iteration bound=1333474.826859, objsol=1333474.826859 +number of solutions 11, first iteration bound=1333531.509974, objsol=1333531.509974 +number of solutions 11, first iteration bound=1333574.186483, objsol=1333574.186483 +number of solutions 11, first iteration bound=1333626.861353, objsol=1333626.861353 +number of solutions 10, first iteration bound=1333654.696217, objsol=1333654.696217 +number of solutions 12, first iteration bound=1333721.697539, objsol=1333721.697539 +number of solutions 11, first iteration bound=1333758.983065, objsol=1333758.983065 +number of solutions 11, first iteration bound=1333810.811883, objsol=1333810.811883 +number of solutions 11, first iteration bound=1333849.718520, objsol=1333849.718520 +number of solutions 11, first iteration bound=1333894.968378, objsol=1333894.968378 +number of solutions 11, first iteration bound=1333920.772542, objsol=1333920.772542 +number of solutions 11, first iteration bound=1333966.525451, objsol=1333966.525451 +number of solutions 11, first iteration bound=1333983.140540, objsol=1333983.140540 +number of solutions 11, first iteration bound=1334074.116580, objsol=1334074.116580 +number of solutions 11, first iteration bound=1334075.255517, objsol=1334075.255517 +number of solutions 11, first iteration bound=1334114.825615, objsol=1334114.825615 +number of solutions 11, first iteration bound=1334170.619656, objsol=1334170.619656 +number of solutions 11, first iteration bound=1334195.612049, objsol=1334195.612049 +number of solutions 10, first iteration bound=1334245.668750, objsol=1334245.668750 +number of solutions 11, first iteration bound=1334258.050190, objsol=1334258.050190 +number of solutions 12, first iteration bound=1334312.563191, objsol=1334312.563191 +number of solutions 10, first iteration bound=1334327.017952, objsol=1334327.017952 +number of solutions 12, first iteration bound=1334376.638630, objsol=1334376.638630 +number of solutions 11, first iteration bound=1334414.628163, objsol=1334414.628163 +number of solutions 11, first iteration bound=1334428.952985, objsol=1334428.952985 +number of solutions 11, first iteration bound=1334473.878946, objsol=1334473.878946 +number of solutions 11, first iteration bound=1334507.176953, objsol=1334507.176953 +number of solutions 11, first iteration bound=1334513.504906, objsol=1334513.504906 +number of solutions 11, first iteration bound=1334560.653526, objsol=1334560.653526 +number of solutions 10, first iteration bound=1334586.827564, objsol=1334586.827564 +number of solutions 12, first iteration bound=1334618.555183, objsol=1334618.555183 +number of solutions 11, first iteration bound=1334612.959942, objsol=1334612.959942 +number of solutions 11, first iteration bound=1334693.196304, objsol=1334693.196304 +number of solutions 11, first iteration bound=1334682.883282, objsol=1334682.883282 +number of solutions 11, first iteration bound=1334735.514998, objsol=1334735.514998 +number of solutions 11, first iteration bound=1334735.834499, objsol=1334735.834499 +number of solutions 10, first iteration bound=1334776.229684, objsol=1334776.229684 +number of solutions 11, first iteration bound=1334801.656589, objsol=1334801.656589 +number of solutions 11, first iteration bound=1334819.280544, objsol=1334819.280544 +number of solutions 11, first iteration bound=1334852.898440, objsol=1334852.898440 +number of solutions 12, first iteration bound=1334861.696422, objsol=1334861.696422 +number of solutions 10, first iteration bound=1334889.366810, objsol=1334889.366810 +number of solutions 12, first iteration bound=1334926.491751, objsol=1334926.491751 +number of solutions 11, first iteration bound=1334944.734357, objsol=1334944.734357 +number of solutions 10, first iteration bound=1334952.108667, objsol=1334952.108667 +number of solutions 12, first iteration bound=1334987.553022, objsol=1334987.553022 +number of solutions 11, first iteration bound=1335005.212554, objsol=1335005.212554 +number of solutions 11, first iteration bound=1335028.595335, objsol=1335028.595335 +number of solutions 10, first iteration bound=1335027.743058, objsol=1335027.743058 +number of solutions 12, first iteration bound=1335070.312102, objsol=1335070.312102 +number of solutions 11, first iteration bound=1335089.019878, objsol=1335089.019878 +number of solutions 11, first iteration bound=1335106.853458, objsol=1335106.853458 +number of solutions 10, first iteration bound=1335124.059780, objsol=1335124.059780 +number of solutions 12, first iteration bound=1335148.839438, objsol=1335148.839438 +number of solutions 11, first iteration bound=1335147.964581, objsol=1335147.964581 +number of solutions 10, first iteration bound=1335184.533971, objsol=1335184.533971 +number of solutions 12, first iteration bound=1335194.164261, objsol=1335194.164261 +number of solutions 11, first iteration bound=1335222.948855, objsol=1335222.948855 +number of solutions 11, first iteration bound=1335225.977660, objsol=1335225.977660 +number of solutions 10, first iteration bound=1335254.500253, objsol=1335254.500253 +number of solutions 11, first iteration bound=1335247.820711, objsol=1335247.820711 +number of solutions 12, first iteration bound=1335280.710728, objsol=1335280.710728 +number of solutions 11, first iteration bound=1335303.400319, objsol=1335303.400319 +number of solutions 11, first iteration bound=1335311.813631, objsol=1335311.813631 +number of solutions 11, first iteration bound=1335333.072998, objsol=1335333.072998 +number of solutions 10, first iteration bound=1335342.195150, objsol=1335342.195150 +number of solutions 12, first iteration bound=1335368.015817, objsol=1335368.015817 +number of solutions 11, first iteration bound=1335366.553146, objsol=1335366.553146 +number of solutions 11, first iteration bound=1335396.219658, objsol=1335396.219658 +number of solutions 11, first iteration bound=1335386.985085, objsol=1335386.985085 +number of solutions 11, first iteration bound=1335415.334271, objsol=1335415.334271 +number of solutions 11, first iteration bound=1335427.333966, objsol=1335427.333966 +number of solutions 10, first iteration bound=1335432.422527, objsol=1335432.422527 +number of solutions 11, first iteration bound=1335461.464101, objsol=1335461.464101 +number of solutions 11, first iteration bound=1335452.951670, objsol=1335452.951670 +number of solutions 12, first iteration bound=1335476.476959, objsol=1335476.476959 +number of solutions 11, first iteration bound=1335489.220585, objsol=1335489.220585 +number of solutions 11, first iteration bound=1335501.122677, objsol=1335501.122677 +number of solutions 11, first iteration bound=1335501.249034, objsol=1335501.249034 +number of solutions 11, first iteration bound=1335519.238392, objsol=1335519.238392 +number of solutions 11, first iteration bound=1335528.943228, objsol=1335528.943228 +number of solutions 10, first iteration bound=1335549.405702, objsol=1335549.405702 +number of solutions 12, first iteration bound=1335553.446684, objsol=1335553.446684 +number of solutions 10, first iteration bound=1335567.073889, objsol=1335567.073889 +number of solutions 11, first iteration bound=1335578.131084, objsol=1335578.131084 +number of solutions 12, first iteration bound=1335579.934689, objsol=1335579.934689 +number of solutions 10, first iteration bound=1335589.291297, objsol=1335589.291297 +number of solutions 12, first iteration bound=1335611.335049, objsol=1335611.335049 +number of solutions 11, first iteration bound=1335602.160916, objsol=1335602.160916 +number of solutions 11, first iteration bound=1335628.207138, objsol=1335628.207138 +number of solutions 11, first iteration bound=1335613.353056, objsol=1335613.353056 +number of solutions 10, first iteration bound=1335650.123719, objsol=1335650.123719 +number of solutions 12, first iteration bound=1335637.064103, objsol=1335637.064103 +number of solutions 11, first iteration bound=1335659.458265, objsol=1335659.458265 +number of solutions 11, first iteration bound=1335661.553968, objsol=1335661.553968 +number of solutions 11, first iteration bound=1335672.845075, objsol=1335672.845075 +number of solutions 10, first iteration bound=1335685.068047, objsol=1335685.068047 +number of solutions 12, first iteration bound=1335685.039485, objsol=1335685.039485 +number of solutions 10, first iteration bound=1335694.732548, objsol=1335694.732548 +number of solutions 12, first iteration bound=1335705.752318, objsol=1335705.752318 +number of solutions 11, first iteration bound=1335703.643450, objsol=1335703.643450 +number of solutions 11, first iteration bound=1335723.665903, objsol=1335723.665903 +number of solutions 11, first iteration bound=1335720.340647, objsol=1335720.340647 +number of solutions 11, first iteration bound=1335733.996851, objsol=1335733.996851 +number of solutions 11, first iteration bound=1335737.751938, objsol=1335737.751938 +number of solutions 10, first iteration bound=1335744.087831, objsol=1335744.087831 +number of solutions 12, first iteration bound=1335756.295073, objsol=1335756.295073 +number of solutions 11, first iteration bound=1335757.013146, objsol=1335757.013146 +number of solutions 11, first iteration bound=1335764.120000, objsol=1335764.120000 +number of solutions 11, first iteration bound=1335768.897066, objsol=1335768.897066 +number of solutions 11, first iteration bound=1335773.021132, objsol=1335773.021132 +number of solutions 11, first iteration bound=1335784.073263, objsol=1335784.073263 +number of solutions 10, first iteration bound=1335784.387633, objsol=1335784.387633 +number of solutions 11, first iteration bound=1335798.725227, objsol=1335798.725227 +number of solutions 11, first iteration bound=1335795.990349, objsol=1335795.990349 +number of solutions 11, first iteration bound=1335805.996268, objsol=1335805.996268 +number of solutions 12, first iteration bound=1335810.757984, objsol=1335810.757984 +number of solutions 10, first iteration bound=1335810.742379, objsol=1335810.742379 +number of solutions 11, first iteration bound=1335822.569587, objsol=1335822.569587 +number of solutions 12, first iteration bound=1335824.213961, objsol=1335824.213961 +number of solutions 11, first iteration bound=1335828.015306, objsol=1335828.015306 +number of solutions 11, first iteration bound=1335837.620035, objsol=1335837.620035 +number of solutions 10, first iteration bound=1335839.199097, objsol=1335839.199097 +number of solutions 11, first iteration bound=1335843.267974, objsol=1335843.267974 +number of solutions 12, first iteration bound=1335849.292821, objsol=1335849.292821 +number of solutions 11, first iteration bound=1335854.185243, objsol=1335854.185243 +number of solutions 10, first iteration bound=1335858.372829, objsol=1335858.372829 +number of solutions 11, first iteration bound=1335862.962237, objsol=1335862.962237 +number of solutions 11, first iteration bound=1335863.627055, objsol=1335863.627055 +number of solutions 12, first iteration bound=1335870.534754, objsol=1335870.534754 +number of solutions 10, first iteration bound=1335875.173379, objsol=1335875.173379 +number of solutions 12, first iteration bound=1335875.885217, objsol=1335875.885217 +number of solutions 10, first iteration bound=1335882.977142, objsol=1335882.977142 +number of solutions 11, first iteration bound=1335887.870095, objsol=1335887.870095 +number of solutions 12, first iteration bound=1335888.117441, objsol=1335888.117441 +number of solutions 10, first iteration bound=1335895.608220, objsol=1335895.608220 +number of solutions 12, first iteration bound=1335896.700346, objsol=1335896.700346 +number of solutions 10, first iteration bound=1335899.282689, objsol=1335899.282689 +number of solutions 12, first iteration bound=1335904.905381, objsol=1335904.905381 +number of solutions 11, first iteration bound=1335905.573075, objsol=1335905.573075 +number of solutions 11, first iteration bound=1335912.308425, objsol=1335912.308425 +number of solutions 10, first iteration bound=1335913.568791, objsol=1335913.568791 +number of solutions 12, first iteration bound=1335916.690843, objsol=1335916.690843 +number of solutions 11, first iteration bound=1335919.282865, objsol=1335919.282865 +number of solutions 11, first iteration bound=1335924.741651, objsol=1335924.741651 +number of solutions 11, first iteration bound=1335922.478460, objsol=1335922.478460 +number of solutions 11, first iteration bound=1335928.170376, objsol=1335928.170376 +number of solutions 10, first iteration bound=1335933.083436, objsol=1335933.083436 +number of solutions 12, first iteration bound=1335932.067606, objsol=1335932.067606 +number of solutions 11, first iteration bound=1335937.329801, objsol=1335937.329801 +number of solutions 10, first iteration bound=1335939.158863, objsol=1335939.158863 +number of solutions 12, first iteration bound=1335941.623180, objsol=1335941.623180 +number of solutions 11, first iteration bound=1335944.628023, objsol=1335944.628023 +number of solutions 10, first iteration bound=1335946.501050, objsol=1335946.501050 +number of solutions 12, first iteration bound=1335949.689557, objsol=1335949.689557 +number of solutions 11, first iteration bound=1335952.565278, objsol=1335952.565278 +number of solutions 11, first iteration bound=1335954.240736, objsol=1335954.240736 +number of solutions 11, first iteration bound=1335955.327706, objsol=1335955.327706 +number of solutions 11, first iteration bound=1335960.483202, objsol=1335960.483202 +number of solutions 11, first iteration bound=1335960.175556, objsol=1335960.175556 +number of solutions 11, first iteration bound=1335963.302198, objsol=1335963.302198 +number of solutions 11, first iteration bound=1335964.880074, objsol=1335964.880074 +number of solutions 11, first iteration bound=1335968.516337, objsol=1335968.516337 +number of solutions 11, first iteration bound=1335967.511665, objsol=1335967.511665 +number of solutions 10, first iteration bound=1335972.533672, objsol=1335972.533672 +number of solutions 11, first iteration bound=1335972.003720, objsol=1335972.003720 +number of solutions 12, first iteration bound=1335975.454051, objsol=1335975.454051 +number of solutions 11, first iteration bound=1335976.926362, objsol=1335976.926362 +number of solutions 10, first iteration bound=1335980.278118, objsol=1335980.278118 +number of solutions 11, first iteration bound=1335980.665449, objsol=1335980.665449 +number of solutions 12, first iteration bound=1335982.741810, objsol=1335982.741810 +number of solutions 10, first iteration bound=1335984.565528, objsol=1335984.565528 +number of solutions 12, first iteration bound=1335985.721296, objsol=1335985.721296 +number of solutions 11, first iteration bound=1335988.095886, objsol=1335988.095886 +number of solutions 11, first iteration bound=1335989.969746, objsol=1335989.969746 +number of solutions 11, first iteration bound=1335990.790103, objsol=1335990.790103 +number of solutions 11, first iteration bound=1335992.781829, objsol=1335992.781829 +number of solutions 11, first iteration bound=1335992.769406, objsol=1335992.769406 +number of solutions 11, first iteration bound=1335994.815084, objsol=1335994.815084 +number of solutions 11, first iteration bound=1335997.212355, objsol=1335997.212355 +number of solutions 11, first iteration bound=1335998.436714, objsol=1335998.436714 +number of solutions 11, first iteration bound=1335998.895707, objsol=1335998.895707 +number of solutions 11, first iteration bound=1336001.198297, objsol=1336001.198297 +number of solutions 10, first iteration bound=1336001.503636, objsol=1336001.503636 +number of solutions 11, first iteration bound=1336004.371704, objsol=1336004.371704 +number of solutions 12, first iteration bound=1336003.387836, objsol=1336003.387836 +number of solutions 10, first iteration bound=1336006.386284, objsol=1336006.386284 +number of solutions 12, first iteration bound=1336006.707511, objsol=1336006.707511 +number of solutions 10, first iteration bound=1336009.205788, objsol=1336009.205788 +number of solutions 11, first iteration bound=1336009.040206, objsol=1336009.040206 +number of solutions 12, first iteration bound=1336011.026938, objsol=1336011.026938 +number of solutions 11, first iteration bound=1336012.699560, objsol=1336012.699560 +number of solutions 11, first iteration bound=1336013.328558, objsol=1336013.328558 +number of solutions 11, first iteration bound=1336014.591169, objsol=1336014.591169 +number of solutions 11, first iteration bound=1336015.235470, objsol=1336015.235470 +number of solutions 10, first iteration bound=1336016.401289, objsol=1336016.401289 +number of solutions 12, first iteration bound=1336017.683998, objsol=1336017.683998 +number of solutions 11, first iteration bound=1336018.435939, objsol=1336018.435939 +number of solutions 11, first iteration bound=1336019.260835, objsol=1336019.260835 +number of solutions 11, first iteration bound=1336019.875893, objsol=1336019.875893 +number of solutions 11, first iteration bound=1336021.446091, objsol=1336021.446091 +number of solutions 10, first iteration bound=1336021.629689, objsol=1336021.629689 +number of solutions 12, first iteration bound=1336023.404976, objsol=1336023.404976 +number of solutions 11, first iteration bound=1336024.374479, objsol=1336024.374479 +number of solutions 11, first iteration bound=1336024.183851, objsol=1336024.183851 +number of solutions 11, first iteration bound=1336025.775248, objsol=1336025.775248 +number of solutions 11, first iteration bound=1336026.601759, objsol=1336026.601759 +number of solutions 10, first iteration bound=1336026.936348, objsol=1336026.936348 +number of solutions 12, first iteration bound=1336028.399138, objsol=1336028.399138 +number of solutions 11, first iteration bound=1336028.954093, objsol=1336028.954093 +number of solutions 10, first iteration bound=1336029.287274, objsol=1336029.287274 +number of solutions 12, first iteration bound=1336030.377447, objsol=1336030.377447 +number of solutions 11, first iteration bound=1336030.908848, objsol=1336030.908848 +number of solutions 11, first iteration bound=1336031.620570, objsol=1336031.620570 +number of solutions 11, first iteration bound=1336032.497969, objsol=1336032.497969 +number of solutions 11, first iteration bound=1336033.283151, objsol=1336033.283151 +number of solutions 10, first iteration bound=1336033.726584, objsol=1336033.726584 +number of solutions 12, first iteration bound=1336034.316853, objsol=1336034.316853 +number of solutions 10, first iteration bound=1336035.101205, objsol=1336035.101205 +number of solutions 12, first iteration bound=1336035.391090, objsol=1336035.391090 +number of solutions 10, first iteration bound=1336036.374105, objsol=1336036.374105 +number of solutions 11, first iteration bound=1336036.425212, objsol=1336036.425212 +number of solutions 12, first iteration bound=1336037.340358, objsol=1336037.340358 +number of solutions 11, first iteration bound=1336037.975877, objsol=1336037.975877 +number of solutions 11, first iteration bound=1336038.381303, objsol=1336038.381303 +number of solutions 11, first iteration bound=1336039.216513, objsol=1336039.216513 +number of solutions 11, first iteration bound=1336039.627969, objsol=1336039.627969 +number of solutions 11, first iteration bound=1336040.233754, objsol=1336040.233754 +number of solutions 10, first iteration bound=1336040.877488, objsol=1336040.877488 +number of solutions 11, first iteration bound=1336041.044714, objsol=1336041.044714 +number of solutions 12, first iteration bound=1336041.494222, objsol=1336041.494222 +number of solutions 10, first iteration bound=1336042.208125, objsol=1336042.208125 +number of solutions 12, first iteration bound=1336042.656467, objsol=1336042.656467 +number of solutions 10, first iteration bound=1336042.886236, objsol=1336042.886236 +number of solutions 11, first iteration bound=1336043.267605, objsol=1336043.267605 +number of solutions 12, first iteration bound=1336044.056132, objsol=1336044.056132 +number of solutions 10, first iteration bound=1336044.309351, objsol=1336044.309351 +number of solutions 12, first iteration bound=1336044.791876, objsol=1336044.791876 +number of solutions 10, first iteration bound=1336045.038204, objsol=1336045.038204 +number of solutions 12, first iteration bound=1336045.710375, objsol=1336045.710375 +number of solutions 11, first iteration bound=1336046.152488, objsol=1336046.152488 +number of solutions 11, first iteration bound=1336046.334512, objsol=1336046.334512 +number of solutions 10, first iteration bound=1336046.690252, objsol=1336046.690252 +number of solutions 12, first iteration bound=1336047.178339, objsol=1336047.178339 +number of solutions 10, first iteration bound=1336047.369217, objsol=1336047.369217 +number of solutions 12, first iteration bound=1336048.120864, objsol=1336048.120864 +number of solutions 11, first iteration bound=1336048.186851, objsol=1336048.186851 +number of solutions 11, first iteration bound=1336048.353989, objsol=1336048.353989 +number of solutions 11, first iteration bound=1336049.011752, objsol=1336049.011752 +number of solutions 10, first iteration bound=1336049.261093, objsol=1336049.261093 +number of solutions 12, first iteration bound=1336049.244917, objsol=1336049.244917 +number of solutions 11, first iteration bound=1336049.713562, objsol=1336049.713562 +number of solutions 11, first iteration bound=1336050.013839, objsol=1336050.013839 +number of solutions 10, first iteration bound=1336050.558665, objsol=1336050.558665 +number of solutions 11, first iteration bound=1336050.646385, objsol=1336050.646385 +number of solutions 12, first iteration bound=1336051.087939, objsol=1336051.087939 +number of solutions 10, first iteration bound=1336051.364397, objsol=1336051.364397 +number of solutions 12, first iteration bound=1336051.701982, objsol=1336051.701982 +number of solutions 10, first iteration bound=1336051.845631, objsol=1336051.845631 +number of solutions 12, first iteration bound=1336052.002055, objsol=1336052.002055 +number of solutions 10, first iteration bound=1336052.350198, objsol=1336052.350198 +number of solutions 12, first iteration bound=1336052.589583, objsol=1336052.589583 +number of solutions 10, first iteration bound=1336052.701890, objsol=1336052.701890 +number of solutions 12, first iteration bound=1336053.086672, objsol=1336053.086672 +number of solutions 11, first iteration bound=1336053.109531, objsol=1336053.109531 +number of solutions 11, first iteration bound=1336053.608213, objsol=1336053.608213 +number of solutions 11, first iteration bound=1336053.700714, objsol=1336053.700714 +number of solutions 11, first iteration bound=1336054.169026, objsol=1336054.169026 +number of solutions 11, first iteration bound=1336054.169603, objsol=1336054.169603 +number of solutions 10, first iteration bound=1336054.390320, objsol=1336054.390320 +number of solutions 12, first iteration bound=1336054.620583, objsol=1336054.620583 +number of solutions 11, first iteration bound=1336054.756619, objsol=1336054.756619 +number of solutions 11, first iteration bound=1336054.836978, objsol=1336054.836978 +number of solutions 11, first iteration bound=1336055.284188, objsol=1336055.284188 +number of solutions 11, first iteration bound=1336055.287969, objsol=1336055.287969 +number of solutions 11, first iteration bound=1336055.486929, objsol=1336055.486929 +number of solutions 11, first iteration bound=1336055.905396, objsol=1336055.905396 +number of solutions 11, first iteration bound=1336055.882554, objsol=1336055.882554 +number of solutions 11, first iteration bound=1336056.120410, objsol=1336056.120410 +number of solutions 11, first iteration bound=1336056.237586, objsol=1336056.237586 +number of solutions 11, first iteration bound=1336056.418744, objsol=1336056.418744 +number of solutions 11, first iteration bound=1336056.584080, objsol=1336056.584080 +number of solutions 11, first iteration bound=1336056.728589, objsol=1336056.728589 +number of solutions 11, first iteration bound=1336056.878163, objsol=1336056.878163 +number of solutions 11, first iteration bound=1336057.088426, objsol=1336057.088426 +number of solutions 11, first iteration bound=1336057.145057, objsol=1336057.145057 +number of solutions 11, first iteration bound=1336057.478520, objsol=1336057.478520 +number of solutions 11, first iteration bound=1336057.347685, objsol=1336057.347685 +number of solutions 10, first iteration bound=1336057.681190, objsol=1336057.681190 +number of solutions 12, first iteration bound=1336057.685034, objsol=1336057.685034 +number of solutions 11, first iteration bound=1336058.020093, objsol=1336058.020093 +number of solutions 10, first iteration bound=1336057.931081, objsol=1336057.931081 +number of solutions 12, first iteration bound=1336058.155088, objsol=1336058.155088 +number of solutions 10, first iteration bound=1336058.338127, objsol=1336058.338127 +number of solutions 12, first iteration bound=1336058.378536, objsol=1336058.378536 +number of solutions 11, first iteration bound=1336058.505483, objsol=1336058.505483 +number of solutions 11, first iteration bound=1336058.656019, objsol=1336058.656019 +number of solutions 11, first iteration bound=1336058.750519, objsol=1336058.750519 +number of solutions 11, first iteration bound=1336058.922288, objsol=1336058.922288 +number of solutions 11, first iteration bound=1336058.897930, objsol=1336058.897930 +number of solutions 11, first iteration bound=1336059.107172, objsol=1336059.107172 +number of solutions 11, first iteration bound=1336059.194546, objsol=1336059.194546 +number of solutions 11, first iteration bound=1336059.324416, objsol=1336059.324416 +number of solutions 11, first iteration bound=1336059.396593, objsol=1336059.396593 +number of solutions 11, first iteration bound=1336059.554967, objsol=1336059.554967 +number of solutions 11, first iteration bound=1336059.526521, objsol=1336059.526521 +number of solutions 11, first iteration bound=1336059.707151, objsol=1336059.707151 +number of solutions 11, first iteration bound=1336059.776496, objsol=1336059.776496 +number of solutions 11, first iteration bound=1336059.848736, objsol=1336059.848736 +number of solutions 11, first iteration bound=1336059.900018, objsol=1336059.900018 +number of solutions 11, first iteration bound=1336060.091742, objsol=1336060.091742 +number of solutions 11, first iteration bound=1336060.090568, objsol=1336060.090568 +number of solutions 11, first iteration bound=1336060.246505, objsol=1336060.246505 +number of solutions 11, first iteration bound=1336060.297851, objsol=1336060.297851 +number of solutions 11, first iteration bound=1336060.365240, objsol=1336060.365240 +number of solutions 11, first iteration bound=1336060.464773, objsol=1336060.464773 +number of solutions 11, first iteration bound=1336060.600882, objsol=1336060.600882 +number of solutions 11, first iteration bound=1336060.612843, objsol=1336060.612843 +number of solutions 11, first iteration bound=1336060.693565, objsol=1336060.693565 +number of solutions 11, first iteration bound=1336060.786258, objsol=1336060.786258 +number of solutions 11, first iteration bound=1336060.840988, objsol=1336060.840988 +number of solutions 11, first iteration bound=1336060.922385, objsol=1336060.922385 +number of solutions 10, first iteration bound=1336060.980425, objsol=1336060.980425 +number of solutions 11, first iteration bound=1336061.008804, objsol=1336061.008804 +number of solutions 11, first iteration bound=1336061.064360, objsol=1336061.064360 +number of solutions 12, first iteration bound=1336061.159374, objsol=1336061.159374 +number of solutions 10, first iteration bound=1336061.144582, objsol=1336061.144582 +number of solutions 12, first iteration bound=1336061.290351, objsol=1336061.290351 +number of solutions 10, first iteration bound=1336061.335581, objsol=1336061.335581 +number of solutions 12, first iteration bound=1336061.387480, objsol=1336061.387480 +number of solutions 11, first iteration bound=1336061.446610, objsol=1336061.446610 +number of solutions 10, first iteration bound=1336061.475750, objsol=1336061.475750 +number of solutions 12, first iteration bound=1336061.599322, objsol=1336061.599322 +number of solutions 10, first iteration bound=1336061.590993, objsol=1336061.590993 +number of solutions 12, first iteration bound=1336061.680328, objsol=1336061.680328 +number of solutions 11, first iteration bound=1336061.717224, objsol=1336061.717224 +number of solutions 11, first iteration bound=1336061.765173, objsol=1336061.765173 +number of solutions 11, first iteration bound=1336061.795407, objsol=1336061.795407 +number of solutions 11, first iteration bound=1336061.820433, objsol=1336061.820433 +number of solutions 11, first iteration bound=1336061.917459, objsol=1336061.917459 +number of solutions 11, first iteration bound=1336061.911289, objsol=1336061.911289 +number of solutions 11, first iteration bound=1336062.013914, objsol=1336062.013914 +number of solutions 11, first iteration bound=1336062.026389, objsol=1336062.026389 +number of solutions 11, first iteration bound=1336062.057948, objsol=1336062.057948 +number of solutions 10, first iteration bound=1336062.132268, objsol=1336062.132268 +number of solutions 12, first iteration bound=1336062.125467, objsol=1336062.125467 +number of solutions 11, first iteration bound=1336062.177551, objsol=1336062.177551 +number of solutions 11, first iteration bound=1336062.241709, objsol=1336062.241709 +number of solutions 11, first iteration bound=1336062.268484, objsol=1336062.268484 +number of solutions 11, first iteration bound=1336062.290532, objsol=1336062.290532 +number of solutions 11, first iteration bound=1336062.338909, objsol=1336062.338909 +number of solutions 11, first iteration bound=1336062.367768, objsol=1336062.367768 +number of solutions 11, first iteration bound=1336062.390806, objsol=1336062.390806 +number of solutions 11, first iteration bound=1336062.455449, objsol=1336062.455449 +number of solutions 9, first iteration bound=1336062.871911, objsol=1336062.871911 +number of solutions 11, first iteration bound=1336062.125530, objsol=1336062.125530 +number of solutions 9, first iteration bound=1336062.948754, objsol=1336062.948754 diff --git a/src/re.cpp b/src/re.cpp new file mode 100644 index 0000000000000000000000000000000000000000..68f07c4c9ce78a5ffce3e1b6284bbec3f48815ca --- /dev/null +++ b/src/re.cpp @@ -0,0 +1,1012 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ +/* */ +/* This file is part of the program and library */ +/* SCIP --- Solving Constraint Integer Programs */ +/* */ +/* Copyright (C) 2002-2020 Konrad-Zuse-Zentrum */ +/* fuer Informationstechnik Berlin */ +/* */ +/* SCIP is distributed under the terms of the ZIB Academic License. */ +/* */ +/* You should have received a copy of the ZIB Academic License */ +/* along with SCIP; see the file COPYING. If not visit scipopt.org. */ +/* */ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/**@file relax_lagr.c + * @ingroup OTHER_CFILES + * @brief lagr relaxator + * @author Dawit Hailu + */ + +/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/ +//I'm gonna write this, just to check if it will upload right or not :) +//what's up bro, this is just to check if i can pull it on git. +//it worked buddy. now time to push it +#include <assert.h> +#include <string.h> +#include <chrono> +#include <iostream> +#include <math.h> + + +#include "relax_lagr.h" +#include "scip/scipdefplugins.h" +#include "scip/scip.h" +#include "scip/cons_countsols.c" + +#include "probdata_lagr.h" +#include "vardata_lagr.h" + + + + +#define RELAX_NAME "lagr" +#define RELAX_DESC "relaxator template" +#define RELAX_PRIORITY 0 +#define RELAX_FREQ 0 + + + + +/* + * Data structures + */ + +/* TODO: fill in the necessary relaxator data */ + +/** relaxator data */ +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; +}; + +struct SCIP_VarData +{ + SCIP_VAR* var; + SCIP_CONS** VarConss; + int nVarConss; + SCIP_CONS** VarSlotConss; /**<contains all slot constraints containing the variable */ + int NVarInBadConss; /**<number of slot constraints the variable is occuring in*/ + SCIP_Real varquotient; + int* consids; + int* varids; +}; + + +/** destructor of relaxator to free user data (called when SCIP is exiting) */ +static +SCIP_DECL_RELAXFREE(relaxFreelagr) +{ /*lint --e{715}*/ + SCIPerrorMessage("start executing lagr\n"); + SCIP_RELAXDATA* relaxdata; + relaxdata = SCIPrelaxGetData(relax); + SCIPfreeBlockMemory(scip, &relaxdata); + SCIPrelaxSetData(relax,NULL); + + return SCIP_OKAY; +} + +/** initialization method of relaxator (called after problem was transformed) */ + +int SCIPvardataGetNVarInBadConss( + SCIP_VARDATA* vardata /**< variable data */ +) + { + return vardata->NVarInBadConss; + } + +int* SCIPvardataGetvarids( + SCIP_VARDATA* vardata /**< variable data */ +) + { + return vardata->varids; + } + + +static +SCIP_DECL_RELAXINIT(relaxInitlagr) +{ /*lint --e{715}*/ + + // 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); + + // /* create the variable mapping hash map */ + // SCIP_CALL( SCIPcreate(&relaxscip) ); + // SCIP_CALL( SCIPhashmapCreate(&varmap, SCIPblkmem(relaxscip), SCIPgetNVars(scip)) ); + // 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) */ + // /***************************************************************************************************************/ + // 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* 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) */ + // { + + // // 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)); + + + // 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 = 150.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] = 0; + // sumofduals+=dualmultipliers[r]; //adds the negative of the minimum in each iteration + + // } + + + + // /*******************************************************************************************************/ + // /* 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"); + + + // int maxiter=125; + // fprintf(lower,"%d\n",maxiter); + + // 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)); + // // 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;} + // // } + + + + // stepsize = 15000/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]; + // 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) ); + + + + + // 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); + + // // 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 + + // int sum=0; + // sumofduals = 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 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); + + + /* free memory */ + // SCIPhashmapFree(&varmap); + // SCIP_CALL( SCIPfree(&relaxscip) ); + + + + return SCIP_OKAY; +} + + + + +/** deinitialization method of relaxator (called before transformed problem is freed) */ +#if 0 +static +SCIP_DECL_RELAXEXIT(relaxExitlagr) +{ /*lint --e{715}*/ + SCIPerrorMessage("method of lagr relaxator not implemented yet\n"); + SCIPABORT(); /*lint --e{527}*/ + + return SCIP_OKAY; +} +#else +#define relaxExitlagr NULL +#endif + + +/** solving process initialization method of relaxator (called when branch and bound process is about to begin) */ +#if 0 +static +SCIP_DECL_RELAXINITSOL(relaxInitsollagr) +{ /*lint --e{715}*/ + SCIPerrorMessage("method of lagr relaxator not implemented yet\n"); + SCIPABORT(); /*lint --e{527}*/ + + return SCIP_OKAY; +} +#else +#define relaxInitsollagr NULL +#endif + + +/** solving process deinitialization method of relaxator (called before branch and bound process data is freed) */ +#if 0 +static +SCIP_DECL_RELAXEXITSOL(relaxExitsollagr) +{ /*lint --e{715}*/ + printf("hellow\n"); + + + return SCIP_OKAY; + +} +#else +#define relaxExitsollagr NULL +#endif + + +/** execution method of relaxator */ +static +SCIP_DECL_RELAXEXEC(relaxExeclagr) +{ + 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); + + /* create the variable mapping hash map */ + SCIP_CALL( SCIPcreate(&relaxscip) ); + SCIP_CALL( SCIPhashmapCreate(&varmap, SCIPblkmem(relaxscip), SCIPgetNVars(scip)) ); + 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) */ + /***************************************************************************************************************/ + 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* 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) */ + { + + // 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)); + + + FILE* AfterPreProcessing; + AfterPreProcessing = fopen("AfterPreProcessing.txt","w+"); + + // SCIP_CALL(SCIPprintOrigProḅlem(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) + { + + dualmultipliers[r] = 0; + sumofduals+=dualmultipliers[r]; //adds the negative of the minimum in each iteration + + } + + + + /*******************************************************************************************************/ + /* 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"); + + + int maxiter=50; + fprintf(lower,"%d\n",maxiter); + + 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)); + // 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;} + // } + + + + stepsize = 15000/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]; + 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) ); + + + + + 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); + + // 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 + + int sum=0; + sumofduals = 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 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); + + if( SCIPgetStatus(relaxscip) == SCIP_STATUS_OPTIMAL ) + { + /* store relaxation solution in original SCIP if it improves the best relaxation solution thus far */ + 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 ) + { + SCIP_VAR* relaxvar; + SCIP_Real solval; + + relaxvar = (SCIP_VAR*)SCIPhashmapGetImage(varmap, SCIPgetVars(scip)[i]); + assert(relaxvar != NULL); + + solval = SCIPgetSolVal(relaxscip, SCIPgetBestSol(relaxscip), relaxvar); + + SCIP_CALL( SCIPsetRelaxSolVal(scip, relax, SCIPgetVars(scip)[i], solval) ); + } + + /* mark relaxation solution to be valid and inform SCIP that the relaxation included all LP rows */ + SCIP_CALL( SCIPmarkRelaxSolValid(scip, relax, TRUE) ); + } + + SCIPdebugMsg(scip, "LP lower bound = %g\n", relaxval); + + *lowerbound = relaxval; + *result = SCIP_SUCCESS; + } + else if( SCIPgetStatus(relaxscip) == SCIP_STATUS_INFEASIBLE ) + { + SCIPdebugMsg(scip, "cutting off node\n"); + *result = SCIP_CUTOFF; + } + + /* free memory */ + SCIPhashmapFree(&varmap); + SCIP_CALL( SCIPfree(&relaxscip) ); + return SCIP_OKAY; +} + + + + + + +/* + * relaxator specific interface methods + */ + +/** creates the lagr relaxator and includes it in SCIP */ +SCIP_RETCODE SCIPincludeRelaxlagrangian( + SCIP* scip /**< SCIP data structure */ + ) +{ + SCIP_RELAXDATA* relaxdata; + SCIP_RELAX* relax; + + /* create lagr relaxator data */ + SCIP_CALL(SCIPallocMemory(scip, &relaxdata)); + relaxdata = NULL; + /* TODO: (optional) create relaxator specific data here */ + + relax = NULL; + + /* include relaxator */ +#if 0 + /* use SCIPincludeRelax() if you want to set all callbacks explicitly and realize (by getting compiler errors) when + * new callbacks are added in future SCIP versions + */ + SCIP_CALL( SCIPincludeRelax(scip, RELAX_NAME, RELAX_DESC, RELAX_PRIORITY, RELAX_FREQ, RELAX_INCLUDESLP, + relaxCopylagr, relaxFreelagr, relaxInitlagr, relaxExitlagr, relaxInitsollagr, relaxExitsollagr, relaxExeclagr, + relaxdata) ); +#else + /* use SCIPincludeRelaxBasic() plus setter functions if you want to set callbacks one-by-one and your code should + * compile independent of new callbacks being added in future SCIP versions + */ + SCIP_CALL( SCIPincludeRelaxBasic(scip, &relax, RELAX_NAME, RELAX_DESC, RELAX_PRIORITY, RELAX_FREQ, + relaxExeclagr, relaxdata) ); + + assert(relax != NULL); + + /* set non fundamental callbacks via setter functions */ + // SCIP_CALL( SCIPsetRelaxCopy(scip, relax, relaxCopylagr) ); + SCIP_CALL( SCIPsetRelaxFree(scip, relax, relaxFreelagr) ); + SCIP_CALL( SCIPsetRelaxInit(scip, relax, relaxInitlagr) ); + SCIP_CALL( SCIPsetRelaxExit(scip, relax, relaxExitlagr) ); + SCIP_CALL( SCIPsetRelaxInitsol(scip, relax, relaxInitsollagr) ); + SCIP_CALL( SCIPsetRelaxExitsol(scip, relax, relaxExitsollagr) ); +#endif + + /* add lagr relaxator parameters */ + /* TODO: (optional) add relaxator specific parameters with SCIPaddTypeParam() here */ + + return SCIP_OKAY; +} diff --git a/src/relax_lagr.cpp b/src/relax_lagr.cpp index 8ae0d5ab78c9caa0b3e758c5f36416e5155d11ab..dcc27e4dcc6fe23462e4560089a84088c06cfeda 100644 --- a/src/relax_lagr.cpp +++ b/src/relax_lagr.cpp @@ -110,169 +110,171 @@ int* SCIPvardataGetvarids( } + static SCIP_DECL_RELAXINIT(relaxInitlagr) { /*lint --e{715}*/ - // 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); - - // /* create the variable mapping hash map */ - // SCIP_CALL( SCIPcreate(&relaxscip) ); - // SCIP_CALL( SCIPhashmapCreate(&varmap, SCIPblkmem(relaxscip), SCIPgetNVars(scip)) ); - // 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) */ - // /***************************************************************************************************************/ - // int nvars = SCIPgetNVars(relaxscip); - // SCIP_VAR** vars = SCIPgetVars(relaxscip); - // SCIP_VAR** varbuffers; - // int* badconss; + 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); + + /* create the variable mapping hash map */ + SCIP_CALL( SCIPcreate(&relaxscip) ); + SCIP_CALL( SCIPhashmapCreate(&varmap, SCIPblkmem(relaxscip), SCIPgetNVars(scip)) ); + 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) */ + /***************************************************************************************************************/ + 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)); + + SCIP_CLOCK* totaliteration; //to help us record the time + SCIP_CALL( SCIPcreateClock(relaxscip, &totaliteration) ); //* start time counting* - // 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)); + int* consids; - // SCIP_CALL(SCIPallocBufferArray(relaxscip,&consids,nSlotConss)); + SCIP_Real* weights; + SCIP_CALL(SCIPallocBufferArray(relaxscip,&weights,nvars)); - // for (int v = 0; v < nvars; v++) - // { - // SCIP_VAR* var = vars[v]; - // weights[v]=SCIPvarGetObj(var); - // } + SCIP_CALL(SCIPallocBufferArray(relaxscip,&consids,nSlotConss)); - // for (int v = 0; v < nvars; v++) - // { - // int* varids; - // int NVarInBadConss=0; - // int nconsvars = 0; - // SCIP_VAR* var = vars[v]; + SCIP_Real maxobj=0; + for (int v = 0; v < nvars; v++) + { + SCIP_VAR* var = vars[v]; + weights[v]=SCIPvarGetObj(var); + if(maxobj<weights[v]){maxobj=weights[v];} + } + + 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); + 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 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); + 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[NVarInBadConss] = cons; - // consids[NVarInBadConss]=id; - // NVarInBadConss++; - // // printf(" %s \t,",SCIPconsGetName(cons)); - // } - // } - // } + // 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]); - // } + 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(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)); + SCIP_CALL(SCIPstopClock(relaxscip,varslottime)); - // FILE* AfterPreProcessing; - // AfterPreProcessing = fopen("AfterPreProcessing.txt","w+"); + FILE* AfterPreProcessing; + AfterPreProcessing = fopen("AfterPreProcessing.txt","w+"); - // // SCIP_CALL(SCIPprintOrigProblem(relaxscip, AfterPreProcessing, "lp", FALSE)); + // 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)); - // } + 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)); + /******************************************************************************************************************/ + /*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 = 150.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] = 0; - // sumofduals+=dualmultipliers[r]; //adds the negative of the minimum in each iteration - - // } + SCIP_Real* subgradients; + SCIP_CALL(SCIPallocBufferArray(relaxscip,&subgradients,nSlotConss)); + //initialize subgradients; + SCIP_Real stepsize = 15; + SCIP_Real sumofduals=0; + for ( int r = 0; r < nSlotConss; ++r) + { + dualmultipliers[r] = 0; + sumofduals+=dualmultipliers[r]; //adds the negative of the minimum in each iteration + } @@ -284,209 +286,228 @@ SCIP_DECL_RELAXINIT(relaxInitlagr) // /* 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"); - - // int maxiter=125; - // fprintf(lower,"%d\n",maxiter); - - // for(int iter=1;iter<=maxiter;iter++) - // { - - // for(int v=0;v<nvars;v++) - // { - // SCIP_VAR* var = vars[v]; - // double sum =SCIPvarGetObj(var); + + 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"); + FILE* iter; + iter=fopen("iter.txt","wr"); + + + //fprintf(lower, "hi"); + SCIP_Real* solvals; + SCIP_CALL(SCIPallocBufferArray(relaxscip,&solvals,nvars+2)); + solvals[nvars+1]=0; //for last solutions + solvals[nvars]=0; //for best solution + + int maxiter=1500; + + int oscilatecounter=0; + int improvementcounter = 0; + SCIP_Real oscilator1=0; + SCIP_Real oscilator2=0; + SCIP_Real forcompare = -1000000000000000000; + SCIP_CALL(SCIPstartClock(relaxscip,totaliteration)); + + for(int iter=1;iter<=maxiter;iter++) + { + + for(int v=0;v<nvars;v++) + { + SCIP_VAR* var = vars[v]; + double sum =0; - // vardata=SCIPvarGetData(var); - // int* varids = SCIPvardataGetvarids(vardata); - // int NVarInBadConss = SCIPvardataGetNVarInBadConss(vardata); + vardata=SCIPvarGetData(var); + int* varids = SCIPvardataGetvarids(vardata); + assert(varids=!NULL); + int NVarInBadConss = SCIPvardataGetNVarInBadConss(vardata); + // if(NVarInBadConss==0){SCIPsetSolVal(relaxscip,) break;} + // else + // { + // SCIP_CALL(SCIPprintOrigProblem(relaxscip, AfterPreProcessing, "lp", FALSE)); + // fprintf(varobjects,"%s \n",SCIPvarGetName(var)); + for(int t=0;t<NVarInBadConss;t++) + { + sum += dualmultipliers[varids[t]]; + // fprintf(varobjects,"{id = %d, dual = %f, sum = %f\t",varids[t], dualmultipliers[varids[t]],sum); + } + // fprintf(varobjects,"}\n\n"); + SCIP_CALL(SCIPaddVarObj(relaxscip,var,sum)); - // // 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)); + + } + + SCIPinfoMessage(relaxscip, TimeCollector, "\n finished changing the variable's weight after (sec) : %f\n", SCIPgetClockTime(relaxscip, totaliteration)); - // SCIP_CALL(SCIPaddOrigObjoffset(relaxscip,-1*sumofduals)); - // // SCIP_CALL(SCIPprintOrigProblem(relaxscip, AfterPreProcessing, "lp", FALSE)); - // SCIPsetMessagehdlrQuiet(relaxscip, TRUE); - // // fclose(AfterPreProcessing); + 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); - // // 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_CALL( SCIPtransformProb(relaxscip) ); + SCIP_CALL( SCIPsolve(relaxscip) ); + relaxval = SCIPgetPrimalbound(relaxscip); + //printf("\ndualbound %f \n",SCIPgetDualbound(relaxscip)); + fprintf(lower,"%f\n",SCIPgetPrimalbound(relaxscip)); + SCIPdebugMessage("relaxation bound = %e status = %d\n", relaxval, SCIPgetStatus(relaxscip)); - // SCIP_Real* solvals; - // SCIP_CALL(SCIPallocBufferArray(relaxscip,&solvals,nvars+1)); - + /*store the highest lower bound*/ + if(solvals[nvars]<SCIPgetPrimalbound(relaxscip)){solvals[nvars]=SCIPgetPrimalbound(relaxscip);} + fprintf(variableinfo,"%f\n",solvals[nvars]); - // /*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)); + /*make sure we're not oscilating by adding a counter, which checks the absolute value between the difference of the previous few steps and make sure it's not the same. */ + oscilator2=abs(solvals[nvars+1]-SCIPgetPrimalbound(relaxscip)); + if(oscilator1==oscilator2){oscilatecounter++;} + else{oscilator1=oscilator2; oscilatecounter==0;} + //if(oscilatecounter==5){printf("repetition"); break;} + //printf("dprev.sol=%f, current=%f, difference %f, coutner=%d, ",solvals[nvars+1],SCIPgetPrimalbound(relaxscip), oscilator2, oscilatecounter); + + /*store the solution on the last entry of solvals, so we can compare it in the next round for repetitions*/ + solvals[nvars+1]=SCIPgetPrimalbound(relaxscip); - // SCIP_Real compare=0; - // for (int v = 0; v<nvars; ++v) - // { - // compare += solvals[v]*weights[v]; - // } + /*breaking criteria for iterations*/ + if(solvals[nvars]>forcompare){forcompare=solvals[nvars]; improvementcounter=0;} + else{improvementcounter++;} + //if(improvementcounter==10){break; fprintf(variableinfo,"%d\n",iter);} + printf("terminator %d",improvementcounter); - // 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;} - // // } + /*get the best solution*/ + SCIP_SOL* bestsol = SCIPgetBestSol(relaxscip) ; + SCIP_SOL** sols = SCIPgetSols(relaxscip); + int nsols = SCIPgetNSols(relaxscip); + //fprintf(lower,"%d iteration \n",iter); + for(int n=0; n<nsols; n++) + { + //SCIP_CALL(SCIPprintSol(relaxscip,sols[n],lower,FALSE)); + } - // stepsize = 15000/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); + /*text output*/ + //SCIPinfoMessage(relaxscip, TimeCollector, "\n first iteration: problem solved after (sec) : %f\n", SCIPgetClockTime(relaxscip, totaliteration)); + 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)); - // SCIP_CALL(SCIPaddOrigObjoffset(relaxscip,sumofduals)); - // // SCIP_CALL( SCIPfreeTransform(relaxscip) ); - // // SCIP_CALL( SCIPtransformProb(relaxscip) ); + /*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)); - // 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); + SCIP_Real compare=0; + for (int v = 0; v<nvars; ++v) + { + compare += solvals[v]*weights[v]; + } + + + + //stepsize = (stepsize+iter)/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]; + 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]); + 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;} + } + /*breaking condition on finding a feasible solution*/ + if(checker==0){printf("#*#*#*result found\n"); break;} - // SCIP_CALL( SCIPfreeTransform(relaxscip) ); - // SCIP_CALL( SCIPtransformProb(relaxscip) ); + SCIP_CALL( SCIPfreeTransform(relaxscip) ); + SCIP_CALL( SCIPtransformProb(relaxscip) ); - // for (int v = 0; v<nvars; ++v) - // { - // SCIP_VAR* var = vars[v]; + 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(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); - // // 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 + SCIP_Real difference = 3000000-SCIPgetPrimalbound(relaxscip); + if(improvementcounter<5){stepsize = 0.25*(difference)/(getnorm(subgradients,nSlotConss,stepsize)*getnorm(subgradients,nSlotConss,stepsize));} + else{stepsize = 0.1*(difference)/(getnorm(subgradients,nSlotConss,stepsize)*getnorm(subgradients,nSlotConss,stepsize));} + //fprintf(dual,"dualbound = %f, lowerbound=%f, norm of subgrad %f\t stepsize= %f \n" ,SCIPgetPrimalbound(relaxscip),lowerbound, getnorm(subgradients,nSlotConss,stepsize), 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 - // int sum=0; - // sumofduals = 0; + int sum=0; + sumofduals = 0; - // for(int r=0; r<nSlotConss;++r) - // { - // dualmultipliers[r] += subgradients[r]*stepsize; - // if(dualmultipliers[r]<0){dualmultipliers[r]=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 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); + sumofduals+=dualmultipliers[r]; + //fprintf(dual," then dual = %f step size %f, subgradient %f \n",dualmultipliers[r], stepsize,subgradients[r]); + } + // sumofduals=sum; + // fprintf(dual,"iteration %d, sumofduals=%f\n",iter, sumofduals); + SCIPinfoMessage(relaxscip, TimeCollector, "%f\n", SCIPgetClockTime(relaxscip, totaliteration)); + // 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); - /* free memory */ - // SCIPhashmapFree(&varmap); - // SCIP_CALL( SCIPfree(&relaxscip) ); + SCIPhashmapFree(&varmap); + SCIP_CALL( SCIPfree(&relaxscip) ); + + return SCIP_OKAY; } @@ -544,7 +565,6 @@ SCIP_DECL_RELAXEXITSOL(relaxExitsollagr) static SCIP_DECL_RELAXEXEC(relaxExeclagr) { - /*lint --e{715}*/ SCIP* relaxscip; SCIP_HASHMAP* varmap; SCIP_HASHMAP* consmap; @@ -560,8 +580,8 @@ SCIP_DECL_RELAXEXEC(relaxExeclagr) int id; - // *lowerbound = -SCIPinfinity(scip); - // *result = SCIP_DIDNOTRUN; + *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); @@ -573,343 +593,347 @@ SCIP_DECL_RELAXEXEC(relaxExeclagr) 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) */ - /***************************************************************************************************************/ - int nvars = SCIPgetNVars(relaxscip); - SCIP_VAR** vars = SCIPgetVars(relaxscip); - SCIP_VAR** varbuffers; - int* badconss; + // /**************************************************************************************************************/ + // /*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; - 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); + // 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)); + // /* 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; + // // int nconsvars=0; + // int* consids; - SCIP_Real* weights; - SCIP_CALL(SCIPallocBufferArray(relaxscip,&weights,nvars)); + // SCIP_Real* weights; + // SCIP_CALL(SCIPallocBufferArray(relaxscip,&weights,nvars)); - SCIP_CALL(SCIPallocBufferArray(relaxscip,&consids,nSlotConss)); + // 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++) + // { + // 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]; + // 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); + // 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(); } + // // 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); + // 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[NVarInBadConss] = cons; - consids[NVarInBadConss]=id; - NVarInBadConss++; - // printf(" %s \t,",SCIPconsGetName(cons)); - } - } - } + // // 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]); - } + // 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); - } + // // 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)); + // // SCIP_CALL(SCIPstopClock(relaxscip,varslottime)); - FILE* AfterPreProcessing; - AfterPreProcessing = fopen("AfterPreProcessing.txt","w+"); + // FILE* AfterPreProcessing; + // AfterPreProcessing = fopen("AfterPreProcessing.txt","w+"); - // SCIP_CALL(SCIPprintOrigProḅlem(relaxscip, AfterPreProcessing, "lp", FALSE)); + // // 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)); - } + // 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)); + // /******************************************************************************************************************/ + // /*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) - { - - dualmultipliers[r] = 0; - sumofduals+=dualmultipliers[r]; //adds the negative of the minimum in each iteration - - } + // 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) + // { + // dualmultipliers[r] = 0; + // sumofduals+=dualmultipliers[r]; //adds the negative of the minimum in each iteration + // } - /*******************************************************************************************************/ - /* 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"); + // /*******************************************************************************************************/ + // /* 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"); + // FILE* iter; + // lower=fopen("iter.txt","wr"); - int maxiter=50; - fprintf(lower,"%d\n",maxiter); - for(int iter=1;iter<=maxiter;iter++) - { + // SCIP_Real* solvals; + // SCIP_CALL(SCIPallocBufferArray(relaxscip,&solvals,nvars+2)); + // solvals[nvars+1]=0; //for last solutions + // solvals[nvars]=0; //for best solution + + // int maxiter=125; + + // int oscilatecounter=0; + // int improvementcounter = 0; + // SCIP_Real oscilator1=0; + // SCIP_Real oscilator2=0; + // SCIP_Real forcompare = 0.000; + + // fprintf(lower,"%d\n",maxiter); + + // for(int iter=1;iter<=maxiter;iter++) + // { - for(int v=0;v<nvars;v++) - { - SCIP_VAR* var = vars[v]; - double sum =SCIPvarGetObj(var); + // for(int v=0;v<nvars;v++) + // { + // SCIP_VAR* var = vars[v]; + // double sum =0; - vardata=SCIPvarGetData(var); - int* varids = SCIPvardataGetvarids(vardata); - int NVarInBadConss = SCIPvardataGetNVarInBadConss(vardata); + // vardata=SCIPvarGetData(var); + // int* varids = SCIPvardataGetvarids(vardata); + // assert(varids=!NULL); + // int NVarInBadConss = SCIPvardataGetNVarInBadConss(vardata); + // if(NVarInBadConss==0){break;} + // else + // { + // SCIP_CALL(SCIPprintOrigProblem(relaxscip, AfterPreProcessing, "lp", FALSE)); + // fprintf(varobjects,"%s \n",SCIPvarGetName(var)); + // for(int t=0;t<NVarInBadConss;t++) + // { + // sum += dualmultipliers[varids[t]]; + // fprintf(varobjects,"{id = %d, dual = %f, sum = %f\t",varids[t], dualmultipliers[varids[t]],sum); + // } + // fprintf(varobjects,"}\n\n"); + // SCIP_CALL(SCIPaddVarObj(relaxscip,var,sum)); - // 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]; + + // } + + // SCIPinfoMessage(relaxscip, TimeCollector, "\n finished changing the variable's weight after (sec) : %f\n", SCIPgetClockTime(relaxscip, varslottime)); - // printf("(%s, duals = %f) \t",SCIPconsGetName(SCIPgetConss(scip)[id]), dualmultipliers[id]); - // } + // 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); + // printf("\ndualbound %f \n",SCIPgetDualbound(relaxscip)); + // fprintf(lower,"%f",SCIPgetPrimalbound(relaxscip)); + // SCIPdebugMessage("relaxation bound = %e status = %d\n", relaxval, SCIPgetStatus(relaxscip)); + + // /*store the highest lower bound*/ + // if(solvals[nvars]<SCIPgetPrimalbound(relaxscip)){solvals[nvars]=SCIPgetPrimalbound(relaxscip);fprintf(variableinfo,} + // fprintf(variableinfo,"%f\n",solvals[nvars]); + - SCIPinfoMessage(relaxscip, TimeCollector, "\n finished changing the variable's weight after (sec) : %f\n", SCIPgetClockTime(relaxscip, varslottime)); + + // /*make sure we're not oscilating by adding a counter, which checks the absolute value between the difference of the previous few steps and make sure it's not the same. */ + // oscilator2=abs(solvals[nvars+1]-SCIPgetPrimalbound(relaxscip)); + // if(oscilator1==oscilator2){oscilatecounter++;} + // else(oscilator1=oscilator2); + // if(oscilatecounter==5){printf("repetition"); break;} + // printf("dprev.sol=%f, current=%f, difference %f, coutner=%d, ",solvals[nvars+1],SCIPgetPrimalbound(relaxscip), oscilator2, oscilatecounter); - SCIP_CALL(SCIPaddOrigObjoffset(relaxscip,-1*sumofduals)); - // SCIP_CALL(SCIPprintOrigProblem(relaxscip, AfterPreProcessing, "lp", FALSE)); - SCIPsetMessagehdlrQuiet(relaxscip, TRUE); - // fclose(AfterPreProcessing); + // /*store the solution on the last entry of solvals, so we can compare it in the next round for repetitions*/ + // solvals[nvars+1]=SCIPgetPrimalbound(relaxscip); - 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); + // /*breaking criteria for iterations*/ + // if(solvals[nvars]>forcompare){forcompare=solvals[nvars];} + // else{improvementcounter++;} + // if(improvementcounter==5){break;} - SCIP_Real* solvals; - SCIP_CALL(SCIPallocBufferArray(relaxscip,&solvals,nvars+1)); - + // /*get the best solution*/ + // SCIP_SOL* bestsol = SCIPgetBestSol(relaxscip) ; + // SCIP_SOL** sols = SCIPgetSols(relaxscip); + // int nsols = SCIPgetNSols(relaxscip); - /*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]; - } + // /*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)); - 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;} - // } - - + // /*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)); - stepsize = 15000/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_Real compare=0; + // for (int v = 0; v<nvars; ++v) + // { + // compare += solvals[v]*weights[v]; + // } - 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]; - 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); + // // 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)); + // // 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]); + // 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;} + // } + // /*breaking condition on finding a feasible solution*/ + // if(checker==0){printf("#*#*#*result found\n"); break;} - SCIP_CALL( SCIPfreeTransform(relaxscip) ); - SCIP_CALL( SCIPtransformProb(relaxscip) ); + // SCIP_CALL( SCIPfreeTransform(relaxscip) ); + // SCIP_CALL( SCIPtransformProb(relaxscip) ); - for (int v = 0; v<nvars; ++v) - { - SCIP_VAR* var = vars[v]; + // 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(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); - // 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); + // // 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 + // //add back the sum of the duals we subtracted from the main obj function - int sum=0; - sumofduals = 0; + // int sum=0; + // sumofduals = 0; - for(int r=0; r<nSlotConss;++r) - { - dualmultipliers[r] += subgradients[r]*stepsize; - if(dualmultipliers[r]<0){dualmultipliers[r]=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 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); + // 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); if( SCIPgetStatus(relaxscip) == SCIP_STATUS_OPTIMAL ) { diff --git a/time.txt b/time.txt index 41ac65c33a3dc34a646bcd3e18b812e723296f81..f2b1d97262164ff8c5e6d514d1424b8f06d787a3 100644 --- a/time.txt +++ b/time.txt @@ -1,452 +1,1954 @@ - row and column identified in (sec) : 0.000055 + row and column identified in (sec) : 5.892216 - finished changing the variable's weight after (sec) : 0.000169 + finished changing the variable's weight after (sec) : 0.000992 +0.247141 - first iteration: problem solved after (sec) : 0.000911 + finished changing the variable's weight after (sec) : 0.248208 +0.491481 - subgradients found after (sec) : 0.001427 -, lowerbound = 1.000000 + finished changing the variable's weight after (sec) : 0.492452 +0.743971 - new dual found after (sec) : 0.001440 + finished changing the variable's weight after (sec) : 0.744951 +1.000979 - finished changing the variable's weight after (sec) : 0.001445 + finished changing the variable's weight after (sec) : 1.001950 +1.262309 - first iteration: problem solved after (sec) : 0.002197 + finished changing the variable's weight after (sec) : 1.263233 +1.525979 - subgradients found after (sec) : 0.002898 -, lowerbound = 30.000000 + finished changing the variable's weight after (sec) : 1.526949 +1.793930 - new dual found after (sec) : 0.002912 + finished changing the variable's weight after (sec) : 1.794884 +2.065105 - finished changing the variable's weight after (sec) : 0.002917 + finished changing the variable's weight after (sec) : 2.066069 +2.344470 - first iteration: problem solved after (sec) : 0.003969 + finished changing the variable's weight after (sec) : 2.345411 +2.629939 - subgradients found after (sec) : 0.005664 -, lowerbound = 60.000000 + finished changing the variable's weight after (sec) : 2.630915 +2.909456 - new dual found after (sec) : 0.005679 + finished changing the variable's weight after (sec) : 2.910431 +3.189980 - finished changing the variable's weight after (sec) : 0.005686 + finished changing the variable's weight after (sec) : 3.190971 +3.457004 - first iteration: problem solved after (sec) : 0.006755 + finished changing the variable's weight after (sec) : 3.457967 +3.736238 - subgradients found after (sec) : 0.007419 -, lowerbound = 1.000000 + finished changing the variable's weight after (sec) : 3.737181 +4.015655 - new dual found after (sec) : 0.007432 + finished changing the variable's weight after (sec) : 4.016587 +4.288782 - finished changing the variable's weight after (sec) : 0.007437 + finished changing the variable's weight after (sec) : 4.289743 +4.561139 - first iteration: problem solved after (sec) : 0.008202 + finished changing the variable's weight after (sec) : 4.562088 +4.843824 - subgradients found after (sec) : 0.010177 -, lowerbound = 30.000000 + finished changing the variable's weight after (sec) : 4.844746 +5.125823 - new dual found after (sec) : 0.010192 + finished changing the variable's weight after (sec) : 5.126803 +5.409137 - finished changing the variable's weight after (sec) : 0.010197 + finished changing the variable's weight after (sec) : 5.410105 +5.688909 - first iteration: problem solved after (sec) : 0.011938 + finished changing the variable's weight after (sec) : 5.689848 +5.971025 - subgradients found after (sec) : 0.013588 -, lowerbound = 60.000000 + finished changing the variable's weight after (sec) : 5.971956 +6.253414 - new dual found after (sec) : 0.013603 + finished changing the variable's weight after (sec) : 6.254443 +6.535378 - finished changing the variable's weight after (sec) : 0.013608 + finished changing the variable's weight after (sec) : 6.536341 +6.816227 - first iteration: problem solved after (sec) : 0.015446 + finished changing the variable's weight after (sec) : 6.817191 +7.121032 - subgradients found after (sec) : 0.017200 -, lowerbound = 1.000000 + finished changing the variable's weight after (sec) : 7.121997 +7.400755 - new dual found after (sec) : 0.017216 + finished changing the variable's weight after (sec) : 7.401698 +7.680134 - finished changing the variable's weight after (sec) : 0.017224 + finished changing the variable's weight after (sec) : 7.681053 +7.959580 - first iteration: problem solved after (sec) : 0.019215 + finished changing the variable's weight after (sec) : 7.960522 +8.235626 - subgradients found after (sec) : 0.020945 -, lowerbound = 30.000000 + finished changing the variable's weight after (sec) : 8.236564 +8.512144 - new dual found after (sec) : 0.020960 + finished changing the variable's weight after (sec) : 8.513092 +8.789631 - finished changing the variable's weight after (sec) : 0.020964 + finished changing the variable's weight after (sec) : 8.790588 +9.068874 - first iteration: problem solved after (sec) : 0.023213 + finished changing the variable's weight after (sec) : 9.069795 +9.350248 - subgradients found after (sec) : 0.025102 -, lowerbound = 60.000000 + finished changing the variable's weight after (sec) : 9.351185 +9.627496 - new dual found after (sec) : 0.025117 + finished changing the variable's weight after (sec) : 9.628458 +9.907019 - finished changing the variable's weight after (sec) : 0.025122 + finished changing the variable's weight after (sec) : 9.907952 +10.181124 - first iteration: problem solved after (sec) : 0.027480 + finished changing the variable's weight after (sec) : 10.182092 +10.457857 - subgradients found after (sec) : 0.029355 -, lowerbound = 1.000000 + finished changing the variable's weight after (sec) : 10.458805 +10.724035 - new dual found after (sec) : 0.029371 + finished changing the variable's weight after (sec) : 10.724966 +11.003525 - finished changing the variable's weight after (sec) : 0.029376 + finished changing the variable's weight after (sec) : 11.004441 +11.285199 - first iteration: problem solved after (sec) : 0.031981 + finished changing the variable's weight after (sec) : 11.286162 +11.565343 - subgradients found after (sec) : 0.033981 -, lowerbound = 30.000000 + finished changing the variable's weight after (sec) : 11.566283 +11.843482 - new dual found after (sec) : 0.033995 + finished changing the variable's weight after (sec) : 11.844417 +12.119817 - finished changing the variable's weight after (sec) : 0.034000 + finished changing the variable's weight after (sec) : 12.120757 +12.397025 - first iteration: problem solved after (sec) : 0.036610 + finished changing the variable's weight after (sec) : 12.397941 +12.678396 - subgradients found after (sec) : 0.038584 -, lowerbound = 60.000000 + finished changing the variable's weight after (sec) : 12.679328 +12.958683 - new dual found after (sec) : 0.038597 + finished changing the variable's weight after (sec) : 12.959613 +13.236010 - finished changing the variable's weight after (sec) : 0.038602 + finished changing the variable's weight after (sec) : 13.236943 +13.516583 - first iteration: problem solved after (sec) : 0.041170 + finished changing the variable's weight after (sec) : 13.517517 +13.793958 - subgradients found after (sec) : 0.043030 -, lowerbound = 1.000000 + finished changing the variable's weight after (sec) : 13.794907 +14.065377 - new dual found after (sec) : 0.043043 + finished changing the variable's weight after (sec) : 14.066328 +14.377505 - finished changing the variable's weight after (sec) : 0.043048 + finished changing the variable's weight after (sec) : 14.378630 +14.652401 - first iteration: problem solved after (sec) : 0.045587 + finished changing the variable's weight after (sec) : 14.653451 +14.928296 - subgradients found after (sec) : 0.047498 -, lowerbound = 30.000000 + finished changing the variable's weight after (sec) : 14.929319 +15.211655 - new dual found after (sec) : 0.047511 + finished changing the variable's weight after (sec) : 15.212642 +15.488599 - finished changing the variable's weight after (sec) : 0.047516 + finished changing the variable's weight after (sec) : 15.489565 +15.766486 - first iteration: problem solved after (sec) : 0.049942 + finished changing the variable's weight after (sec) : 15.767436 +16.045703 - subgradients found after (sec) : 0.051783 -, lowerbound = 60.000000 + finished changing the variable's weight after (sec) : 16.046673 +16.326163 - new dual found after (sec) : 0.051796 + finished changing the variable's weight after (sec) : 16.327091 +16.604902 - finished changing the variable's weight after (sec) : 0.051802 + finished changing the variable's weight after (sec) : 16.605879 +16.884864 - first iteration: problem solved after (sec) : 0.054421 + finished changing the variable's weight after (sec) : 16.885797 +17.162426 - subgradients found after (sec) : 0.056596 -, lowerbound = 1.000000 + finished changing the variable's weight after (sec) : 17.163354 +17.438359 - new dual found after (sec) : 0.056613 + finished changing the variable's weight after (sec) : 17.439292 +17.724774 - finished changing the variable's weight after (sec) : 0.056618 + finished changing the variable's weight after (sec) : 17.725724 +18.021996 - first iteration: problem solved after (sec) : 0.059167 + finished changing the variable's weight after (sec) : 18.023204 +18.352747 - subgradients found after (sec) : 0.061021 -, lowerbound = 30.000000 + finished changing the variable's weight after (sec) : 18.353839 +18.725361 - new dual found after (sec) : 0.061036 + finished changing the variable's weight after (sec) : 18.726491 +19.055019 - finished changing the variable's weight after (sec) : 0.061041 + finished changing the variable's weight after (sec) : 19.056101 +19.370904 - first iteration: problem solved after (sec) : 0.063553 + finished changing the variable's weight after (sec) : 19.372054 +19.693206 - subgradients found after (sec) : 0.065522 -, lowerbound = 1.000000 + finished changing the variable's weight after (sec) : 19.694316 +19.992940 - new dual found after (sec) : 0.065537 + finished changing the variable's weight after (sec) : 19.993912 +20.330565 - finished changing the variable's weight after (sec) : 0.065542 + finished changing the variable's weight after (sec) : 20.331639 +20.620395 - first iteration: problem solved after (sec) : 0.068129 + finished changing the variable's weight after (sec) : 20.621356 +20.940031 - subgradients found after (sec) : 0.070059 -, lowerbound = 60.000000 + finished changing the variable's weight after (sec) : 20.941098 +21.239354 - new dual found after (sec) : 0.070076 + finished changing the variable's weight after (sec) : 21.240376 +21.567214 - finished changing the variable's weight after (sec) : 0.070082 + finished changing the variable's weight after (sec) : 21.568389 +21.924884 - first iteration: problem solved after (sec) : 0.072604 + finished changing the variable's weight after (sec) : 21.926191 +22.258890 - subgradients found after (sec) : 0.074551 -, lowerbound = 30.000000 + finished changing the variable's weight after (sec) : 22.260123 +22.622424 - new dual found after (sec) : 0.074565 + finished changing the variable's weight after (sec) : 22.623375 +22.923193 - finished changing the variable's weight after (sec) : 0.074570 + finished changing the variable's weight after (sec) : 22.924568 +23.231401 - first iteration: problem solved after (sec) : 0.077096 + finished changing the variable's weight after (sec) : 23.232372 +23.550382 - subgradients found after (sec) : 0.078984 -, lowerbound = 1.000000 + finished changing the variable's weight after (sec) : 23.551458 +23.904384 - new dual found after (sec) : 0.078997 + finished changing the variable's weight after (sec) : 23.905584 +24.228552 - finished changing the variable's weight after (sec) : 0.079002 + finished changing the variable's weight after (sec) : 24.229580 +24.533670 - first iteration: problem solved after (sec) : 0.081496 + finished changing the variable's weight after (sec) : 24.534682 +24.854162 - subgradients found after (sec) : 0.083325 -, lowerbound = 60.000000 + finished changing the variable's weight after (sec) : 24.855574 +25.166502 - new dual found after (sec) : 0.083339 + finished changing the variable's weight after (sec) : 25.167504 +25.464516 - finished changing the variable's weight after (sec) : 0.083344 + finished changing the variable's weight after (sec) : 25.465514 +25.760773 - first iteration: problem solved after (sec) : 0.085809 + finished changing the variable's weight after (sec) : 25.761770 +26.053852 - subgradients found after (sec) : 0.087656 -, lowerbound = 15.000000 + finished changing the variable's weight after (sec) : 26.054837 +26.345908 - new dual found after (sec) : 0.087672 + finished changing the variable's weight after (sec) : 26.346999 +26.640923 - finished changing the variable's weight after (sec) : 0.087680 + finished changing the variable's weight after (sec) : 26.641882 +26.949889 - first iteration: problem solved after (sec) : 0.091279 + finished changing the variable's weight after (sec) : 26.950956 +27.249144 - subgradients found after (sec) : 0.094074 -, lowerbound = 15.000000 + finished changing the variable's weight after (sec) : 27.250159 +27.552353 - new dual found after (sec) : 0.094091 + finished changing the variable's weight after (sec) : 27.553412 +27.855877 - finished changing the variable's weight after (sec) : 0.094097 + finished changing the variable's weight after (sec) : 27.856935 +28.161073 - first iteration: problem solved after (sec) : 0.096499 + finished changing the variable's weight after (sec) : 28.162101 +28.465782 - subgradients found after (sec) : 0.098251 -, lowerbound = 15.000000 + finished changing the variable's weight after (sec) : 28.466802 +28.758351 - new dual found after (sec) : 0.098263 + finished changing the variable's weight after (sec) : 28.759347 +29.099824 - finished changing the variable's weight after (sec) : 0.098267 + finished changing the variable's weight after (sec) : 29.100952 +29.487277 - first iteration: problem solved after (sec) : 0.100514 + finished changing the variable's weight after (sec) : 29.488506 +29.797067 - subgradients found after (sec) : 0.102194 -, lowerbound = 15.000000 + finished changing the variable's weight after (sec) : 29.798128 +30.088761 - new dual found after (sec) : 0.102206 + finished changing the variable's weight after (sec) : 30.089791 +30.379004 - finished changing the variable's weight after (sec) : 0.102211 + finished changing the variable's weight after (sec) : 30.380002 +30.675321 - first iteration: problem solved after (sec) : 0.104544 + finished changing the variable's weight after (sec) : 30.676301 +30.966540 - subgradients found after (sec) : 0.106241 -, lowerbound = 15.000000 + finished changing the variable's weight after (sec) : 30.967535 +31.258406 - new dual found after (sec) : 0.106254 + finished changing the variable's weight after (sec) : 31.259403 +31.554602 - finished changing the variable's weight after (sec) : 0.106259 + finished changing the variable's weight after (sec) : 31.555603 +31.846340 - first iteration: problem solved after (sec) : 0.108535 + finished changing the variable's weight after (sec) : 31.847325 +32.121592 - subgradients found after (sec) : 0.110238 -, lowerbound = 15.000000 + finished changing the variable's weight after (sec) : 32.122573 +32.395389 - new dual found after (sec) : 0.110251 + finished changing the variable's weight after (sec) : 32.396314 +32.666812 - finished changing the variable's weight after (sec) : 0.110256 + finished changing the variable's weight after (sec) : 32.667768 +32.938522 - first iteration: problem solved after (sec) : 0.112563 + finished changing the variable's weight after (sec) : 32.939536 +33.205765 - subgradients found after (sec) : 0.114254 -, lowerbound = 15.000000 + finished changing the variable's weight after (sec) : 33.206762 +33.472645 - new dual found after (sec) : 0.114266 + finished changing the variable's weight after (sec) : 33.473611 +33.739725 - finished changing the variable's weight after (sec) : 0.114270 + finished changing the variable's weight after (sec) : 33.740687 +34.008941 - first iteration: problem solved after (sec) : 0.116537 + finished changing the variable's weight after (sec) : 34.009930 +34.288004 - subgradients found after (sec) : 0.118212 -, lowerbound = 15.000000 + finished changing the variable's weight after (sec) : 34.289007 +34.565125 - new dual found after (sec) : 0.118225 + finished changing the variable's weight after (sec) : 34.566158 +34.833119 - finished changing the variable's weight after (sec) : 0.118230 + finished changing the variable's weight after (sec) : 34.834085 +35.134565 - first iteration: problem solved after (sec) : 0.120541 + finished changing the variable's weight after (sec) : 35.135708 +35.493532 - subgradients found after (sec) : 0.122219 -, lowerbound = 15.000000 + finished changing the variable's weight after (sec) : 35.494601 +35.779736 - new dual found after (sec) : 0.122231 + finished changing the variable's weight after (sec) : 35.780703 +36.090842 - finished changing the variable's weight after (sec) : 0.122236 + finished changing the variable's weight after (sec) : 36.092072 +36.438170 - first iteration: problem solved after (sec) : 0.124488 + finished changing the variable's weight after (sec) : 36.439201 +36.704445 - subgradients found after (sec) : 0.126186 -, lowerbound = 15.000000 + finished changing the variable's weight after (sec) : 36.705440 +36.973841 - new dual found after (sec) : 0.126200 + finished changing the variable's weight after (sec) : 36.974886 +37.298215 - finished changing the variable's weight after (sec) : 0.126204 + finished changing the variable's weight after (sec) : 37.299417 +37.594601 - first iteration: problem solved after (sec) : 0.128470 + finished changing the variable's weight after (sec) : 37.595614 +37.862530 - subgradients found after (sec) : 0.130201 -, lowerbound = 15.000000 + finished changing the variable's weight after (sec) : 37.863584 +38.132876 - new dual found after (sec) : 0.130214 + finished changing the variable's weight after (sec) : 38.133859 +38.412841 - finished changing the variable's weight after (sec) : 0.130219 + finished changing the variable's weight after (sec) : 38.413880 +38.681605 - first iteration: problem solved after (sec) : 0.132478 + finished changing the variable's weight after (sec) : 38.682590 +38.951701 - subgradients found after (sec) : 0.134190 -, lowerbound = 15.000000 + finished changing the variable's weight after (sec) : 38.952676 +39.218843 - new dual found after (sec) : 0.134203 + finished changing the variable's weight after (sec) : 39.219834 +39.489177 - finished changing the variable's weight after (sec) : 0.134207 + finished changing the variable's weight after (sec) : 39.490162 +39.756555 - first iteration: problem solved after (sec) : 0.136581 + finished changing the variable's weight after (sec) : 39.757590 +40.024696 - subgradients found after (sec) : 0.138378 -, lowerbound = 15.000000 + finished changing the variable's weight after (sec) : 40.025683 +40.317531 - new dual found after (sec) : 0.138391 + finished changing the variable's weight after (sec) : 40.318584 +40.586846 - finished changing the variable's weight after (sec) : 0.138395 + finished changing the variable's weight after (sec) : 40.587871 +40.854038 - first iteration: problem solved after (sec) : 0.140776 + finished changing the variable's weight after (sec) : 40.855087 +41.123339 - subgradients found after (sec) : 0.142567 -, lowerbound = 15.000000 + finished changing the variable's weight after (sec) : 41.124299 +41.393662 - new dual found after (sec) : 0.142579 + finished changing the variable's weight after (sec) : 41.394688 +41.662278 - finished changing the variable's weight after (sec) : 0.142584 + finished changing the variable's weight after (sec) : 41.663202 +42.004842 - first iteration: problem solved after (sec) : 0.144978 + finished changing the variable's weight after (sec) : 42.006102 +42.309989 - subgradients found after (sec) : 0.146787 -, lowerbound = 15.000000 + finished changing the variable's weight after (sec) : 42.310939 +42.579236 - new dual found after (sec) : 0.146800 + finished changing the variable's weight after (sec) : 42.580234 +42.846331 - finished changing the variable's weight after (sec) : 0.146805 + finished changing the variable's weight after (sec) : 42.847291 +43.115463 - first iteration: problem solved after (sec) : 0.149269 + finished changing the variable's weight after (sec) : 43.116427 +43.383095 - subgradients found after (sec) : 0.151069 -, lowerbound = 15.000000 + finished changing the variable's weight after (sec) : 43.384024 +43.649221 - new dual found after (sec) : 0.151082 + finished changing the variable's weight after (sec) : 43.650228 +43.917312 - finished changing the variable's weight after (sec) : 0.151087 + finished changing the variable's weight after (sec) : 43.918286 +44.187236 - first iteration: problem solved after (sec) : 0.153523 + finished changing the variable's weight after (sec) : 44.188173 +44.457303 - subgradients found after (sec) : 0.155325 -, lowerbound = 15.000000 + finished changing the variable's weight after (sec) : 44.458292 +44.726083 - new dual found after (sec) : 0.155339 + finished changing the variable's weight after (sec) : 44.727074 +44.992682 - finished changing the variable's weight after (sec) : 0.155348 + finished changing the variable's weight after (sec) : 44.993676 +45.260723 - first iteration: problem solved after (sec) : 0.157723 + finished changing the variable's weight after (sec) : 45.261657 +45.529810 - subgradients found after (sec) : 0.159380 -, lowerbound = 15.000000 + finished changing the variable's weight after (sec) : 45.530776 +45.797450 - new dual found after (sec) : 0.159391 + finished changing the variable's weight after (sec) : 45.798413 +46.063593 - finished changing the variable's weight after (sec) : 0.159396 + finished changing the variable's weight after (sec) : 46.064515 +46.329915 - first iteration: problem solved after (sec) : 0.161742 + finished changing the variable's weight after (sec) : 46.330885 +46.596673 - subgradients found after (sec) : 0.163503 -, lowerbound = 15.000000 + finished changing the variable's weight after (sec) : 46.597606 +46.878630 - new dual found after (sec) : 0.163515 + finished changing the variable's weight after (sec) : 46.879590 +47.148342 - finished changing the variable's weight after (sec) : 0.163520 + finished changing the variable's weight after (sec) : 47.149266 +47.417452 - first iteration: problem solved after (sec) : 0.166007 + finished changing the variable's weight after (sec) : 47.418425 +47.689853 - subgradients found after (sec) : 0.167764 -, lowerbound = 15.000000 + finished changing the variable's weight after (sec) : 47.690815 +47.957623 - new dual found after (sec) : 0.167775 + finished changing the variable's weight after (sec) : 47.958584 +48.232501 - finished changing the variable's weight after (sec) : 0.167780 + finished changing the variable's weight after (sec) : 48.233456 +48.501279 - first iteration: problem solved after (sec) : 0.170172 + finished changing the variable's weight after (sec) : 48.502232 +48.771542 - subgradients found after (sec) : 0.172208 -, lowerbound = 15.000000 + finished changing the variable's weight after (sec) : 48.772529 +49.069224 - new dual found after (sec) : 0.172226 + finished changing the variable's weight after (sec) : 49.070437 +49.390578 - finished changing the variable's weight after (sec) : 0.172234 + finished changing the variable's weight after (sec) : 49.391605 +49.668170 - first iteration: problem solved after (sec) : 0.174879 + finished changing the variable's weight after (sec) : 49.669126 +49.932547 - subgradients found after (sec) : 0.176646 -, lowerbound = 15.000000 + finished changing the variable's weight after (sec) : 49.933485 +50.205301 - new dual found after (sec) : 0.176658 + finished changing the variable's weight after (sec) : 50.206258 +50.469904 - finished changing the variable's weight after (sec) : 0.176663 + finished changing the variable's weight after (sec) : 50.470861 +50.738224 - first iteration: problem solved after (sec) : 0.179005 + finished changing the variable's weight after (sec) : 50.739161 +51.006536 - subgradients found after (sec) : 0.180793 -, lowerbound = 15.000000 + finished changing the variable's weight after (sec) : 51.007468 +51.286078 - new dual found after (sec) : 0.180806 + finished changing the variable's weight after (sec) : 51.287033 +51.562720 - finished changing the variable's weight after (sec) : 0.180811 + finished changing the variable's weight after (sec) : 51.563673 +51.843032 - first iteration: problem solved after (sec) : 0.183271 + finished changing the variable's weight after (sec) : 51.843956 +52.125510 - subgradients found after (sec) : 0.185071 -, lowerbound = 15.000000 + finished changing the variable's weight after (sec) : 52.126485 +52.401672 - new dual found after (sec) : 0.185084 + finished changing the variable's weight after (sec) : 52.402634 +52.678749 - finished changing the variable's weight after (sec) : 0.185089 + finished changing the variable's weight after (sec) : 52.679712 +52.963119 - first iteration: problem solved after (sec) : 0.187422 + finished changing the variable's weight after (sec) : 52.964105 +53.242572 - subgradients found after (sec) : 0.189211 -, lowerbound = 15.000000 + finished changing the variable's weight after (sec) : 53.243542 +53.529645 - new dual found after (sec) : 0.189223 + finished changing the variable's weight after (sec) : 53.530624 +53.816730 - finished changing the variable's weight after (sec) : 0.189228 + finished changing the variable's weight after (sec) : 53.817713 +54.108162 - first iteration: problem solved after (sec) : 0.191547 + finished changing the variable's weight after (sec) : 54.109171 +54.389620 - subgradients found after (sec) : 0.193296 -, lowerbound = 15.000000 + finished changing the variable's weight after (sec) : 54.390672 +54.671126 - new dual found after (sec) : 0.193309 + finished changing the variable's weight after (sec) : 54.672144 +54.953376 - finished changing the variable's weight after (sec) : 0.193313 + finished changing the variable's weight after (sec) : 54.954386 +55.236704 - first iteration: problem solved after (sec) : 0.195583 + finished changing the variable's weight after (sec) : 55.237622 +55.516743 - subgradients found after (sec) : 0.197289 -, lowerbound = 15.000000 + finished changing the variable's weight after (sec) : 55.517665 +55.793489 - new dual found after (sec) : 0.197303 + finished changing the variable's weight after (sec) : 55.794417 +56.072387 - finished changing the variable's weight after (sec) : 0.197307 + finished changing the variable's weight after (sec) : 56.073321 +56.349717 - first iteration: problem solved after (sec) : 0.199632 + finished changing the variable's weight after (sec) : 56.350697 +56.626307 - subgradients found after (sec) : 0.201402 -, lowerbound = 15.000000 + finished changing the variable's weight after (sec) : 56.627250 +56.903394 - new dual found after (sec) : 0.201415 + finished changing the variable's weight after (sec) : 56.904353 +57.184041 + + finished changing the variable's weight after (sec) : 57.184996 +57.460056 + + finished changing the variable's weight after (sec) : 57.460993 +57.754465 + + finished changing the variable's weight after (sec) : 57.755430 +58.034316 + + finished changing the variable's weight after (sec) : 58.035246 +58.315624 + + finished changing the variable's weight after (sec) : 58.316573 +58.593080 + + finished changing the variable's weight after (sec) : 58.594071 +58.878780 + + finished changing the variable's weight after (sec) : 58.879717 +59.164881 + + finished changing the variable's weight after (sec) : 59.165843 +59.443101 + + finished changing the variable's weight after (sec) : 59.444060 +59.723057 + + finished changing the variable's weight after (sec) : 59.724004 +60.003005 + + finished changing the variable's weight after (sec) : 60.003931 +60.285447 + + finished changing the variable's weight after (sec) : 60.286439 +60.564772 + + finished changing the variable's weight after (sec) : 60.565716 +60.843652 + + finished changing the variable's weight after (sec) : 60.844620 +61.121478 + + finished changing the variable's weight after (sec) : 61.122418 +61.398478 + + finished changing the variable's weight after (sec) : 61.399423 +61.675056 + + finished changing the variable's weight after (sec) : 61.676005 +61.953312 + + finished changing the variable's weight after (sec) : 61.954265 +62.230419 + + finished changing the variable's weight after (sec) : 62.231335 +62.509297 + + finished changing the variable's weight after (sec) : 62.510231 +62.795704 + + finished changing the variable's weight after (sec) : 62.796663 +63.073421 + + finished changing the variable's weight after (sec) : 63.074390 +63.343641 + + finished changing the variable's weight after (sec) : 63.344582 +63.615397 + + finished changing the variable's weight after (sec) : 63.616327 +63.881561 + + finished changing the variable's weight after (sec) : 63.882547 +64.157931 + + finished changing the variable's weight after (sec) : 64.158874 +64.435539 + + finished changing the variable's weight after (sec) : 64.436492 +64.715641 + + finished changing the variable's weight after (sec) : 64.716566 +64.995985 + + finished changing the variable's weight after (sec) : 64.996926 +65.279640 + + finished changing the variable's weight after (sec) : 65.280591 +65.557281 + + finished changing the variable's weight after (sec) : 65.558250 +65.839326 + + finished changing the variable's weight after (sec) : 65.840253 +66.120321 + + finished changing the variable's weight after (sec) : 66.121272 +66.397022 + + finished changing the variable's weight after (sec) : 66.397988 +66.679140 + + finished changing the variable's weight after (sec) : 66.680095 +66.960119 + + finished changing the variable's weight after (sec) : 66.961099 +67.241783 + + finished changing the variable's weight after (sec) : 67.242815 +67.523047 + + finished changing the variable's weight after (sec) : 67.523976 +67.821842 + + finished changing the variable's weight after (sec) : 67.823484 +68.212484 + + finished changing the variable's weight after (sec) : 68.214193 +68.565389 + + finished changing the variable's weight after (sec) : 68.566516 +68.862122 + + finished changing the variable's weight after (sec) : 68.863073 +69.140528 + + finished changing the variable's weight after (sec) : 69.141482 +69.420056 + + finished changing the variable's weight after (sec) : 69.421000 +69.699217 + + finished changing the variable's weight after (sec) : 69.700177 +69.979323 + + finished changing the variable's weight after (sec) : 69.980273 +70.259240 + + finished changing the variable's weight after (sec) : 70.260190 +70.539347 + + finished changing the variable's weight after (sec) : 70.540306 +70.818793 + + finished changing the variable's weight after (sec) : 70.819702 +71.102507 + + finished changing the variable's weight after (sec) : 71.103510 +71.388538 + + finished changing the variable's weight after (sec) : 71.389533 +71.676832 + + finished changing the variable's weight after (sec) : 71.677826 +71.955814 + + finished changing the variable's weight after (sec) : 71.956785 +72.237944 + + finished changing the variable's weight after (sec) : 72.238997 +72.516396 + + finished changing the variable's weight after (sec) : 72.517391 +72.797885 + + finished changing the variable's weight after (sec) : 72.798883 +73.082882 + + finished changing the variable's weight after (sec) : 73.083840 +73.380023 + + finished changing the variable's weight after (sec) : 73.381077 +73.706458 + + finished changing the variable's weight after (sec) : 73.707506 +74.013239 + + finished changing the variable's weight after (sec) : 74.014340 +74.316208 + + finished changing the variable's weight after (sec) : 74.317189 +74.588331 + + finished changing the variable's weight after (sec) : 74.589279 +74.867571 + + finished changing the variable's weight after (sec) : 74.868622 +75.184727 + + finished changing the variable's weight after (sec) : 75.185762 +75.480642 + + finished changing the variable's weight after (sec) : 75.481639 +75.770443 + + finished changing the variable's weight after (sec) : 75.771438 +76.060950 + + finished changing the variable's weight after (sec) : 76.061925 +76.349294 + + finished changing the variable's weight after (sec) : 76.350285 +76.645815 + + finished changing the variable's weight after (sec) : 76.646811 +76.941771 + + finished changing the variable's weight after (sec) : 76.942771 +77.233848 + + finished changing the variable's weight after (sec) : 77.234883 +77.514653 + + finished changing the variable's weight after (sec) : 77.515650 +77.807043 + + finished changing the variable's weight after (sec) : 77.808048 +78.102448 + + finished changing the variable's weight after (sec) : 78.103463 +78.393303 + + finished changing the variable's weight after (sec) : 78.394304 +78.683899 + + finished changing the variable's weight after (sec) : 78.684900 +78.978627 + + finished changing the variable's weight after (sec) : 78.979614 +79.279773 + + finished changing the variable's weight after (sec) : 79.280754 +79.570958 + + finished changing the variable's weight after (sec) : 79.571946 +79.867816 + + finished changing the variable's weight after (sec) : 79.868814 +80.163708 + + finished changing the variable's weight after (sec) : 80.164702 +80.464099 + + finished changing the variable's weight after (sec) : 80.465570 +80.751836 + + finished changing the variable's weight after (sec) : 80.752772 +81.038513 + + finished changing the variable's weight after (sec) : 81.039479 +81.321399 + + finished changing the variable's weight after (sec) : 81.322368 +81.597088 + + finished changing the variable's weight after (sec) : 81.598075 +81.866695 + + finished changing the variable's weight after (sec) : 81.867671 +82.136422 + + finished changing the variable's weight after (sec) : 82.137383 +82.403904 + + finished changing the variable's weight after (sec) : 82.404847 +82.674934 + + finished changing the variable's weight after (sec) : 82.675918 +82.942437 + + finished changing the variable's weight after (sec) : 82.943380 +83.208141 + + finished changing the variable's weight after (sec) : 83.209092 +83.475371 + + finished changing the variable's weight after (sec) : 83.476340 +83.741072 + + finished changing the variable's weight after (sec) : 83.742052 +84.007127 + + finished changing the variable's weight after (sec) : 84.008067 +84.274055 + + finished changing the variable's weight after (sec) : 84.275043 +84.538307 + + finished changing the variable's weight after (sec) : 84.539261 +84.804918 + + finished changing the variable's weight after (sec) : 84.805933 +85.072036 + + finished changing the variable's weight after (sec) : 85.072993 +85.344352 + + finished changing the variable's weight after (sec) : 85.345263 +85.611812 + + finished changing the variable's weight after (sec) : 85.612738 +85.876836 + + finished changing the variable's weight after (sec) : 85.877800 +86.145641 + + finished changing the variable's weight after (sec) : 86.146625 +86.412953 + + finished changing the variable's weight after (sec) : 86.413908 +86.679098 + + finished changing the variable's weight after (sec) : 86.680041 +86.944643 + + finished changing the variable's weight after (sec) : 86.945576 +87.212733 + + finished changing the variable's weight after (sec) : 87.213680 +87.479638 + + finished changing the variable's weight after (sec) : 87.480611 +87.750765 + + finished changing the variable's weight after (sec) : 87.751715 +88.018052 + + finished changing the variable's weight after (sec) : 88.019011 +88.285377 + + finished changing the variable's weight after (sec) : 88.286332 +88.551297 + + finished changing the variable's weight after (sec) : 88.552258 +88.819830 + + finished changing the variable's weight after (sec) : 88.820779 +89.088442 + + finished changing the variable's weight after (sec) : 89.089354 +89.357394 + + finished changing the variable's weight after (sec) : 89.358366 +89.626041 + + finished changing the variable's weight after (sec) : 89.627003 +89.893745 + + finished changing the variable's weight after (sec) : 89.894680 +90.170362 + + finished changing the variable's weight after (sec) : 90.171301 +90.441228 + + finished changing the variable's weight after (sec) : 90.442194 +90.719537 + + finished changing the variable's weight after (sec) : 90.720532 +90.994144 + + finished changing the variable's weight after (sec) : 90.995091 +91.327622 + + finished changing the variable's weight after (sec) : 91.328647 +91.655907 + + finished changing the variable's weight after (sec) : 91.656841 +91.972081 + + finished changing the variable's weight after (sec) : 91.974058 +92.325339 + + finished changing the variable's weight after (sec) : 92.326497 +92.680136 + + finished changing the variable's weight after (sec) : 92.681148 +92.963167 + + finished changing the variable's weight after (sec) : 92.964348 +93.278384 + + finished changing the variable's weight after (sec) : 93.279345 +93.563968 + + finished changing the variable's weight after (sec) : 93.564925 +93.830677 + + finished changing the variable's weight after (sec) : 93.831610 +94.175795 + + finished changing the variable's weight after (sec) : 94.176928 +94.448009 + + finished changing the variable's weight after (sec) : 94.449034 +94.717216 + + finished changing the variable's weight after (sec) : 94.718158 +94.996773 + + finished changing the variable's weight after (sec) : 94.997714 +95.272824 + + finished changing the variable's weight after (sec) : 95.273784 +95.543620 + + finished changing the variable's weight after (sec) : 95.544597 +95.817781 + + finished changing the variable's weight after (sec) : 95.818775 +96.100801 + + finished changing the variable's weight after (sec) : 96.101839 +96.381482 + + finished changing the variable's weight after (sec) : 96.382519 +96.650529 + + finished changing the variable's weight after (sec) : 96.651469 +96.922334 + + finished changing the variable's weight after (sec) : 96.923268 +97.189276 + + finished changing the variable's weight after (sec) : 97.190239 +97.477023 + + finished changing the variable's weight after (sec) : 97.478370 +97.795505 + + finished changing the variable's weight after (sec) : 97.796444 +98.068141 + + finished changing the variable's weight after (sec) : 98.069115 +98.335006 + + finished changing the variable's weight after (sec) : 98.335966 +98.606170 + + finished changing the variable's weight after (sec) : 98.607090 +98.874524 + + finished changing the variable's weight after (sec) : 98.875494 +99.145996 + + finished changing the variable's weight after (sec) : 99.146945 +99.413548 + + finished changing the variable's weight after (sec) : 99.414549 +99.682428 + + finished changing the variable's weight after (sec) : 99.683376 +99.951350 + + finished changing the variable's weight after (sec) : 99.952284 +100.218431 + + finished changing the variable's weight after (sec) : 100.219399 +100.485655 + + finished changing the variable's weight after (sec) : 100.486614 +100.754619 + + finished changing the variable's weight after (sec) : 100.755572 +101.026939 + + finished changing the variable's weight after (sec) : 101.027913 +101.296982 + + finished changing the variable's weight after (sec) : 101.297926 +101.562594 + + finished changing the variable's weight after (sec) : 101.563572 +101.829154 + + finished changing the variable's weight after (sec) : 101.830113 +102.098146 + + finished changing the variable's weight after (sec) : 102.099068 +102.373890 + + finished changing the variable's weight after (sec) : 102.374858 +102.653041 + + finished changing the variable's weight after (sec) : 102.653977 +102.928835 + + finished changing the variable's weight after (sec) : 102.929811 +103.197461 + + finished changing the variable's weight after (sec) : 103.198412 +103.465486 + + finished changing the variable's weight after (sec) : 103.466437 +103.742970 + + finished changing the variable's weight after (sec) : 103.743911 +104.031054 + + finished changing the variable's weight after (sec) : 104.032003 +104.321488 + + finished changing the variable's weight after (sec) : 104.322437 +104.604348 + + finished changing the variable's weight after (sec) : 104.605280 +104.898319 + + finished changing the variable's weight after (sec) : 104.899313 +105.208465 + + finished changing the variable's weight after (sec) : 105.209383 +105.489670 + + finished changing the variable's weight after (sec) : 105.490643 +105.829566 + + finished changing the variable's weight after (sec) : 105.830920 +106.172853 + + finished changing the variable's weight after (sec) : 106.173993 +106.496302 + + finished changing the variable's weight after (sec) : 106.497250 +106.794342 + + finished changing the variable's weight after (sec) : 106.796423 +107.117565 + + finished changing the variable's weight after (sec) : 107.118583 +107.414692 + + finished changing the variable's weight after (sec) : 107.415738 +107.709451 + + finished changing the variable's weight after (sec) : 107.710494 +108.003963 + + finished changing the variable's weight after (sec) : 108.004979 +108.299193 + + finished changing the variable's weight after (sec) : 108.300216 +108.589060 + + finished changing the variable's weight after (sec) : 108.590099 +108.884342 + + finished changing the variable's weight after (sec) : 108.885394 +109.181165 + + finished changing the variable's weight after (sec) : 109.182204 +109.473118 + + finished changing the variable's weight after (sec) : 109.474135 +109.764808 + + finished changing the variable's weight after (sec) : 109.765837 +110.064871 + + finished changing the variable's weight after (sec) : 110.065892 +110.359922 + + finished changing the variable's weight after (sec) : 110.360968 +110.653090 + + finished changing the variable's weight after (sec) : 110.654135 +110.957934 + + finished changing the variable's weight after (sec) : 110.959002 +111.250269 + + finished changing the variable's weight after (sec) : 111.251260 +111.541719 + + finished changing the variable's weight after (sec) : 111.542713 +111.836238 + + finished changing the variable's weight after (sec) : 111.837242 +112.128477 + + finished changing the variable's weight after (sec) : 112.129486 +112.422517 + + finished changing the variable's weight after (sec) : 112.423516 +112.709067 + + finished changing the variable's weight after (sec) : 112.710605 +112.991331 + + finished changing the variable's weight after (sec) : 112.992804 +113.272944 + + finished changing the variable's weight after (sec) : 113.274495 +113.552557 + + finished changing the variable's weight after (sec) : 113.553581 +113.834858 + + finished changing the variable's weight after (sec) : 113.835789 +114.115601 + + finished changing the variable's weight after (sec) : 114.116560 +114.398063 + + finished changing the variable's weight after (sec) : 114.399073 +114.678880 + + finished changing the variable's weight after (sec) : 114.679844 +114.960707 + + finished changing the variable's weight after (sec) : 114.961662 +115.243143 + + finished changing the variable's weight after (sec) : 115.244091 +115.521847 + + finished changing the variable's weight after (sec) : 115.522829 +115.805267 + + finished changing the variable's weight after (sec) : 115.806222 +116.088109 + + finished changing the variable's weight after (sec) : 116.089051 +116.374418 + + finished changing the variable's weight after (sec) : 116.375384 +116.661863 + + finished changing the variable's weight after (sec) : 116.662854 +116.948712 + + finished changing the variable's weight after (sec) : 116.949738 +117.232619 + + finished changing the variable's weight after (sec) : 117.233715 +117.513038 + + finished changing the variable's weight after (sec) : 117.514089 +117.799085 + + finished changing the variable's weight after (sec) : 117.800111 +118.082508 + + finished changing the variable's weight after (sec) : 118.083548 +118.369449 + + finished changing the variable's weight after (sec) : 118.370471 +118.650209 + + finished changing the variable's weight after (sec) : 118.651171 +118.931649 + + finished changing the variable's weight after (sec) : 118.932609 +119.246229 + + finished changing the variable's weight after (sec) : 119.247326 +119.562445 + + finished changing the variable's weight after (sec) : 119.563470 +119.883330 + + finished changing the variable's weight after (sec) : 119.884353 +120.194102 + + finished changing the variable's weight after (sec) : 120.195088 +120.490599 + + finished changing the variable's weight after (sec) : 120.491586 +120.783963 + + finished changing the variable's weight after (sec) : 120.784981 +121.079588 + + finished changing the variable's weight after (sec) : 121.080599 +121.401392 + + finished changing the variable's weight after (sec) : 121.402406 +121.694872 + + finished changing the variable's weight after (sec) : 121.695891 +122.031284 + + finished changing the variable's weight after (sec) : 122.032622 +122.372372 + + finished changing the variable's weight after (sec) : 122.373344 +122.729770 + + finished changing the variable's weight after (sec) : 122.730744 +123.107212 + + finished changing the variable's weight after (sec) : 123.108825 +123.408167 + + finished changing the variable's weight after (sec) : 123.409410 +123.695283 + + finished changing the variable's weight after (sec) : 123.696220 +123.997056 + + finished changing the variable's weight after (sec) : 123.998049 +124.310810 + + finished changing the variable's weight after (sec) : 124.311818 +124.602164 + + finished changing the variable's weight after (sec) : 124.603197 +124.945796 + + finished changing the variable's weight after (sec) : 124.946856 +125.239305 + + finished changing the variable's weight after (sec) : 125.240307 +125.543287 + + finished changing the variable's weight after (sec) : 125.544260 +125.826682 + + finished changing the variable's weight after (sec) : 125.827715 +126.116424 + + finished changing the variable's weight after (sec) : 126.117385 +126.408228 + + finished changing the variable's weight after (sec) : 126.409411 +126.712129 + + finished changing the variable's weight after (sec) : 126.713176 +127.009535 + + finished changing the variable's weight after (sec) : 127.010587 +127.317621 + + finished changing the variable's weight after (sec) : 127.318860 +127.628707 + + finished changing the variable's weight after (sec) : 127.629800 +127.939206 + + finished changing the variable's weight after (sec) : 127.940297 +128.254464 + + finished changing the variable's weight after (sec) : 128.255581 +128.575907 + + finished changing the variable's weight after (sec) : 128.576890 +128.874181 + + finished changing the variable's weight after (sec) : 128.875154 +129.151552 + + finished changing the variable's weight after (sec) : 129.152533 +129.447886 + + finished changing the variable's weight after (sec) : 129.448909 +129.747280 + + finished changing the variable's weight after (sec) : 129.748345 +130.049460 + + finished changing the variable's weight after (sec) : 130.050469 +130.331742 + + finished changing the variable's weight after (sec) : 130.332719 +130.655622 + + finished changing the variable's weight after (sec) : 130.656607 +130.952215 + + finished changing the variable's weight after (sec) : 130.953257 +131.235793 + + finished changing the variable's weight after (sec) : 131.236753 +131.526327 + + finished changing the variable's weight after (sec) : 131.527319 +131.814786 + + finished changing the variable's weight after (sec) : 131.815825 +132.110751 + + finished changing the variable's weight after (sec) : 132.111790 +132.411780 + + finished changing the variable's weight after (sec) : 132.412808 +132.707913 + + finished changing the variable's weight after (sec) : 132.708968 +132.991606 + + finished changing the variable's weight after (sec) : 132.992620 +133.260593 + + finished changing the variable's weight after (sec) : 133.261602 +133.531875 + + finished changing the variable's weight after (sec) : 133.532836 +133.798419 + + finished changing the variable's weight after (sec) : 133.799356 +134.072252 + + finished changing the variable's weight after (sec) : 134.073231 +134.353860 + + finished changing the variable's weight after (sec) : 134.354856 +134.639393 + + finished changing the variable's weight after (sec) : 134.640434 +134.923632 + + finished changing the variable's weight after (sec) : 134.924656 +135.200782 + + finished changing the variable's weight after (sec) : 135.201871 +135.545460 + + finished changing the variable's weight after (sec) : 135.546789 +135.883382 + + finished changing the variable's weight after (sec) : 135.884354 +136.152456 + + finished changing the variable's weight after (sec) : 136.153432 +136.420719 + + finished changing the variable's weight after (sec) : 136.421770 +136.696782 + + finished changing the variable's weight after (sec) : 136.697746 +136.970979 + + finished changing the variable's weight after (sec) : 136.971962 +137.251605 + + finished changing the variable's weight after (sec) : 137.252619 +137.536068 + + finished changing the variable's weight after (sec) : 137.537132 +137.818237 + + finished changing the variable's weight after (sec) : 137.819307 +138.101150 + + finished changing the variable's weight after (sec) : 138.102161 +138.383560 + + finished changing the variable's weight after (sec) : 138.384627 +138.663028 + + finished changing the variable's weight after (sec) : 138.664062 +138.941706 + + finished changing the variable's weight after (sec) : 138.942719 +139.217802 + + finished changing the variable's weight after (sec) : 139.218818 +139.501914 + + finished changing the variable's weight after (sec) : 139.502923 +139.793998 + + finished changing the variable's weight after (sec) : 139.794999 +140.077207 + + finished changing the variable's weight after (sec) : 140.078171 +140.355726 + + finished changing the variable's weight after (sec) : 140.356698 +140.624528 + + finished changing the variable's weight after (sec) : 140.625498 +140.904004 + + finished changing the variable's weight after (sec) : 140.904927 +141.173591 + + finished changing the variable's weight after (sec) : 141.174555 +141.443279 + + finished changing the variable's weight after (sec) : 141.444240 +141.711467 + + finished changing the variable's weight after (sec) : 141.712425 +141.981502 + + finished changing the variable's weight after (sec) : 141.982482 +142.250184 + + finished changing the variable's weight after (sec) : 142.251117 +142.524226 + + finished changing the variable's weight after (sec) : 142.525166 +142.792134 + + finished changing the variable's weight after (sec) : 142.793090 +143.072635 + + finished changing the variable's weight after (sec) : 143.073614 +143.339587 + + finished changing the variable's weight after (sec) : 143.340556 +143.608549 + + finished changing the variable's weight after (sec) : 143.609579 +143.876047 + + finished changing the variable's weight after (sec) : 143.876975 +144.150750 + + finished changing the variable's weight after (sec) : 144.151700 +144.418770 + + finished changing the variable's weight after (sec) : 144.419727 +144.687821 + + finished changing the variable's weight after (sec) : 144.688763 +144.957848 + + finished changing the variable's weight after (sec) : 144.958831 +145.235101 + + finished changing the variable's weight after (sec) : 145.236159 +145.511338 + + finished changing the variable's weight after (sec) : 145.512358 +145.806106 + + finished changing the variable's weight after (sec) : 145.807316 +146.137452 + + finished changing the variable's weight after (sec) : 146.138600 +146.470207 + + finished changing the variable's weight after (sec) : 146.471362 +146.764925 + + finished changing the variable's weight after (sec) : 146.765861 +147.077757 + + finished changing the variable's weight after (sec) : 147.079174 +147.415738 + + finished changing the variable's weight after (sec) : 147.416875 +147.727854 + + finished changing the variable's weight after (sec) : 147.728981 +148.041205 + + finished changing the variable's weight after (sec) : 148.042336 +148.340666 + + finished changing the variable's weight after (sec) : 148.341896 +148.637452 + + finished changing the variable's weight after (sec) : 148.638449 +148.913596 + + finished changing the variable's weight after (sec) : 148.914622 +149.198182 + + finished changing the variable's weight after (sec) : 149.199146 +149.488055 + + finished changing the variable's weight after (sec) : 149.489122 +149.766285 + + finished changing the variable's weight after (sec) : 149.767304 +150.092286 + + finished changing the variable's weight after (sec) : 150.093296 +150.416477 + + finished changing the variable's weight after (sec) : 150.417639 +150.711430 + + finished changing the variable's weight after (sec) : 150.712371 +151.032608 + + finished changing the variable's weight after (sec) : 151.033581 +151.311144 + + finished changing the variable's weight after (sec) : 151.312122 +151.593026 + + finished changing the variable's weight after (sec) : 151.593977 +151.875688 + + finished changing the variable's weight after (sec) : 151.876683 +152.157166 + + finished changing the variable's weight after (sec) : 152.158235 +152.437785 + + finished changing the variable's weight after (sec) : 152.438816 +152.719319 + + finished changing the variable's weight after (sec) : 152.720325 +153.000448 + + finished changing the variable's weight after (sec) : 153.001463 +153.280451 + + finished changing the variable's weight after (sec) : 153.281496 +153.570254 + + finished changing the variable's weight after (sec) : 153.571311 +153.858414 + + finished changing the variable's weight after (sec) : 153.859429 +154.151109 + + finished changing the variable's weight after (sec) : 154.152143 +154.464464 + + finished changing the variable's weight after (sec) : 154.465434 +154.757989 + + finished changing the variable's weight after (sec) : 154.759008 +155.065101 + + finished changing the variable's weight after (sec) : 155.066094 +155.381230 + + finished changing the variable's weight after (sec) : 155.382200 +155.671804 + + finished changing the variable's weight after (sec) : 155.672855 +155.987447 + + finished changing the variable's weight after (sec) : 155.988657 +156.329743 + + finished changing the variable's weight after (sec) : 156.330775 +156.651500 + + finished changing the variable's weight after (sec) : 156.652494 +156.946466 + + finished changing the variable's weight after (sec) : 156.947534 +157.237106 + + finished changing the variable's weight after (sec) : 157.238081 +157.526664 + + finished changing the variable's weight after (sec) : 157.527678 +157.825399 + + finished changing the variable's weight after (sec) : 157.826522 +158.122083 + + finished changing the variable's weight after (sec) : 158.123016 +158.406757 + + finished changing the variable's weight after (sec) : 158.407729 +158.694990 + + finished changing the variable's weight after (sec) : 158.695960 +158.979803 + + finished changing the variable's weight after (sec) : 158.980800 +159.266608 + + finished changing the variable's weight after (sec) : 159.267595 +159.552345 + + finished changing the variable's weight after (sec) : 159.553301 +159.843646 + + finished changing the variable's weight after (sec) : 159.844600 +160.128969 + + finished changing the variable's weight after (sec) : 160.130046 +160.417453 + + finished changing the variable's weight after (sec) : 160.418423 +160.702438 + + finished changing the variable's weight after (sec) : 160.703526 +160.992854 + + finished changing the variable's weight after (sec) : 160.993781 +161.279331 + + finished changing the variable's weight after (sec) : 161.280397 +161.563283 + + finished changing the variable's weight after (sec) : 161.564324 +161.849765 + + finished changing the variable's weight after (sec) : 161.850908 +162.135833 + + finished changing the variable's weight after (sec) : 162.136899 +162.425605 + + finished changing the variable's weight after (sec) : 162.426541 +162.712442 + + finished changing the variable's weight after (sec) : 162.713507 +162.998943 + + finished changing the variable's weight after (sec) : 163.000031 +163.285793 + + finished changing the variable's weight after (sec) : 163.286760 +163.654879 + + finished changing the variable's weight after (sec) : 163.656701 +163.957669 + + finished changing the variable's weight after (sec) : 163.958688 +164.249904 + + finished changing the variable's weight after (sec) : 164.251219 +164.552586 + + finished changing the variable's weight after (sec) : 164.553789 +164.844021 + + finished changing the variable's weight after (sec) : 164.845234 +165.135264 + + finished changing the variable's weight after (sec) : 165.136231 +165.419863 + + finished changing the variable's weight after (sec) : 165.420849 +165.726583 + + finished changing the variable's weight after (sec) : 165.727824 +166.055297 + + finished changing the variable's weight after (sec) : 166.056336 +166.353196 + + finished changing the variable's weight after (sec) : 166.354467 +166.653794 + + finished changing the variable's weight after (sec) : 166.655088 +166.967778 + + finished changing the variable's weight after (sec) : 166.968874 +167.272095 + + finished changing the variable's weight after (sec) : 167.273313 +167.575224 + + finished changing the variable's weight after (sec) : 167.576218 +167.885262 + + finished changing the variable's weight after (sec) : 167.886945 +168.189599 + + finished changing the variable's weight after (sec) : 168.190634 +168.490403 + + finished changing the variable's weight after (sec) : 168.491515 +168.794699 + + finished changing the variable's weight after (sec) : 168.795875 +169.099950 + + finished changing the variable's weight after (sec) : 169.101180 +169.399812 + + finished changing the variable's weight after (sec) : 169.400899 +169.698500 + + finished changing the variable's weight after (sec) : 169.699581 +170.029170 + + finished changing the variable's weight after (sec) : 170.030198 +170.329581 + + finished changing the variable's weight after (sec) : 170.330593 +170.677067 + + finished changing the variable's weight after (sec) : 170.678198 +170.982789 + + finished changing the variable's weight after (sec) : 170.983927 +171.284328 + + finished changing the variable's weight after (sec) : 171.285612 +171.587028 + + finished changing the variable's weight after (sec) : 171.588168 +171.888737 + + finished changing the variable's weight after (sec) : 171.889972 +172.192769 + + finished changing the variable's weight after (sec) : 172.194068 +172.510670 + + finished changing the variable's weight after (sec) : 172.511984 +172.847061 + + finished changing the variable's weight after (sec) : 172.848179 +173.143268 + + finished changing the variable's weight after (sec) : 173.144433 +173.444010 + + finished changing the variable's weight after (sec) : 173.445389 +173.749767 + + finished changing the variable's weight after (sec) : 173.750944 +174.070411 + + finished changing the variable's weight after (sec) : 174.071656 +174.415588 + + finished changing the variable's weight after (sec) : 174.416684 +174.755279 + + finished changing the variable's weight after (sec) : 174.756438 +175.088272 + + finished changing the variable's weight after (sec) : 175.089286 +175.399702 + + finished changing the variable's weight after (sec) : 175.400731 +175.710283 + + finished changing the variable's weight after (sec) : 175.711300 +176.037353 + + finished changing the variable's weight after (sec) : 176.038332 +176.333895 + + finished changing the variable's weight after (sec) : 176.334965 +176.627995 + + finished changing the variable's weight after (sec) : 176.628959 +176.924111 + + finished changing the variable's weight after (sec) : 176.925094 +177.215278 + + finished changing the variable's weight after (sec) : 177.216272 +177.558533 + + finished changing the variable's weight after (sec) : 177.559717 +177.884995 + + finished changing the variable's weight after (sec) : 177.886204 +178.182359 + + finished changing the variable's weight after (sec) : 178.183430 +178.482067 + + finished changing the variable's weight after (sec) : 178.483171 +178.784978 + + finished changing the variable's weight after (sec) : 178.786594 +179.099427 + + finished changing the variable's weight after (sec) : 179.100996 +179.420614 + + finished changing the variable's weight after (sec) : 179.422098 +179.701692 + + finished changing the variable's weight after (sec) : 179.703190 +179.995570 + + finished changing the variable's weight after (sec) : 179.997041 +180.274391 + + finished changing the variable's weight after (sec) : 180.275886 +180.556803 + + finished changing the variable's weight after (sec) : 180.558315 +180.839607 + + finished changing the variable's weight after (sec) : 180.841167 +181.124068 + + finished changing the variable's weight after (sec) : 181.125543 +181.408263 + + finished changing the variable's weight after (sec) : 181.409732 +181.697368 + + finished changing the variable's weight after (sec) : 181.698428 +181.997608 + + finished changing the variable's weight after (sec) : 181.998714 +182.322379 + + finished changing the variable's weight after (sec) : 182.323422 +182.609000 + + finished changing the variable's weight after (sec) : 182.609962 +182.906967 + + finished changing the variable's weight after (sec) : 182.907899 +183.211975 + + finished changing the variable's weight after (sec) : 183.213089 +183.522828 + + finished changing the variable's weight after (sec) : 183.523776 +183.818256 + + finished changing the variable's weight after (sec) : 183.819265 +184.102379 + + finished changing the variable's weight after (sec) : 184.103301 +184.388613 + + finished changing the variable's weight after (sec) : 184.389556 +184.668706 + + finished changing the variable's weight after (sec) : 184.669662 +184.933798 + + finished changing the variable's weight after (sec) : 184.934746 +185.201362 + + finished changing the variable's weight after (sec) : 185.202325 +185.476056 + + finished changing the variable's weight after (sec) : 185.476994 +185.740530 + + finished changing the variable's weight after (sec) : 185.741477 +186.005439 + + finished changing the variable's weight after (sec) : 186.006409 +186.270529 + + finished changing the variable's weight after (sec) : 186.271492 +186.536122 + + finished changing the variable's weight after (sec) : 186.537078 +186.830739 + + finished changing the variable's weight after (sec) : 186.831700 +187.106673 + + finished changing the variable's weight after (sec) : 187.107650 +187.374532 + + finished changing the variable's weight after (sec) : 187.375484 +187.656547 + + finished changing the variable's weight after (sec) : 187.657653 +187.977834 + + finished changing the variable's weight after (sec) : 187.978965 diff --git a/var.txt b/var.txt index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d628d834b7cb6a1ddc7e9cad90a9e0535ec5420e 100644 --- a/var.txt +++ b/var.txt @@ -0,0 +1,651 @@ +969553.451655 +969553.451655 +969553.451655 +969553.451655 +969553.451655 +975146.613930 +989344.620330 +999024.176262 +1008350.920374 +1020026.835179 +1023789.204847 +1037572.779662 +1043550.340114 +1051710.589431 +1058427.147271 +1063293.445488 +1072473.640624 +1076886.141898 +1086729.286001 +1091780.455877 +1094896.809334 +1101263.149421 +1103431.934686 +1111036.222705 +1115860.276809 +1119922.138092 +1124960.296185 +1132123.876662 +1133652.768532 +1136144.901815 +1141097.358296 +1143101.259766 +1148002.683780 +1153159.516056 +1153338.723749 +1158674.315675 +1162297.618028 +1164160.056187 +1168498.610213 +1169729.460704 +1173952.832273 +1178270.501656 +1178878.876044 +1181975.581725 +1184448.929978 +1188609.544868 +1188830.345998 +1194249.329747 +1196132.545007 +1197416.779761 +1198769.130753 +1203012.987614 +1204208.203188 +1205848.372438 +1210379.200196 +1210910.524724 +1212408.050573 +1215354.767561 +1215354.767561 +1221664.782381 +1221664.782381 +1221664.782381 +1227249.575602 +1227249.575602 +1228388.071534 +1229978.533500 +1231536.910022 +1233839.968237 +1235535.554008 +1235535.554008 +1238185.735747 +1238853.909670 +1238994.144600 +1243152.502070 +1243152.502070 +1245744.530869 +1245744.530869 +1248084.273841 +1249241.471795 +1250241.022613 +1250241.022613 +1253178.719159 +1253930.665989 +1253930.665989 +1257940.562495 +1257940.562495 +1258452.530575 +1259552.124552 +1259972.856173 +1262403.465110 +1262900.868471 +1263814.432308 +1265019.857869 +1266205.328629 +1267538.210346 +1268243.082402 +1268828.566504 +1269633.765048 +1271300.981826 +1271570.232456 +1272547.671274 +1274184.663697 +1275164.375242 +1275586.924129 +1276457.997280 +1277820.536363 +1278275.750896 +1278990.490910 +1280564.976832 +1281073.034072 +1281705.488007 +1282343.981097 +1283767.327581 +1284804.105702 +1284804.105702 +1285710.159096 +1285710.159096 +1288033.554846 +1288033.554846 +1288215.915504 +1289848.363697 +1289848.363697 +1290973.188680 +1290973.188680 +1291848.086971 +1292324.408432 +1292487.812085 +1293609.540066 +1294633.223598 +1294686.072122 +1296050.502384 +1296050.502384 +1296937.429607 +1297950.589067 +1297950.589067 +1297950.589067 +1299574.754722 +1299574.754722 +1300320.153238 +1300499.048157 +1301639.480237 +1301639.480237 +1302433.129828 +1302600.605011 +1303916.660353 +1303916.660353 +1304125.629501 +1305213.350109 +1305213.350109 +1305683.240203 +1306274.999014 +1306391.252107 +1307002.044072 +1307220.398557 +1307959.594172 +1308102.980862 +1309381.262877 +1309381.262877 +1310254.588455 +1310254.588455 +1310411.849449 +1310747.333112 +1310747.333112 +1311742.132396 +1311742.132396 +1312201.479464 +1313017.181496 +1313017.181496 +1313320.013192 +1313754.621536 +1313839.823459 +1314132.963333 +1314707.356195 +1314971.923391 +1315150.783123 +1315833.627176 +1315961.754241 +1316377.703985 +1316377.703985 +1316843.151918 +1317357.843619 +1317507.001805 +1317896.556602 +1317896.556602 +1318516.372697 +1318621.136050 +1318859.567895 +1319000.843419 +1319567.569621 +1319691.606792 +1319940.385938 +1320349.870713 +1320387.194990 +1320463.880387 +1321216.290686 +1321216.290686 +1321816.561185 +1321816.561185 +1322042.897186 +1322074.670469 +1322470.617749 +1322540.369606 +1322624.341772 +1323133.150634 +1323192.112008 +1323472.765681 +1323644.893299 +1323794.986011 +1324076.938053 +1324264.958891 +1324442.566244 +1324715.952118 +1325062.688091 +1325062.688091 +1325287.710175 +1325353.478519 +1325680.383714 +1325820.296257 +1325875.913080 +1326046.872352 +1326126.935796 +1326501.345304 +1326564.562640 +1326911.515231 +1326911.515231 +1327096.455160 +1327107.467419 +1327515.664580 +1327515.664580 +1327775.196893 +1327787.208340 +1328041.546465 +1328041.546465 +1328410.976074 +1328410.976074 +1328564.688747 +1328678.671736 +1328775.978795 +1328887.841322 +1329055.036630 +1329055.036630 +1329348.721319 +1329348.721319 +1329592.064811 +1329592.064811 +1329768.225012 +1329834.781920 +1329959.481059 +1329998.049238 +1330194.244360 +1330258.236306 +1330297.805555 +1330487.920227 +1330499.755440 +1330650.857400 +1330761.816419 +1330876.275775 +1331012.256430 +1331012.256430 +1331069.452240 +1331219.087946 +1331299.061943 +1331394.712258 +1331437.910522 +1331569.509084 +1331590.246112 +1331707.442314 +1331729.271918 +1331925.588798 +1331925.588798 +1332020.857836 +1332045.244544 +1332216.620575 +1332216.620575 +1332404.915399 +1332404.915399 +1332457.490111 +1332492.645303 +1332570.142631 +1332660.381723 +1332668.388465 +1332824.223489 +1332824.223489 +1332904.600899 +1332958.272951 +1332971.471139 +1333096.368669 +1333096.368669 +1333173.559068 +1333216.631336 +1333278.178399 +1333354.357143 +1333373.487941 +1333417.063195 +1333474.826859 +1333531.509974 +1333574.186483 +1333626.861353 +1333654.696217 +1333721.697539 +1333758.983065 +1333810.811883 +1333849.718520 +1333894.968378 +1333920.772542 +1333966.525451 +1333983.140540 +1334074.116580 +1334075.255517 +1334114.825615 +1334170.619656 +1334195.612049 +1334245.668750 +1334258.050190 +1334312.563191 +1334327.017952 +1334376.638630 +1334414.628163 +1334428.952985 +1334473.878946 +1334507.176953 +1334513.504906 +1334560.653526 +1334586.827564 +1334618.555183 +1334618.555183 +1334693.196304 +1334693.196304 +1334735.514998 +1334735.834499 +1334776.229684 +1334801.656589 +1334819.280544 +1334852.898440 +1334861.696422 +1334889.366810 +1334926.491751 +1334944.734357 +1334952.108667 +1334987.553022 +1335005.212554 +1335028.595335 +1335028.595335 +1335070.312102 +1335089.019878 +1335106.853458 +1335124.059780 +1335148.839438 +1335148.839438 +1335184.533971 +1335194.164261 +1335222.948855 +1335225.977660 +1335254.500253 +1335254.500253 +1335280.710728 +1335303.400319 +1335311.813631 +1335333.072998 +1335342.195150 +1335368.015817 +1335368.015817 +1335396.219658 +1335396.219658 +1335415.334271 +1335427.333966 +1335432.422527 +1335461.464101 +1335461.464101 +1335476.476959 +1335489.220585 +1335501.122677 +1335501.249034 +1335519.238392 +1335528.943228 +1335549.405702 +1335553.446684 +1335567.073889 +1335578.131084 +1335579.934689 +1335589.291297 +1335611.335049 +1335611.335049 +1335628.207138 +1335628.207138 +1335650.123719 +1335650.123719 +1335659.458265 +1335661.553968 +1335672.845075 +1335685.068047 +1335685.068047 +1335694.732548 +1335705.752318 +1335705.752318 +1335723.665903 +1335723.665903 +1335733.996851 +1335737.751938 +1335744.087831 +1335756.295073 +1335757.013146 +1335764.120000 +1335768.897066 +1335773.021132 +1335784.073263 +1335784.387633 +1335798.725227 +1335798.725227 +1335805.996268 +1335810.757984 +1335810.757984 +1335822.569587 +1335824.213961 +1335828.015306 +1335837.620035 +1335839.199097 +1335843.267974 +1335849.292821 +1335854.185243 +1335858.372829 +1335862.962237 +1335863.627055 +1335870.534754 +1335875.173379 +1335875.885217 +1335882.977142 +1335887.870095 +1335888.117441 +1335895.608220 +1335896.700346 +1335899.282689 +1335904.905381 +1335905.573075 +1335912.308425 +1335913.568791 +1335916.690843 +1335919.282865 +1335924.741651 +1335924.741651 +1335928.170376 +1335933.083436 +1335933.083436 +1335937.329801 +1335939.158863 +1335941.623180 +1335944.628023 +1335946.501050 +1335949.689557 +1335952.565278 +1335954.240736 +1335955.327706 +1335960.483202 +1335960.483202 +1335963.302198 +1335964.880074 +1335968.516337 +1335968.516337 +1335972.533672 +1335972.533672 +1335975.454051 +1335976.926362 +1335980.278118 +1335980.665449 +1335982.741810 +1335984.565528 +1335985.721296 +1335988.095886 +1335989.969746 +1335990.790103 +1335992.781829 +1335992.781829 +1335994.815084 +1335997.212355 +1335998.436714 +1335998.895707 +1336001.198297 +1336001.503636 +1336004.371704 +1336004.371704 +1336006.386284 +1336006.707511 +1336009.205788 +1336009.205788 +1336011.026938 +1336012.699560 +1336013.328558 +1336014.591169 +1336015.235470 +1336016.401289 +1336017.683998 +1336018.435939 +1336019.260835 +1336019.875893 +1336021.446091 +1336021.629689 +1336023.404976 +1336024.374479 +1336024.374479 +1336025.775248 +1336026.601759 +1336026.936348 +1336028.399138 +1336028.954093 +1336029.287274 +1336030.377447 +1336030.908848 +1336031.620570 +1336032.497969 +1336033.283151 +1336033.726584 +1336034.316853 +1336035.101205 +1336035.391090 +1336036.374105 +1336036.425212 +1336037.340358 +1336037.975877 +1336038.381303 +1336039.216513 +1336039.627969 +1336040.233754 +1336040.877488 +1336041.044714 +1336041.494222 +1336042.208125 +1336042.656467 +1336042.886236 +1336043.267605 +1336044.056132 +1336044.309351 +1336044.791876 +1336045.038204 +1336045.710375 +1336046.152488 +1336046.334512 +1336046.690252 +1336047.178339 +1336047.369217 +1336048.120864 +1336048.186851 +1336048.353989 +1336049.011752 +1336049.261093 +1336049.261093 +1336049.713562 +1336050.013839 +1336050.558665 +1336050.646385 +1336051.087939 +1336051.364397 +1336051.701982 +1336051.845631 +1336052.002055 +1336052.350198 +1336052.589583 +1336052.701890 +1336053.086672 +1336053.109531 +1336053.608213 +1336053.700714 +1336054.169026 +1336054.169603 +1336054.390320 +1336054.620583 +1336054.756619 +1336054.836978 +1336055.284188 +1336055.287969 +1336055.486929 +1336055.905396 +1336055.905396 +1336056.120410 +1336056.237586 +1336056.418744 +1336056.584080 +1336056.728589 +1336056.878163 +1336057.088426 +1336057.145057 +1336057.478520 +1336057.478520 +1336057.681190 +1336057.685034 +1336058.020093 +1336058.020093 +1336058.155088 +1336058.338127 +1336058.378536 +1336058.505483 +1336058.656019 +1336058.750519 +1336058.922288 +1336058.922288 +1336059.107172 +1336059.194546 +1336059.324416 +1336059.396593 +1336059.554967 +1336059.554967 +1336059.707151 +1336059.776496 +1336059.848736 +1336059.900018 +1336060.091742 +1336060.091742 +1336060.246505 +1336060.297851 +1336060.365240 +1336060.464773 +1336060.600882 +1336060.612843 +1336060.693565 +1336060.786258 +1336060.840988 +1336060.922385 +1336060.980425 +1336061.008804 +1336061.064360 +1336061.159374 +1336061.159374 +1336061.290351 +1336061.335581 +1336061.387480 +1336061.446610 +1336061.475750 +1336061.599322 +1336061.599322 +1336061.680328 +1336061.717224 +1336061.765173 +1336061.795407 +1336061.820433 +1336061.917459 +1336061.917459 +1336062.013914 +1336062.026389 +1336062.057948 +1336062.132268 +1336062.132268 +1336062.177551 +1336062.241709 +1336062.268484 +1336062.290532 +1336062.338909 +1336062.367768 +1336062.390806 +1336062.455449 +1336062.871911 +1336062.871911 +1336062.948754