Uniformly select multi-shell subsets from a multi-shell scheme

This is a demo to uniformly separate multiple subsets from the multi-shell scheme in Human Connectome Project (HCP) 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 HCP scheme

grad_hcp_all{1}=ReadDirections('/home/jcheng/mywork/output/sampling/HCP_Q3/grad_b1000.txt');
grad_hcp_all{2}=ReadDirections('/home/jcheng/mywork/output/sampling/HCP_Q3/grad_b2000.txt');
grad_hcp_all{3}=ReadDirections('/home/jcheng/mywork/output/sampling/HCP_Q3/grad_b3000.txt');

VisualizeMultiShellScheme(grad_hcp_all{1}, grad_hcp_all{2}, grad_hcp_all{3});
title(['Original 90x3 HCP scheme']);

extract 45x3 samples from 90x3 scheme

clear params grbParams
params.numSamples = [45, 45, 45];
% set a lower bound, it can be 0 or covering radius from an initial guess
params.lbCost = [0.25,0.25,0.25,0.11];
% params.lbCost = [0,0,0,0];

% if you want to write the model for gurobi_cl
% params.ModelFile='model.mps'
% params.ResultFile='grb_solution.sol'


params.w=0.5;

% grb parameters
% MIPFocus 1
grbParams.MIPFocus=1;
grbParams.TimeLimit=600;
grbParams.OutputFlag=true;


% run
[grad,grb, indexMatrix] = OptimalSamplingMultiSubsetsFromDifferentSets(grad_hcp_all, params, grbParams);

% the selected indices for each shell
index_1=find(indexMatrix{1}==1);
index_2=find(indexMatrix{2}==1);
index_3=find(indexMatrix{3}==1);
MIPFocus = 1
Academic license - for non-commercial use only
Optimize a model with 1653 rows, 274 columns and 5220 nonzeros
Variable types: 4 continuous, 270 integer (270 binary)
Coefficient statistics:
  Matrix range     [1e+00, 2e+00]
  Objective range  [2e-01, 5e-01]
  Bounds range     [1e-01, 1e+00]
  RHS range        [3e+00, 4e+01]
Presolve time: 0.00s
Presolved: 1653 rows, 274 columns, 5220 nonzeros
Variable types: 4 continuous, 270 integer (270 binary)
Presolved: 274 rows, 1927 columns, 5494 nonzeros

Presolve removed 274 rows and 1927 columns

Root relaxation: objective 3.169220e-01, 912 iterations, 0.02 seconds

    Nodes    |    Current Node    |     Objective Bounds      |     Work
 Expl Unexpl |  Obj  Depth IntInf | Incumbent    BestBd   Gap | It/Node Time

     0     0    0.31692    0  270          -    0.31692      -     -    0s
     0     0    0.30700    0  263          -    0.30700      -     -    0s
H    0     0                       0.1834408    0.30700  67.4%     -    0s
     0     0    0.30409    0  263    0.18344    0.30409  65.8%     -    0s
     0     0    0.29387    0  263    0.18344    0.29387  60.2%     -    0s
     0     0    0.29288    0  263    0.18344    0.29288  59.7%     -    0s
     0     0    0.29041    0  264    0.18344    0.29041  58.3%     -    0s
H    0     0                       0.1852242    0.29041  56.8%     -    0s
     0     0    0.28965    0  263    0.18522    0.28965  56.4%     -    0s
     0     0    0.28888    0  265    0.18522    0.28888  56.0%     -    0s
     0     0    0.28854    0  266    0.18522    0.28854  55.8%     -    0s
     0     0    0.28818    0  263    0.18522    0.28818  55.6%     -    0s
H    0     0                       0.1871523    0.28818  54.0%     -    0s
H    0     0                       0.1907722    0.28818  51.1%     -    2s
     0     2    0.28818    0  262    0.19077    0.28818  51.1%     -    2s
H    6     8                       0.1909499    0.28711  50.4%   210    2s
H   11    16                       0.1910040    0.28711  50.3%   212    2s
H   16    20                       0.1918854    0.28607  49.1%   253    2s
H   22    22                       0.1918855    0.28607  49.1%   246    2s
H   25    25                       0.1922160    0.28607  48.8%   232    2s
H   50    51                       0.1922764    0.28607  48.8%   177    3s
H   54    53                       0.1922764    0.28607  48.8%   171    3s
H   57    58                       0.1923796    0.28607  48.7%   171    3s
H   66    64                       0.1924249    0.28607  48.7%   158    3s
H   72    71                       0.1925004    0.28607  48.6%   150    3s
H   77    79                       0.1928935    0.28607  48.3%   143    3s
H   78    79                       0.1934989    0.28607  47.8%   144    3s
H   96    96                       0.1934989    0.28607  47.8%   140    3s
    99   101    0.25960   20  222    0.19350    0.28607  47.8%   139    6s
