Commit b2f42397 authored by Jean-Benoist Leger's avatar Jean-Benoist Leger
Browse files

Initial commit

parents
This diff is collapsed.
This directory contains all the necessary code to simulate networks
This is designed for GNU Octave. Most file are in m-code. Some file are C++ code
for GNU Octave, these files must be compiled for GNU Octave whith mkoctfile
provided by Octave. Most of C++ file need to be linked with the igraph library.
Example:
- mkoctfile kmeansBoucle.cc
- mkoctfile -ligraph guimera.cc
How to use:
To generate parameters:
- write_cst_parameters.m
- write_parameters.m
To generate networks:
- generate_networks.m
To compute all clusterings:
- calc.m
- blind.m
- cst_calc.m
- cst_blind.m
Methods compute clustering:
- eb.m
- guimera.cc
- mcl.m
- mod2.m
- sbmP.m
- sc.m
To compute score:
- score.m
Tools:
- ari.m
- cumtime.m
- doallres.m
- ebC.cc
- generate1network.m
- kmeansA.m
- kmeansBoucle.cc
- loghist.m
- modularity.cc
- uniformiserclassif.m
- write_spm.m
% This function is a GNU Octave function to compute Adjsted Rand-index
% from to classification provided as arguments.
% Copyright 2012-2013 INRA, France, Jean-Benoist Leger
% <jbleger@bordeaux.inra.fr>
%
% This software is a computer program whose purpose is to simulated
% ecological bipartite graphs, apply clustering methods on these graphs.
%
% This software is governed by the CeCILL-B license under French law and
% abiding by the rules of distribution of free software. You can use,
% modify and/ or redistribute the software under the terms of the
% CeCILL-B license. The licence can be found in the LICENCE file in the
% root directory.
%
% As a counterpart to the access to the source code and rights to copy,
% modify and redistribute granted by the license, users are provided only
% with a limited warranty and the software's author, the holder of the
% economic rights, and the successive licensors have only limited
% liability.
%
% In this respect, the user's attention is drawn to the risks associated
% with loading, using, modifying and/or developing or reproducing the
% software by the user in light of its specific status of free software,
% that may mean that it is complicated to manipulate, and that also
% therefore means that it is reserved for developers and experienced
% professionals having in-depth computer knowledge. Users are therefore
% encouraged to load and test the software's suitability as regards their
% requirements in conditions enabling the security of their systems and/or
% data to be ensured and, more generally, to use and operate it in the
% same conditions as regards security.
%
% The fact that you are presently reading this means that you have had
% knowledge of the CeCILL-B license and that you accept its terms.
%
function r=ari(c1,c2)
c1=uniformiserclassif(c1);
c2=uniformiserclassif(c2);
N1=max(c1);
N2=max(c1);
n= @(i,j) sum((c1==i).*(c2==j));
a= @(i) sum(c1==i);
b= @(i) sum(c2==i);
c2pn = @(k) k*(k-1)/2;
[I,J]=meshgrid(1:N1,1:N2);
tn=sum(arrayfun(@(i,j) c2pn(n(i,j)),I,J)(:));
ta=sum(arrayfun(@(i) c2pn(a(i)),1:N1));
tb=sum(arrayfun(@(i) c2pn(b(i)),1:N2));
K=c2pn(length(c1));
numerateur = (tn-(ta*tb)/K);
denominateur = (.5*(ta+tb)-(ta*tb)/K);
if numerateur==0 && denominateur==0
r=1;
else
r=numerateur/denominateur;
end
end
% This script run clustering method for a unkonown number of groups
% (blind). The results are merged with previous result.
% Copyright 2012-2013 INRA, France, Jean-Benoist Leger
% <jbleger@bordeaux.inra.fr>
%
% This software is a computer program whose purpose is to simulated
% ecological bipartite graphs, apply clustering methods on these graphs.
%
% This software is governed by the CeCILL-B license under French law and
% abiding by the rules of distribution of free software. You can use,
% modify and/ or redistribute the software under the terms of the
% CeCILL-B license. The licence can be found in the LICENCE file in the
% root directory.
%
% As a counterpart to the access to the source code and rights to copy,
% modify and redistribute granted by the license, users are provided only
% with a limited warranty and the software's author, the holder of the
% economic rights, and the successive licensors have only limited
% liability.
%
% In this respect, the user's attention is drawn to the risks associated
% with loading, using, modifying and/or developing or reproducing the
% software by the user in light of its specific status of free software,
% that may mean that it is complicated to manipulate, and that also
% therefore means that it is reserved for developers and experienced
% professionals having in-depth computer knowledge. Users are therefore
% encouraged to load and test the software's suitability as regards their
% requirements in conditions enabling the security of their systems and/or
% data to be ensured and, more generally, to use and operate it in the
% same conditions as regards security.
%
% The fact that you are presently reading this means that you have had
% knowledge of the CeCILL-B license and that you accept its terms.
%
allres = calc_blind_init(parameters);
% sc
allres{1}.Bw=parcellfun(np,@(n) sc(n.A,0,1,1),networks,'UniformOutput',false);
allres{2}.Bw=parcellfun(np,@(n) sc(n.A,0,2,0),networks,'UniformOutput',false);
allres{1}.Bb=parcellfun(np,@(n) sc(1*(n.A>0),0,1,1),networks,'UniformOutput',false);
allres{2}.Bb=parcellfun(np,@(n) sc(1*(n.A>0),0,2,0),networks,'UniformOutput',false);
% mcl
allres{3}.Bw=parcellfun(np,@(n) mcl(n.A,1,0),networks,'UniformOutput',false);
allres{4}.Bw=parcellfun(np,@(n) mcl(n.A,.1,0),networks,'UniformOutput',false);
allres{3}.Bb=parcellfun(np,@(n) mcl(1*(n.A>0),1,0),networks,'UniformOutput',false);
allres{4}.Bb=parcellfun(np,@(n) mcl(1*(n.A>0),.1,0),networks,'UniformOutput',false);
% eb
allres{5}.Bb=parcellfun(np,@(n) eb(n,1,0),networks,'UniformOutput',false);
allres{5}.Bw=parcellfun(np,@(n) eb(n,0,0),networks,'UniformOutput',false);
% mod
allres{6}.Bw=parcellfun(np,@(n) mod2(n.A,0),networks,'UniformOutput',false);
allres{6}.Bb=parcellfun(np,@(n) mod2(1*(n.A>0),0),networks,'UniformOutput',false);
% sbm
allres{7}.Bw=parcellfun(np,@(n) sbmP(n,0,0),networks,'UniformOutput',false);
allres{7}.Bb=parcellfun(np,@(n) sbmP(n,1,0),networks,'UniformOutput',false);
save -z netdir/blind_results
% This script run clustering method for a unkonown number of groups. The results
% are merged with previous result.
% Copyright 2012-2013 INRA, France, Jean-Benoist Leger
% <jbleger@bordeaux.inra.fr>
%
% This software is a computer program whose purpose is to simulated
% ecological bipartite graphs, apply clustering methods on these graphs.
%
% This software is governed by the CeCILL-B license under French law and
% abiding by the rules of distribution of free software. You can use,
% modify and/ or redistribute the software under the terms of the
% CeCILL-B license. The licence can be found in the LICENCE file in the
% root directory.
%
% As a counterpart to the access to the source code and rights to copy,
% modify and redistribute granted by the license, users are provided only
% with a limited warranty and the software's author, the holder of the
% economic rights, and the successive licensors have only limited
% liability.
%
% In this respect, the user's attention is drawn to the risks associated
% with loading, using, modifying and/or developing or reproducing the
% software by the user in light of its specific status of free software,
% that may mean that it is complicated to manipulate, and that also
% therefore means that it is reserved for developers and experienced
% professionals having in-depth computer knowledge. Users are therefore
% encouraged to load and test the software's suitability as regards their
% requirements in conditions enabling the security of their systems and/or
% data to be ensured and, more generally, to use and operate it in the
% same conditions as regards security.
%
% The fact that you are presently reading this means that you have had
% knowledge of the CeCILL-B license and that you accept its terms.
%
allres = calc_blind_init(parameters);
% sc
allres{1}.Bw=parcellfun(np,@(n) sc(n.A,n.parameters.g,1,1),networks,'UniformOutput',false);
allres{2}.Bw=parcellfun(np,@(n) sc(n.A,2*n.parameters.g,2,0),networks,'UniformOutput',false);
allres{1}.Bb=parcellfun(np,@(n) sc(1*(n.A>0),n.parameters.g,1,1),networks,'UniformOutput',false);
allres{2}.Bb=parcellfun(np,@(n) sc(1*(n.A>0),2*n.parameters.g,2,0),networks,'UniformOutput',false);
% mcl
allres{3}.Bw=parcellfun(np,@(n) mcl(n.A,1,n.parameters.g),networks,'UniformOutput',false);
allres{4}.Bw=parcellfun(np,@(n) mcl(n.A,.1,2*n.parameters.g),networks,'UniformOutput',false);
allres{3}.Bb=parcellfun(np,@(n) mcl(1*(n.A>0),1,n.parameters.g),networks,'UniformOutput',false);
allres{4}.Bb=parcellfun(np,@(n) mcl(1*(n.A>0),.1,2*n.parameters.g),networks,'UniformOutput',false);
% eb
allres{5}.Bb=parcellfun(np,@(n) eb(n,1,n.parameters.g),networks,'UniformOutput',false);
allres{5}.Bw=parcellfun(np,@(n) eb(n,0,n.parameters.g),networks,'UniformOutput',false);
% mod
allres{6}.Bw=parcellfun(np,@(n) mod2(n.A,n.parameters.g),networks,'UniformOutput',false);
allres{6}.Bb=parcellfun(np,@(n) mod2(1*(n.A>0),n.parameters.g),networks,'UniformOutput',false);
% sbm
allres{7}.Bw=parcellfun(np,@(n) sbmP(n,0,2*n.parameters.g),networks,'UniformOutput',false);
allres{7}.Bb=parcellfun(np,@(n) sbmP(n,1,2*n.parameters.g),networks,'UniformOutput',false);
save -z netdir/calc_results allres
% This function provide a initialized structure for storing results for calc and
% blind function.
% Copyright 2012-2013 INRA, France, Jean-Benoist Leger
% <jbleger@bordeaux.inra.fr>
%
% This software is a computer program whose purpose is to simulated
% ecological bipartite graphs, apply clustering methods on these graphs.
%
% This software is governed by the CeCILL-B license under French law and
% abiding by the rules of distribution of free software. You can use,
% modify and/ or redistribute the software under the terms of the
% CeCILL-B license. The licence can be found in the LICENCE file in the
% root directory.
%
% As a counterpart to the access to the source code and rights to copy,
% modify and redistribute granted by the license, users are provided only
% with a limited warranty and the software's author, the holder of the
% economic rights, and the successive licensors have only limited
% liability.
%
% In this respect, the user's attention is drawn to the risks associated
% with loading, using, modifying and/or developing or reproducing the
% software by the user in light of its specific status of free software,
% that may mean that it is complicated to manipulate, and that also
% therefore means that it is reserved for developers and experienced
% professionals having in-depth computer knowledge. Users are therefore
% encouraged to load and test the software's suitability as regards their
% requirements in conditions enabling the security of their systems and/or
% data to be ensured and, more generally, to use and operate it in the
% same conditions as regards security.
%
% The fact that you are presently reading this means that you have had
% knowledge of the CeCILL-B license and that you accept its terms.
%
function allres=calc_blind_init(parameters)
allres=cell(7);
for i=1:7
allres{i}.Bb=cell(size(parameters));
allres{i}.Bw=cell(size(parameters));
allres{i}.fb=cell(size(parameters));
allres{i}.fw=cell(size(parameters));
end
end
% This script apply the guimera-like method for all networks in the central point.
%
% Copyright 2012-2013 INRA, France, Jean-Benoist Leger
% <jbleger@bordeaux.inra.fr>
%
% This software is a computer program whose purpose is to simulated
% ecological bipartite graphs, apply clustering methods on these graphs.
%
% This software is governed by the CeCILL-B license under French law and
% abiding by the rules of distribution of free software. You can use,
% modify and/ or redistribute the software under the terms of the
% CeCILL-B license. The licence can be found in the LICENCE file in the
% root directory.
%
% As a counterpart to the access to the source code and rights to copy,
% modify and redistribute granted by the license, users are provided only
% with a limited warranty and the software's author, the holder of the
% economic rights, and the successive licensors have only limited
% liability.
%
% In this respect, the user's attention is drawn to the risks associated
% with loading, using, modifying and/or developing or reproducing the
% software by the user in light of its specific status of free software,
% that may mean that it is complicated to manipulate, and that also
% therefore means that it is reserved for developers and experienced
% professionals having in-depth computer knowledge. Users are therefore
% encouraged to load and test the software's suitability as regards their
% requirements in conditions enabling the security of their systems and/or
% data to be ensured and, more generally, to use and operate it in the
% same conditions as regards security.
%
% The fact that you are presently reading this means that you have had
% knowledge of the CeCILL-B license and that you accept its terms.
%
load netdir/cst_networks
t=-cumtime();
res_guimera = parcellfun(4,@(n)uniformiserclassif(guimera(n.A,.99995)),cst_networks,'UniformOutput',false);
t+=cumtime()
save -z netdir/res_guimera res_guimera t
% This script launch all clustering methods on graphs of the central point. For
% a unknown number of groups (blind).
% Copyright 2012-2013 INRA, France, Jean-Benoist Leger
% <jbleger@bordeaux.inra.fr>
%
% This software is a computer program whose purpose is to simulated
% ecological bipartite graphs, apply clustering methods on these graphs.
%
% This software is governed by the CeCILL-B license under French law and
% abiding by the rules of distribution of free software. You can use,
% modify and/ or redistribute the software under the terms of the
% CeCILL-B license. The licence can be found in the LICENCE file in the
% root directory.
%
% As a counterpart to the access to the source code and rights to copy,
% modify and redistribute granted by the license, users are provided only
% with a limited warranty and the software's author, the holder of the
% economic rights, and the successive licensors have only limited
% liability.
%
% In this respect, the user's attention is drawn to the risks associated
% with loading, using, modifying and/or developing or reproducing the
% software by the user in light of its specific status of free software,
% that may mean that it is complicated to manipulate, and that also
% therefore means that it is reserved for developers and experienced
% professionals having in-depth computer knowledge. Users are therefore
% encouraged to load and test the software's suitability as regards their
% requirements in conditions enabling the security of their systems and/or
% data to be ensured and, more generally, to use and operate it in the
% same conditions as regards security.
%
% The fact that you are presently reading this means that you have had
% knowledge of the CeCILL-B license and that you accept its terms.
%
allres=cell(7,1);;
% sc
t=cumtime();
allres{1}.cBw=parcellfun(np,@(n) sc(n.A,0,1,1),cst_networks,'UniformOutput',false);
allres{1}.cBwt=cumtime()-t;
t=cumtime();
allres{2}.cBw=parcellfun(np,@(n) sc(n.A,0,2,0),cst_networks,'UniformOutput',false);
allres{2}.cBwt=cumtime()-t;
t=cumtime();
allres{1}.cBb=parcellfun(np,@(n) sc(1*(n.A>0),0,1,1),cst_networks,'UniformOutput',false);
allres{1}.cBbt=cumtime()-t;
t=cumtime();
allres{2}.cBb=parcellfun(np,@(n) sc(1*(n.A>0),0,2,0),cst_networks,'UniformOutput',false);
allres{2}.cBbt=cumtime()-t;
% mcl
t=cumtime();
allres{3}.cBw=parcellfun(np,@(n) mcl(n.A,1,0),cst_networks,'UniformOutput',false);
allres{3}.cBwt=cumtime()-t;
t=cumtime();
allres{4}.cBw=parcellfun(np,@(n) mcl(n.A,.1,0),cst_networks,'UniformOutput',false);
allres{4}.cBwt=cumtime()-t;
t=cumtime();
allres{3}.cBb=parcellfun(np,@(n) mcl(1*(n.A>0),1,0),cst_networks,'UniformOutput',false);
allres{3}.cBbt=cumtime()-t;
t=cumtime();
allres{4}.cBb=parcellfun(np,@(n) mcl(1*(n.A>0),.1,0),cst_networks,'UniformOutput',false);
allres{4}.cBbt=cumtime()-t;
% eb
t=cumtime();
allres{5}.cBb=parcellfun(np,@(n) eb(n,1,0),cst_networks,'UniformOutput',false);
allres{5}.cBbt=cumtime()-t;
t=cumtime();
allres{5}.cBw=parcellfun(np,@(n) eb(n,0,0),cst_networks,'UniformOutput',false);
allres{5}.cBwt=cumtime()-t;
% mod
t=cumtime();
allres{6}.cBw=parcellfun(np,@(n) mod2(n.A,0),cst_networks,'UniformOutput',false);
allres{6}.cBwt=cumtime()-t;
t=cumtime();
allres{6}.cBb=parcellfun(np,@(n) mod2(1*(n.A>0),0),cst_networks,'UniformOutput',false);
allres{6}.cBbt=cumtime()-t;
% sbm
t=cumtime();
allres{7}.cBb=parcellfun(np,@(n) sbmP(n,1,0),cst_networks,'UniformOutput',false);
allres{7}.cBbt=cumtime()-t;
t=cumtime();
allres{7}.cBw=parcellfun(np,@(n) sbmP(n,0,0),cst_networks,'UniformOutput',false);
allres{7}.cBwt=cumtime()-t;
save -z netdir/cst_blind_results
% This script launch all clustering methods on graphs of the central point. For
% a known number of groups.
% Copyright 2012-2013 INRA, France, Jean-Benoist Leger
% <jbleger@bordeaux.inra.fr>
%
% This software is a computer program whose purpose is to simulated
% ecological bipartite graphs, apply clustering methods on these graphs.
%
% This software is governed by the CeCILL-B license under French law and
% abiding by the rules of distribution of free software. You can use,
% modify and/ or redistribute the software under the terms of the
% CeCILL-B license. The licence can be found in the LICENCE file in the
% root directory.
%
% As a counterpart to the access to the source code and rights to copy,
% modify and redistribute granted by the license, users are provided only
% with a limited warranty and the software's author, the holder of the
% economic rights, and the successive licensors have only limited
% liability.
%
% In this respect, the user's attention is drawn to the risks associated
% with loading, using, modifying and/or developing or reproducing the
% software by the user in light of its specific status of free software,
% that may mean that it is complicated to manipulate, and that also
% therefore means that it is reserved for developers and experienced
% professionals having in-depth computer knowledge. Users are therefore
% encouraged to load and test the software's suitability as regards their
% requirements in conditions enabling the security of their systems and/or
% data to be ensured and, more generally, to use and operate it in the
% same conditions as regards security.
%
% The fact that you are presently reading this means that you have had
% knowledge of the CeCILL-B license and that you accept its terms.
%
allres=cell(7,1);
% sc
t=cumtime();
allres{1}.cfw=parcellfun(np,@(n) sc(n.A,n.parameters.g,1,1),cst_networks,'UniformOutput',false);
allres{1}.cfwt=cumtime()-t;
t=cumtime();
allres{2}.cfw=parcellfun(np,@(n) sc(n.A,2*n.parameters.g,2,0),cst_networks,'UniformOutput',false);
allres{2}.cfwt=cumtime()-t;
t=cumtime();
allres{1}.cfb=parcellfun(np,@(n) sc(1*(n.A>0),n.parameters.g,1,1),cst_networks,'UniformOutput',false);
allres{1}.cfbt=cumtime()-t;
t=cumtime();
allres{2}.cfb=parcellfun(np,@(n) sc(1*(n.A>0),2*n.parameters.g,2,0),cst_networks,'UniformOutput',false);
allres{2}.cfbt=cumtime()-t;
% mcl
t=cumtime();
allres{3}.cfw=parcellfun(np,@(n) mcl(n.A,1,n.parameters.g),cst_networks,'UniformOutput',false);
allres{3}.cfwt=cumtime()-t;
t=cumtime();
allres{4}.cfw=parcellfun(np,@(n) mcl(n.A,.1,2*n.parameters.g),cst_networks,'UniformOutput',false);
allres{4}.cfwt=cumtime()-t;
t=cumtime();
allres{3}.cfb=parcellfun(np,@(n) mcl(1*(n.A>0),1,n.parameters.g),cst_networks,'UniformOutput',false);
allres{3}.cfbt=cumtime()-t;
t=cumtime();
allres{4}.cfb=parcellfun(np,@(n) mcl(1*(n.A>0),.1,2*n.parameters.g),cst_networks,'UniformOutput',false);
allres{4}.cfbt=cumtime()-t;
% eb
t=cumtime();
allres{5}.cfb=parcellfun(np,@(n) eb(n,1,n.parameters.g),cst_networks,'UniformOutput',false);
allres{5}.cfbt=cumtime()-t;
t=cumtime();
allres{5}.cfw=parcellfun(np,@(n) eb(n,0,n.parameters.g),cst_networks,'UniformOutput',false);
allres{5}.cfwt=cumtime()-t;
% mod
t=cumtime();
allres{6}.cfw=parcellfun(np,@(n) mod2(n.A,n.parameters.g),cst_networks,'UniformOutput',false);
allres{6}.cfwt=cumtime()-t;
t=cumtime();
allres{6}.cfb=parcellfun(np,@(n) mod2(1*(n.A>0),n.parameters.g),cst_networks,'UniformOutput',false);
allres{6}.cfbt=cumtime()-t;
% sbm
t=cumtime();
allres{7}.cfb=parcellfun(np,@(n) sbmP(n,1,2*n.parameters.g),cst_networks,'UniformOutput',false);
allres{7}.cfbt=cumtime()-t;
t=cumtime();
allres{7}.cfw=parcellfun(np,@(n) sbmP(n,0,2*n.parameters.g),cst_networks,'UniformOutput',false);
allres{7}.cfwt=cumtime()-t;
save -z netdir/cst_calc_results
% This function give the cumulated CPU time of the process and its dead
% children. Usefull to count the time in a machine which run differents tasks in
% the same time. Works only on system which have a /proc mount (Linux).
% Copyright 2012-2013 INRA, France, Jean-Benoist Leger
% <jbleger@bordeaux.inra.fr>
%
% This software is a computer program whose purpose is to simulated
% ecological bipartite graphs, apply clustering methods on these graphs.
%
% This software is governed by the CeCILL-B license under French law and
% abiding by the rules of distribution of free software. You can use,
% modify and/ or redistribute the software under the terms of the
% CeCILL-B license. The licence can be found in the LICENCE file in the
% root directory.
%
% As a counterpart to the access to the source code and rights to copy,
% modify and redistribute granted by the license, users are provided only
% with a limited warranty and the software's author, the holder of the
% economic rights, and the successive licensors have only limited
% liability.
%
% In this respect, the user's attention is drawn to the risks associated
% with loading, using, modifying and/or developing or reproducing the
% software by the user in light of its specific status of free software,
% that may mean that it is complicated to manipulate, and that also
% therefore means that it is reserved for developers and experienced
% professionals having in-depth computer knowledge. Users are therefore
% encouraged to load and test the software's suitability as regards their
% requirements in conditions enabling the security of their systems and/or
% data to be ensured and, more generally, to use and operate it in the
% same conditions as regards security.
%
% The fact that you are presently reading this means that you have had
% knowledge of the CeCILL-B license and that you accept its terms.
%
function ct=cumtime()
[status,output]=system('echo $PPID');
pid=str2num(output);
[status,output]=system('getconf CLK_TCK');
clk_tck=str2num(output);
[status,output]=system(['cat /proc/',num2str(pid),'/stat | cut -d " " -f 14-17']);
ct=(sum(str2num(output)))/clk_tck;
end
% This script merge results from calc/blind/cst_calc/cst_blind scripts.
% Copyright 2012-2013 INRA, France, Jean-Benoist Leger
% <jbleger@bordeaux.inra.fr>
%
% This software is a computer program whose purpose is to simulated
% ecological bipartite graphs, apply clustering methods on these graphs.
%
% This software is governed by the CeCILL-B license under French law and