Uniformly select a single subset from a given set
This is a demo to uniformly separate a subset from a given set by using Mixed Integer Linear Programming (MILP)
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 30 samples from grad_t4 using MILP
clear params grbParams params.numSamples = 30; % set a lower bound, it can be 0 or covering radius from an existing scheme params.lbCost = 0.24; % grb parameters % MIPFocus 1 seems better grbParams.MIPFocus=1; % set time limit as 10 minutes or more grbParams.TimeLimit=600; % print verbose output from gurobi grbParams.OutputFlag=true; % grbParams.OutputFlag=false; % params.ModelFile='model.mps'; % run [grad,grb] = OptimalSamplingSingleSubset(grad_t4, params, grbParams);
MIPFocus = 1 Academic license - for non-commercial use only Optimize a model with 5896 rows, 322 columns and 18006 nonzeros Variable types: 1 continuous, 321 integer (321 binary) Coefficient statistics: Matrix range [1e+00, 1e+00] Objective range [1e+00, 1e+00] Bounds range [2e-01, 1e+00] RHS range [3e+00, 3e+01] Found heuristic solution: objective 0.25999 Presolve time: 0.01s Presolved: 5896 rows, 322 columns, 18006 nonzeros Variable types: 1 continuous, 321 integer (321 binary) Presolved: 322 rows, 6218 columns, 18328 nonzeros Presolve removed 322 rows and 6218 columns Root relaxation: objective 4.925213e-01, 137 iterations, 0.01 seconds Nodes | Current Node | Objective Bounds | Work Expl Unexpl | Obj Depth IntInf | Incumbent BestBd Gap | It/Node Time 0 0 0.49252 0 54 0.25999 0.49252 89.4% - 0s H 0 0 0.2657885 0.49252 85.3% - 0s H 0 0 0.2696609 0.49252 82.6% - 0s H 0 0 0.2767874 0.49252 77.9% - 0s H 0 0 0.2776993 0.49252 77.4% - 0s H 0 0 0.2803222 0.49252 75.7% - 0s 0 0 0.49252 0 64 0.28032 0.49252 75.7% - 0s H 0 0 0.2986800 0.49252 64.9% - 0s 0 0 0.49252 0 63 0.29868 0.49252 64.9% - 0s 0 0 0.49252 0 65 0.29868 0.49252 64.9% - 0s H 0 0 0.3226415 0.49252 52.7% - 0s 0 0 0.49252 0 68 0.32264 0.49252 52.7% - 0s 0 0 0.49252 0 69 0.32264 0.49252 52.7% - 0s H 0 0 0.3226419 0.49252 52.7% - 0s 0 0 0.49252 0 60 0.32264 0.49252 52.7% - 0s 0 0 0.49252 0 60 0.32264 0.49252 52.7% - 0s 0 0 0.49252 0 60 0.32264 0.49252 52.7% - 0s 0 0 0.49252 0 40 0.32264 0.49252 52.7% - 0s H 0 0 0.3234399 0.49252 52.3% - 0s 0 2 0.49252 0 40 0.32344 0.49252 52.3% - 0s H 2 4 0.3828035 0.49252 28.7% 334 0s H 3 8 0.3839959 0.49252 28.3% 236 0s H 147 128 0.3850299 0.49252 27.9% 15.6 1s H 174 163 0.3871869 0.49252 27.2% 14.0 1s H 301 302 0.3915867 0.49252 25.8% 9.6 1s H 371 370 0.3937169 0.49252 25.1% 8.5 1s H 399 398 0.3967654 0.49252 24.1% 8.1 1s H 686 679 0.3967658 0.49252 24.1% 7.4 1s H 713 681 0.4028492 0.49252 22.3% 7.4 2s H 800 751 0.4028495 0.49252 22.3% 7.4 2s H 804 775 0.4028499 0.49252 22.3% 7.5 2s H 1229 1058 0.4038586 0.49252 22.0% 14.9 4s H 1230 1010 0.4059673 0.49252 21.3% 15.0 4s H 1288 979 0.4063142 0.49252 21.2% 16.0 4s H 1389 1003 0.4071825 0.49252 21.0% 15.5 4s H 1390 994 0.4110652 0.49252 19.8% 15.5 5s H 1460 1000 0.4110656 0.49252 19.8% 15.8 5s H 1520 998 0.4114454 0.49252 19.7% 15.3 5s H 1624 1035 0.4121936 0.49252 19.5% 15.6 5s H 1738 1075 0.4121939 0.49252 19.5% 15.2 5s H 2022 1216 0.4137738 0.49252 19.0% 15.4 6s H 2219 1259 0.4144714 0.49252 18.8% 16.2 6s H 2300 1256 0.4144718 0.49252 18.8% 16.4 7s H 2397 1276 0.4144720 0.49252 18.8% 16.8 7s H 2504 1273 0.4151806 0.49252 18.6% 17.0 7s H 2581 1333 0.4151808 0.49252 18.6% 17.1 7s H 2653 1402 0.4151808 0.49252 18.6% 17.0 7s H 2790 1499 0.4151811 0.49252 18.6% 17.1 8s 2832 1505 cutoff 95 0.41518 0.49252 18.6% 17.2 10s 3258 1735 0.47124 54 54 0.41518 0.49252 18.6% 17.9 15s 3496 1876 cutoff 69 0.41518 0.49252 18.6% 17.7 20s 4098 2199 0.48580 29 68 0.41518 0.49252 18.6% 17.9 27s 5384 2953 0.49252 59 52 0.41518 0.49252 18.6% 18.2 30s 6380 3626 cutoff 70 0.41518 0.49252 18.6% 18.7 35s 7803 4397 0.45991 79 44 0.41518 0.49252 18.6% 18.9 42s 9109 5013 0.49252 46 48 0.41518 0.49252 18.6% 18.9 47s H10244 5584 0.4151813 0.49252 18.6% 18.9 49s 10340 5593 0.48258 56 74 0.41518 0.49252 18.6% 18.9 51s 11532 6236 0.46797 37 56 0.41518 0.49252 18.6% 18.8 56s H11666 6013 0.4236827 0.49252 16.2% 18.8 56s H12697 6444 0.4236830 0.49252 16.2% 19.1 58s 12736 6449 0.48380 28 67 0.42368 0.49252 16.2% 19.2 60s 13669 6841 0.49107 71 73 0.42368 0.49252 16.2% 19.1 67s 15278 7612 0.49186 56 85 0.42368 0.49252 16.2% 19.1 73s 15753 7937 0.47951 68 72 0.42368 0.49252 16.2% 19.1 79s 15973 8013 0.46106 69 52 0.42368 0.49252 16.2% 19.1 81s 17849 9070 0.47373 52 55 0.42368 0.49252 16.2% 19.1 87s 17861 9062 cutoff 53 0.42368 0.49252 16.2% 19.1 94s 18118 9173 cutoff 54 0.42368 0.49252 16.2% 19.1 98s 18696 9482 cutoff 49 0.42368 0.49252 16.2% 19.1 106s 19329 9798 0.47681 51 62 0.42368 0.49252 16.2% 19.2 112s 19721 9945 0.48710 51 73 0.42368 0.49252 16.2% 19.2 118s 20287 10260 0.48515 58 63 0.42368 0.49252 16.2% 19.2 124s 20295 10224 0.48022 59 63 0.42368 0.49252 16.2% 19.2 128s 21326 10667 0.45795 64 54 0.42368 0.49252 16.2% 19.1 137s 24708 12216 0.49252 60 49 0.42368 0.49252 16.2% 19.1 143s 25458 12495 0.48685 63 67 0.42368 0.49252 16.2% 19.0 149s 26144 12767 0.47506 62 58 0.42368 0.49252 16.2% 19.0 155s 29375 14089 0.49252 56 50 0.42368 0.49252 16.2% 19.0 162s 30141 14423 0.49252 57 50 0.42368 0.49252 16.2% 19.0 168s 31148 14925 0.49222 42 87 0.42368 0.49252 16.2% 19.0 174s 31660 15150 0.44796 66 47 0.42368 0.49252 16.2% 19.1 181s 32607 15698 0.49252 45 55 0.42368 0.49252 16.2% 19.1 190s 36814 17647 0.42718 51 41 0.42368 0.49252 16.2% 19.2 198s 37753 18037 0.46756 68 59 0.42368 0.49252 16.2% 19.2 206s 40344 19289 0.49147 67 71 0.42368 0.49252 16.2% 19.2 213s 41454 19871 cutoff 51 0.42368 0.49252 16.2% 19.3 220s 42033 20138 0.47968 38 61 0.42368 0.49252 16.2% 19.3 228s 42287 20171 0.48923 38 74 0.42368 0.49252 16.2% 19.3 230s 45010 21618 0.47282 98 60 0.42368 0.49252 16.2% 19.4 236s 45216 21701 0.47198 99 58 0.42368 0.49252 16.2% 19.4 242s 45503 21758 0.46995 100 57 0.42368 0.49252 16.2% 19.4 245s 48430 23377 0.46780 49 56 0.42368 0.49252 16.2% 19.5 257s 50699 24370 0.48754 45 71 0.42368 0.49252 16.2% 19.6 264s 51008 24415 0.48343 46 66 0.42368 0.49252 16.2% 19.6 265s 53154 25418 0.48675 48 68 0.42368 0.49252 16.2% 19.6 270s 54030 25834 0.48482 64 70 0.42368 0.49252 16.2% 19.6 279s 54038 25774 0.48345 65 69 0.42368 0.49252 16.2% 19.6 280s 56414 26947 0.49252 54 54 0.42368 0.49252 16.2% 19.6 290s 56708 27143 0.49252 55 52 0.42368 0.49252 16.2% 19.6 296s 59425 28337 cutoff 127 0.42368 0.49252 16.2% 19.6 305s 61386 29104 cutoff 44 0.42368 0.49252 16.2% 19.6 311s 61753 29272 cutoff 64 0.42368 0.49252 16.2% 19.6 318s 62408 29508 0.48562 50 73 0.42368 0.49252 16.2% 19.7 320s 64443 30511 cutoff 48 0.42368 0.49252 16.2% 19.7 327s 66159 31143 0.48072 41 70 0.42368 0.49252 16.2% 19.6 333s 66353 31160 0.47913 42 67 0.42368 0.49252 16.2% 19.6 335s 68252 32113 cutoff 62 0.42368 0.49252 16.2% 19.6 341s 68433 32184 cutoff 63 0.42368 0.49252 16.2% 19.6 345s 70460 33282 cutoff 58 0.42368 0.49252 16.2% 19.7 354s 70471 33238 cutoff 60 0.42368 0.49252 16.2% 19.7 355s 71783 33979 cutoff 114 0.42368 0.49252 16.2% 19.7 362s 73317 34784 0.45928 66 49 0.42368 0.49252 16.2% 19.8 368s 73327 34743 cutoff 67 0.42368 0.49252 16.2% 19.8 370s 74884 35537 cutoff 49 0.42368 0.49252 16.2% 19.8 375s 76752 36483 0.46750 69 55 0.42368 0.49252 16.2% 19.9 380s 78201 37190 0.49252 71 56 0.42368 0.49252 16.2% 19.9 385s 79956 38392 0.48993 90 84 0.42368 0.49252 16.2% 20.0 390s 80232 38505 0.47715 98 59 0.42368 0.49252 16.2% 20.0 395s 81974 39268 0.49252 82 59 0.42368 0.49252 16.2% 20.0 402s 83367 39820 0.49252 85 59 0.42368 0.49252 16.2% 20.0 410s 83954 40098 0.49252 86 57 0.42368 0.49252 16.2% 20.0 418s 86216 41385 0.49139 66 77 0.42368 0.49252 16.2% 20.1 426s 87852 42208 0.46378 96 53 0.42368 0.49252 16.2% 20.1 433s 88829 42779 0.48101 63 66 0.42368 0.49252 16.2% 20.1 439s 89088 42916 0.44489 77 43 0.42368 0.49252 16.2% 20.1 440s 90863 43946 0.46355 73 57 0.42368 0.49252 16.2% 20.1 447s 92637 44820 0.49082 61 82 0.42368 0.49252 16.2% 20.1 452s 94419 45742 0.49252 52 52 0.42368 0.49252 16.2% 20.1 458s 94499 45774 0.48621 52 67 0.42368 0.49252 16.2% 20.1 460s 95918 46556 cutoff 69 0.42368 0.49252 16.2% 20.1 467s 97568 47351 0.46381 84 61 0.42368 0.49252 16.2% 20.1 471s H97573 47353 0.4236833 0.49252 16.2% 20.1 471s 98829 47986 0.49218 63 86 0.42368 0.49252 16.2% 20.1 475s 99084 48108 0.49218 64 86 0.42368 0.49252 16.2% 20.1 481s 100297 48780 0.49055 58 87 0.42368 0.49252 16.2% 20.2 486s 100616 48936 0.47500 61 55 0.42368 0.49252 16.2% 20.2 493s 100755 49003 0.44227 79 41 0.42368 0.49252 16.2% 20.2 496s 101005 49187 0.47496 84 51 0.42368 0.49252 16.2% 20.2 502s 101014 49174 0.48153 84 59 0.42368 0.49252 16.2% 20.2 505s 101719 49518 0.48475 61 77 0.42368 0.49252 16.2% 20.2 513s 101731 49490 0.48475 62 77 0.42368 0.49252 16.2% 20.2 517s 102265 49792 0.42934 63 37 0.42368 0.49252 16.2% 20.2 521s 102405 49831 0.42934 64 37 0.42368 0.49252 16.2% 20.2 528s 102950 50134 0.45669 64 51 0.42368 0.49252 16.2% 20.2 533s 103000 50137 cutoff 65 0.42368 0.49252 16.2% 20.2 535s 103795 50495 0.48003 65 64 0.42368 0.49252 16.2% 20.2 541s 106395 51971 0.48428 42 67 0.42368 0.49252 16.2% 20.2 545s 106759 52169 0.47916 43 59 0.42368 0.49252 16.2% 20.2 552s 109271 53629 0.48126 88 67 0.42368 0.49252 16.2% 20.3 559s 109279 53634 0.46509 86 57 0.42368 0.49252 16.2% 20.3 564s 109504 53731 0.44877 105 40 0.42368 0.49252 16.2% 20.3 566s 111642 54994 0.49106 79 77 0.42368 0.49252 16.2% 20.3 570s 112075 55233 0.42718 92 40 0.42368 0.49252 16.2% 20.3 575s 112830 55587 0.45297 61 54 0.42368 0.49252 16.2% 20.3 581s 115272 56865 0.47616 109 56 0.42368 0.49252 16.2% 20.4 586s 115978 57121 cutoff 58 0.42368 0.49252 16.2% 20.4 592s 116211 57234 0.46766 59 50 0.42368 0.49252 16.2% 20.4 600s Cutting planes: Gomory: 7 Clique: 236 MIR: 1 Flow cover: 80 Zero half: 21 Explored 116219 nodes (2368534 simplex iterations) in 600.01 seconds Thread count was 8 (of 8 available processors) Solution count 10: 0.423683 0.423683 0.423683 ... 0.414472 Time limit reached Best objective 4.236832835444e-01, best bound 4.925212544099e-01, gap 16.2475%
visualize the result
VisualizeMultiShellScheme(grad); title({'Estimated Scheme.', ['Covering radius = ', num2str(CoveringRadius(grad)*180/pi), ' degree']});