H  104   105                       0.1934989    0.28607  47.8%   136    6s
H  304   305                       0.1934989    0.28607  47.8%  69.2    7s
H  502   467                       0.1934989    0.28547  47.5%  62.2    9s
H  540   504                       0.1934989    0.28547  47.5%  60.8    9s
   591   549    0.21252   43  126    0.19350    0.28547  47.5%  59.0   10s
H  600   549                       0.1934989    0.28547  47.5%  58.4   10s
  1052   850    0.21588   68  262    0.19350    0.26429  36.6%  46.5   16s
  1099   886    0.25424   19  243    0.19350    0.25968  34.2%  56.0   20s
H 1430  1042                       0.1934989    0.25935  34.0%  55.0   21s
  2893  1629    0.24939   22  224    0.19350    0.25778  33.2%  47.6   25s
H 2909  1594                       0.1934989    0.25778  33.2%  47.7   25s
  4392  2631    0.24350   32  212    0.19350    0.25411  31.3%  45.5   31s
H 4418  2649                       0.1934989    0.25411  31.3%  45.5   31s
H 4673  2852                       0.1934990    0.25411  31.3%  45.6   32s
H 4744  2892                       0.1934990    0.25366  31.1%  45.5   33s
  5035  3118    0.19673   56   89    0.19350    0.25343  31.0%  45.2   38s
  5295  3344    0.23223   31  193    0.19350    0.25343  31.0%  44.7   41s
H 5300  3344                       0.1934990    0.25343  31.0%  44.7   41s
H 5312  3356                       0.1934991    0.25343  31.0%  44.7   41s
  6394  4155    0.24336   25  221    0.19350    0.25275  30.6%  44.1   47s
H 6458  4195                       0.1934991    0.25275  30.6%  44.1   47s
  7483  4961    0.19609   71   62    0.19350    0.25218  30.3%  43.5   52s
H 7654  5043                       0.1934991    0.25197  30.2%  43.3   52s
  8167  5415    0.23330   33  200    0.19350    0.25173  30.1%  42.8   55s
H 8394  5565                       0.1934991    0.25172  30.1%  42.8   55s
  9436  6345    0.20165   66   55    0.19350    0.25143  29.9%  42.6   61s
H 9619  6439                       0.1934991    0.25141  29.9%  42.6   61s
H10065  6809                       0.1934991    0.25124  29.8%  42.8   64s
 10150  6900    0.21017   51  131    0.19350    0.25119  29.8%  42.8   68s
 10607  7230    0.20475   65  108    0.19350    0.25100  29.7%  42.9   70s
H10784  7291                       0.1934994    0.25097  29.7%  42.8   70s
 11752  8076    0.21659   39  161    0.19350    0.25078  29.6%  42.6   78s
H11898  8159                       0.1934994    0.25078  29.6%  42.6   78s
 12187  8429    0.20022   56   93    0.19350    0.25042  29.4%  42.7   81s
 12315  8524    0.24581   27  229    0.19350    0.25041  29.4%  42.7   85s
H13063  9076                       0.1934994    0.25030  29.4%  42.6   88s
 13174  9162    0.22015   36  166    0.19350    0.25024  29.3%  42.6   94s
H13254  9210                       0.1934994    0.25024  29.3%  42.5   94s
 13535  9419    0.24135   24  209    0.19350    0.25014  29.3%  42.5  101s
H14064  9759                       0.1934994    0.25009  29.2%  42.4  101s
 14263  9951    0.24477   25  237    0.19350    0.25003  29.2%  42.3  105s
H14501 10095                       0.1934994    0.24998  29.2%  42.3  105s
 14828 10363    0.20413   53  121    0.19350    0.24993  29.2%  42.4  111s
H15305 10666                       0.1934994    0.24984  29.1%  42.3  111s
H15624 10906                       0.1934994    0.24976  29.1%  42.2  111s
 15625 10954    0.23681   31  218    0.19350    0.24970  29.0%  42.2  116s
