Uniformly select multiple subsets from a given set
This is a demo to uniformly separate multiple subsets from a given set by using Mixed Integer Linear Programming (MILP) It reproduces the experiment in the paper.
Reference:
1. "Single- and Multiple-Shell Uniform Sampling Schemes for Diffusion MRI Using Spherical Codes", Jian Cheng, Dinggang Shen, Pew-Thian Yap, Peter J. Basser, IEEE Transactions on Medical Imaging, 2017.
2. "Designing Single- and Multiple-Shell Sampling Schemes for Diffusion MRI Using Spherical Code", Jian Cheng, Dinggang Shen, Pew-Thian Yap, MICCAI 2014.
Copyright (c) 2013, Jian Cheng (jian.cheng.1983@gmail.com)
Contents
read sphere tessellation with 321 samples in the hemisphere
grad_t4 = ReadDirections([getenv('HOME'), '/.dmritool/Data/Tessellation/directions_t4.txt']); VisualizeMultiShellScheme(grad_t4); title(['Sphere tessellation with 321 samples in the hemisphere']);
extract 28x3 samples from grad_t4 using MILP
clear params grbParams params.numSamples = [28, 28, 28]; % sos constraint params.sos = 1; % set a lower bound, it can be 0 or covering radius from an existing scheme params.lbCost = [0.35,0.35,0.35,0.2]; params.w=0.5; % grb parameters % MIPFocus=1 seems better grbParams.MIPFocus = 1; % time limit grbParams.TimeLimit = 600; % print verbose output from gurobi grbParams.OutputFlag=true; % grbParams.OutputFlag=false; % It is possible to set a warm start if you have one % grbParams.start = gradInit; % run [grad,grb, indexMatrix] = OptimalSamplingMultiSubsetsFromSameSet(grad_t4, params,grbParams);
MIPFocus = 1 Academic license - for non-commercial use only Optimize a model with 20163 rows, 967 columns and 70263 nonzeros Model has 321 SOS constraints Variable types: 4 continuous, 963 integer (963 binary) Coefficient statistics: Matrix range [1e+00, 1e+00] Objective range [2e-01, 5e-01] Bounds range [2e-01, 1e+00] RHS range [3e+00, 3e+01] Presolve removed 1600 rows and 0 columns Presolve time: 0.13s Presolved: 18563 rows, 967 columns, 64723 nonzeros Variable types: 4 continuous, 963 integer (963 binary) Presolved: 967 rows, 19530 columns, 65690 nonzeros Presolve removed 967 rows and 19530 columns Root relaxation: objective 4.019570e-01, 780 iterations, 0.06 seconds Nodes | Current Node | Objective Bounds | Work Expl Unexpl | Obj Depth IntInf | Incumbent BestBd Gap | It/Node Time 0 0 0.40196 0 164 - 0.40196 - - 0s 0 0 0.40196 0 179 - 0.40196 - - 0s 0 0 0.40196 0 184 - 0.40196 - - 0s 0 0 0.40196 0 187 - 0.40196 - - 1s 0 0 0.40196 0 191 - 0.40196 - - 1s 0 0 0.40196 0 236 - 0.40196 - - 2s 0 0 0.40196 0 232 - 0.40196 - - 2s 0 0 0.40196 0 270 - 0.40196 - - 3s 0 0 0.40196 0 233 - 0.40196 - - 3s 0 0 0.40196 0 166 - 0.40196 - - 5s 0 2 0.40196 0 166 - 0.40196 - - 29s 15 16 0.40196 5 185 - 0.40196 - 565 30s 432 434 0.40004 124 244 - 0.40196 - 113 35s 1136 1138 0.36149 351 172 - 0.40196 - 86.0 41s 1703 1706 0.35814 448 157 - 0.40196 - 74.1 45s 2692 2663 0.40196 204 167 - 0.40196 - 59.9 51s 3358 3300 0.38200 562 193 - 0.40196 - 54.0 55s 3564 3470 0.37676 370 164 - 0.40196 - 57.1 61s 3569 3474 0.36536 335 326 - 0.40196 - 57.0 65s 3572 3476 0.40151 234 328 - 0.40196 - 56.9 70s H 3573 3302 0.2956821 0.40196 35.9% 56.9 83s H 3573 3136 0.2956825 0.40196 35.9% 56.9 83s 3575 3141 0.40196 16 158 0.29568 0.40196 35.9% 64.2 86s 3603 3156 0.40196 21 219 0.29568 0.40196 35.9% 68.6 90s 3652 3191 0.40196 25 214 0.29568 0.40196 35.9% 73.0 97s 3723 3237 0.40196 28 206 0.29568 0.40196 35.9% 81.1 103s H 3811 3140 0.3016700 0.40196 33.2% 92.6 108s 3890 3192 0.40196 34 197 0.30167 0.40196 33.2% 96.8 115s H 3898 3048 0.3018425 0.40196 33.2% 99.3 115s H 3920 2921 0.3021782 0.40196 33.0% 102 115s H 3930 2782 0.3022095 0.40196 33.0% 102 115s H 3967 2688 0.3064656 0.40196 31.2% 104 122s 4026 2729 0.40196 41 191 0.30647 0.40196 31.2% 109 128s H 4065 2629 0.3074222 0.40196 30.8% 115 128s 4134 2680 0.40196 47 193 0.30742 0.40196 30.8% 116 136s H 4187 2599 0.3093780 0.40196 29.9% 121 136s 4229 2628 0.40196 56 187 0.30938 0.40196 29.9% 123 145s H 4266 2542 0.3094094 0.40196 29.9% 126 145s 4267 2555 0.40189 58 322 0.30941 0.40196 29.9% 126 159s H 4362 2489 0.3094095 0.40196 29.9% 134 159s 4363 2498 0.39876 71 323 0.30941 0.40196 29.9% 134 179s H 4443 2426 0.3109430 0.40196 29.3% 140 179s 4482 2491 0.39879 85 301 0.31094 0.40196 29.3% 142 205s 4586 2544 0.39846 93 311 0.31094 0.40196 29.3% 147 227s 4637 2586 0.39332 101 209 0.31094 0.40196 29.3% 150 238s 4857 2743 0.39296 114 261 0.31094 0.40196 29.3% 156 254s H 5077 2747 0.3111455 0.40196 29.2% 159 254s H 5187 2742 0.3129207 0.40196 28.5% 162 268s 5191 2743 0.38922 147 302 0.31292 0.40196 28.5% 163 284s H 5257 2672 0.3137676 0.40196 28.1% 168 284s 5296 2710 0.37631 161 264 0.31377 0.40196 28.1% 168 309s H 5324 2643 0.3148766 0.40196 27.7% 168 309s 5434 2712 0.37446 173 266 0.31488 0.40196 27.7% 168 323s H 5497 2674 0.3158512 0.40196 27.3% 170 323s 5505 2676 0.34793 202 171 0.31585 0.40196 27.3% 171 343s H 5524 2597 0.3158512 0.40196 27.3% 171 343s H 5555 2547 0.3162834 0.40196 27.1% 174 343s 5576 2575 0.34793 212 164 0.31628 0.40196 27.1% 175 365s H 5643 2525 0.3162835 0.40196 27.1% 178 365s H 5668 2483 0.3163227 0.40196 27.1% 178 365s 5671 2504 0.32503 224 151 0.31632 0.40196 27.1% 178 381s H 5737 2458 0.3163228 0.40196 27.1% 181 381s 5788 2520 0.40196 36 254 0.31632 0.40196 27.1% 183 397s H 5799 2465 0.3166498 0.40196 26.9% 184 397s 5812 2462 0.40196 40 251 0.31665 0.40196 26.9% 184 411s H 5838 2400 0.3166892 0.40196 26.9% 184 411s 5923 2466 0.40196 67 288 0.31669 0.40196 26.9% 185 430s H 6010 2464 0.3173800 0.40196 26.6% 194 448s H 6061 2449 0.3174509 0.40196 26.6% 193 448s 6077 2466 0.40196 178 166 0.31745 0.40196 26.6% 196 469s 6279 2595 0.40196 336 204 0.31745 0.40196 26.6% 199 492s H 6377 2663 0.3174509 0.40196 26.6% 201 492s H 6424 2702 0.3183940 0.40196 26.2% 206 492s 6425 2732 0.40037 412 299 0.31839 0.40196 26.2% 207 508s H 6434 2738 0.3190413 0.40196 26.0% 208 508s 6447 2738 0.40142 418 310 0.31904 0.40196 26.0% 212 535s H 6487 2772 0.3190413 0.40196 26.0% 214 535s H 6510 2800 0.3217132 0.40196 24.9% 218 535s H 6560 2854 0.3217134 0.40196 24.9% 218 555s H 6583 2878 0.3217135 0.40196 24.9% 219 555s H 6675 2969 0.3225686 0.40196 24.6% 225 579s H 6700 2969 0.3225687 0.40196 24.6% 226 579s 6788 3097 0.37884 455 275 0.32257 0.40196 24.6% 228 600s H 6814 3107 0.3225688 0.40196 24.6% 227 600s Cutting planes: Gomory: 3 Clique: 794 MIR: 42 StrongCG: 1 Flow cover: 50 Zero half: 7 Explored 6853 nodes (1588384 simplex iterations) in 600.02 seconds Thread count was 8 (of 8 available processors) Solution count 10: 0.322569 0.322569 0.322569 ... 0.317451 Time limit reached Best objective 3.225688175350e-01, best bound 4.019570380823e-01, gap 24.6113%
visualize the result
VisualizeMultiShellScheme(grad{1},grad{2},grad{3}); title({'Estimated Scheme.', ['Combined covering radius = ', num2str(CoveringRadius([grad{1};grad{2};grad{3}])*180/pi), ' degree']});