H15896 11081                       0.1934994    0.24966  29.0%  42.2  116s
H16101 11245                       0.1934994    0.24962  29.0%  42.2  116s
 16374 11522    0.24307   25  232    0.19350    0.24955  29.0%  42.1  122s
H16608 11656                       0.1934994    0.24955  29.0%  42.2  122s
H16635 11670                       0.1934994    0.24955  29.0%  42.2  122s
 16790 11804    0.22129   32  164    0.19350    0.24955  29.0%  42.3  127s
H16811 11824                       0.1934994    0.24955  29.0%  42.3  127s
 17202 12093    0.22217   33  154    0.19350    0.24951  28.9%  42.3  132s
H17891 12508                       0.1934994    0.24942  28.9%  42.1  132s
 18206 12808    0.23405   28  201    0.19350    0.24927  28.8%  42.1  139s
H18590 13026                       0.1934994    0.24920  28.8%  42.1  139s
H19027 13278                       0.1934994    0.24918  28.8%  42.1  139s
 19218 13536    0.23391   29  177    0.19350    0.24911  28.7%  42.2  144s
H19410 13618                       0.1934994    0.24911  28.7%  42.2  144s
 20230 14309    0.24260   30  213    0.19350    0.24898  28.7%  42.1  151s
H21026 14842                       0.1934994    0.24893  28.6%  42.2  151s
 21098 14952    0.22066   34  190    0.19350    0.24893  28.6%  42.3  160s
H21099 14952                       0.1934994    0.24893  28.6%  42.3  160s
H21100 14952                       0.1934994    0.24893  28.6%  42.3  160s
 21222 15013    0.21774   37  190    0.19350    0.24891  28.6%  42.2  166s
 22592 16027    0.20952   56  107    0.19350    0.24888  28.6%  42.2  173s
H22880 16235                       0.1934994    0.24888  28.6%  42.2  173s
 22945 16278    0.20642   60  100    0.19350    0.24876  28.6%  42.2  179s
H23380 16549                       0.1934994    0.24862  28.5%  42.1  179s
 23493 16663    0.20069   55   62    0.19350    0.24860  28.5%  42.2  183s
H23608 16749                       0.1934994    0.24860  28.5%  42.1  183s
 23831 16911    0.22722   31  192    0.19350    0.24860  28.5%  42.1  189s
H23900 16911                       0.1934994    0.24860  28.5%  42.1  189s
H25068 17612                       0.1934994    0.24848  28.4%  42.0  189s
 25323 18008    0.23853   26  204    0.19350    0.24841  28.4%  42.0  194s
H25756 18283                       0.1934994    0.24837  28.4%  42.0  194s
 26363 18805    0.20744   54  139    0.19350    0.24820  28.3%  42.0  200s
H26400 18805                       0.1934994    0.24820  28.3%  42.1  200s
 26867 19137    0.22535   43  158    0.19350    0.24816  28.2%  42.1  207s
 28112 20021    0.20104   46  117    0.19350    0.24810  28.2%  42.0  215s
H28200 20021                       0.1934994    0.24810  28.2%  42.0  215s
H28850 20533                       0.1934994    0.24804  28.2%  42.1  215s
 29040 20742    0.22112   40  167    0.19350    0.24802  28.2%  42.0  223s
H29200 20742                       0.1934994    0.24802  28.2%  42.0  223s
H29383 20983                       0.1934994    0.24802  28.2%  42.1  223s
 29950 21410    0.23894   34  208    0.19350    0.24797  28.2%  42.0  229s
H30051 21454                       0.1934994    0.24797  28.1%  42.0  229s
 31064 22234    0.21654   46  168    0.19350    0.24790  28.1%  42.1  236s
H31100 22234                       0.1934994    0.24790  28.1%  42.0  236s
H31585 22576                       0.1934994    0.24785  28.1%  42.0  236s
 31960 22862    0.23812   34  213    0.19350    0.24781  28.1%  42.1  244s
H32300 22862                       0.1934994    0.24781  28.1%  42.0  244s
H32917 23543                       0.1934994    0.24775  28.0%  42.0  244s
 33429 23922    0.20935   56  107    0.19350    0.24766  28.0%  42.1  251s
H34397 24596                       0.1934994    0.24766  28.0%  42.1  251s
 34542 24718    0.21766   49  160    0.19350    0.24756  27.9%  42.1  256s
H34798 24798                       0.1934994    0.24755  27.9%  42.0  256s
 35643 25494    0.22395   40  176    0.19350    0.24744  27.9%  42.0  261s
 36519 26151    0.21107   51  152    0.19350    0.24739  27.8%  42.0  268s
H37310 26694                       0.1934994    0.24735  27.8%  42.1  268s
 37770 27083    0.22573   47  159    0.19350    0.24732  27.8%  42.1  277s
H37931 27185                       0.1934994    0.24731  27.8%  42.1  277s
 38633 27724    0.23418   28  187    0.19350    0.24726  27.8%  42.1  285s
H38649 27724                       0.1934994    0.24726  27.8%  42.1  285s
H38700 27724                       0.1934994    0.24726  27.8%  42.1  285s
 39882 28622    0.23728   27  222    0.19350    0.24721  27.8%  42.1  293s
H39900 28622                       0.1934994    0.24721  27.8%  42.1  293s
 40832 29322    0.21476   40  143    0.19350    0.24718  27.7%  42.1  300s
H40900 29322                       0.1934994    0.24718  27.7%  42.0  300s
 41818 30016    0.21403   49  156    0.19350    0.24704  27.7%  42.0  309s
H42711 30553                       0.1934994    0.24702  27.7%  41.9  309s
H43077 30732                       0.1934994    0.24700  27.6%  41.9  309s
 43196 31043    0.24401   25  225    0.19350    0.24693  27.6%  41.9  319s
H43205 31045                       0.1934994    0.24693  27.6%  41.9  319s
H43366 31171                       0.1934994    0.24693  27.6%  41.9  319s
 43692 31416    0.24068   30  216    0.19350    0.24693  27.6%  41.9  326s
H44045 31658                       0.1934994    0.24693  27.6%  42.0  326s
 44257 31810    0.22441   39  171    0.19350    0.24690  27.6%  42.0  334s
H44300 31810                       0.1934994    0.24690  27.6%  42.0  334s
 45086 32456    0.19488   50   72    0.19350    0.24681  27.5%  42.0  343s
H45089 32456                       0.1934994    0.24681  27.5%  42.0  343s
H45092 32456                       0.1934994    0.24681  27.5%  42.0  343s
 46000 33125    0.24034   28  227    0.19350    0.24681  27.5%  42.0  349s
H46001 33126                       0.1934994    0.24681  27.5%  42.0  349s
 46264 33299    0.23969   29  219    0.19350    0.24679  27.5%  42.0  356s
H46437 33332                       0.1934994    0.24679  27.5%  42.0  356s
H47185 34003                       0.1934994    0.24670  27.5%  42.0  356s
 47686 34412    0.24100   27  220    0.19350    0.24664  27.5%  42.0  363s
H47728 34431                       0.1934994    0.24664  27.5%  42.0  363s
H48023 34640                       0.1934994    0.24663  27.5%  42.0  364s
H48453 34726                       0.1934994    0.24661  27.4%  42.0  364s
 48769 35171    0.24059   30  228    0.19350    0.24659  27.4%  42.0  372s
H49000 35171                       0.1934994    0.24659  27.4%  42.0  372s
 49925 36007    0.21736   42  174    0.19350    0.24656  27.4%  42.0  380s
H50376 36194                       0.1934994    0.24654  27.4%  42.1  380s
 51733 37293    0.21470   43  133    0.19350    0.24647  27.4%  42.0  387s
H52140 37552                       0.1934994    0.24647  27.4%  42.0  387s
 53128 38338    0.20271   52   95    0.19350    0.24639  27.3%  42.0  393s
H53473 38452                       0.1934994    0.24638  27.3%  42.0  393s
 54651 39461    0.21586   39  168    0.19350    0.24628  27.3%  42.0  399s
H54700 39461                       0.1934994    0.24628  27.3%  42.0  399s
H55250 39898                       0.1934994    0.24627  27.3%  42.0  399s
 55251 39905    0.21511   43  155    0.19350    0.24626  27.3%  42.0  408s
 56551 40860    0.21663   46  169    0.19350    0.24622  27.2%  42.0  415s
H57058 41202                       0.1934994    0.24620  27.2%  42.0  415s
 57588 41556    0.23046   39  212    0.19350    0.24616  27.2%  41.9  423s
H58452 42190                       0.1934994    0.24612  27.2%  41.9  423s
 58544 42248    0.24487   28  232    0.19350    0.24611  27.2%  41.9  433s
H58857 42295                       0.1934994    0.24611  27.2%  41.9  433s
H59716 42947                       0.1934994    0.24609  27.2%  41.9  433s
 59874 43239    0.23038   37  194    0.19350    0.24606  27.2%  41.9  441s
H60100 43239                       0.1934994    0.24606  27.2%  41.9  441s
H60396 43640                       0.1934994    0.24605  27.2%  41.9  441s
 60944 44035    0.23347   36  188    0.19350    0.24602  27.1%  41.9  448s
H61214 44212                       0.1934994    0.24601  27.1%  41.9  448s
 62176 45020    0.20314   55  101    0.19350    0.24598  27.1%  41.9  457s
H62300 45020                       0.1934994    0.24598  27.1%  41.9  457s
H62800 45413                       0.1934994    0.24597  27.1%  42.0  457s
 63244 45807    0.21166   43  162    0.19350    0.24595  27.1%  41.9  464s
H63828 46213                       0.1934994    0.24593  27.1%  41.9  464s
 64200 46561    0.22992   36  190    0.19350    0.24593  27.1%  42.0  473s
H64201 46562                       0.1934994    0.24593  27.1%  42.0  473s
H64203 46562                       0.1934994    0.24593  27.1%  42.0  473s
H64333 46661                       0.1934994    0.24593  27.1%  41.9  473s
 64472 46735    0.22856   37  179    0.19350    0.24592  27.1%  41.9  482s
H64700 46735                       0.1934994    0.24592  27.1%  41.9  482s
 66450 48207    0.21328   38  133    0.19350    0.24588  27.1%  41.9  491s
H67186 48529                       0.1934994    0.24588  27.1%  41.9  491s
 67389 48847    0.23808   28  213    0.19350    0.24588  27.1%  41.9  500s
H67400 48847                       0.1934994    0.24588  27.1%  41.9  500s
 68033 49263    0.21260   40  167    0.19350    0.24585  27.1%  41.8  507s
 69967 50651    0.22305   35  173    0.19350    0.24574  27.0%  41.8  516s
 71061 51443    0.22898   32  178    0.19350    0.24570  27.0%  41.7  526s
 72081 52178    0.23948   30  211    0.19350    0.24564  26.9%  41.7  534s
H72383 52398                       0.1934994    0.24563  26.9%  41.7  534s
 73463 53181    0.21394   39  137    0.19350    0.24562  26.9%  41.7  542s
H73500 53181                       0.1934994    0.24562  26.9%  41.7  542s
 74560 53968    0.23918   26  212    0.19350    0.24558  26.9%  41.7  551s
H74841 54081                       0.1934994    0.24557  26.9%  41.7  551s
 75834 54879    0.24014   29  214    0.19350    0.24553  26.9%  41.7  558s
H76264 55003                       0.1934994    0.24553  26.9%  41.7  558s
H77249 55876                       0.1934994    0.24552  26.9%  41.6  558s
 77250 55969    0.22201   46  184    0.19350    0.24549  26.9%  41.6  566s
H77356 56016                       0.1934994    0.24549  26.9%  41.6  566s
 78567 56851    0.21166   49  146    0.19350    0.24547  26.9%  41.6  574s
H79136 57246                       0.1934994    0.24547  26.9%  41.6  574s
H79270 57273                       0.1934994    0.24547  26.9%  41.6  574s
 79739 57686    0.23997   29  226    0.19350    0.24546  26.9%  41.6  583s
H80681 58368                       0.1934994    0.24536  26.8%  41.6  583s
 80758 58464    0.23068   42  185    0.19350    0.24534  26.8%  41.6  590s
H80900 58464                       0.1934994    0.24534  26.8%  41.6  590s
H81558 59013                       0.1934994    0.24533  26.8%  41.6  590s
 81702 59113    0.21153   41  151    0.19350    0.24532  26.8%  41.6  599s
H82466 59619                       0.1934994    0.24530  26.8%  41.5  599s
 82973 60063    0.23094   33  192    0.19350    0.24528  26.8%  41.6  600s

Cutting planes:
  Gomory: 3
  Clique: 60
  MIR: 131
  StrongCG: 182
  Flow cover: 590
  Zero half: 21

Explored 83354 nodes (3467489 simplex iterations) in 600.02 seconds
Thread count was 8 (of 8 available processors)

Solution count 10: 0.193499 0.193499 0.193499 ... 0.193499

Time limit reached
Best objective 1.934994111288e-01, best bound 2.452566943159e-01, gap 26.7480%

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']});