README file for the RateRegionCalculation package; Oct 30, 2015
The main purpose of this package is to generate several types of bounds on rate
regions of multi-source multi-sink hyperedge networks. Extra features include:
I) the generation of matroid bounds on entropic vector region; II) the comparison
between bounds on rate regions;
a) Contents
b) System Requirements
c) Installation
d) Usage
e) Verify results in [1]
f) Version history
g) Contact
h) Copyright
i) Reference
=================================================================================
a) CONTENTS:
1. folder “src”: MATLAB source files, installed lrs package, optional packages such
as chmlib, cdd, etc;
2. folder “table”: network instances with various numbers of sources and hyperedges;
3. folder “bounds”: various bounds on entropic vector region, including the Shannon
outer bound, binary (ternary) matroid inner bounds;
4. folder “results”: to store rate region results for different network instances, the calculated results in [1] can be obtained via the link: https://goo.gl/lyZfD9
5. folder “temp”: files and results generated when an arbitrary network configuration
matrix is input.
6. README.txt: this file
==================================================================================
b) SYSTEM REQUIREMENTS:
Mac OS, or Linux, as lrs and chmlib packages require.
SPACE: 1.65 GB available free space for the package without results files.
==================================================================================
c) INSTALLATION:
After downloading and unzipping this package in a proper directory, you only need to
I. open your MATLAB program
II. go to the directory of this package
III. go to ./src/
You are ready to use this package. Test the package using Example 4 in [1]:
simSingleGeneralNetworksWdirectAccess([1 1 1 0 0 0;1 0 1 1 0 0;0 0 1 1 1 0],[0 0;0 0;0 0;0 0;0 24;40 48; 0 0],'V','V','BI');
The results are saved in ../temp/
You may change the last three parameters to ‘H’, ‘F’, ‘O' for calculating its Shannon outer bound (actually it is the exact rate region.)
If the computer complaints about lrs package, then
read the file lrs_README.txt to reinstall the lrs package. Usually you just need to
cd to the directory ./src/ and type make all, or make all64 (for 64-bit machine).
NOTE: You are recommended to install the chmlib for faster polyhedral projection. Details
on chmlib can be found here: http://www.ece.drexel.edu/walsh/aspitrg/software.html. The
chmlib package with some required packages are in ./src/. READ the ./src/chmlib/README.txt
for installation of chmlib. After installing chmlib, make sure the path and name of the
executable binary file matches within the function ./src/projCHM.m. Change it accordingly,
if not match.
However, this package can still work without chmlib by using Fourier-Motzkin projection
method instead. For small networks, FM works fine. For larger networks, say number of
variables greater than 7, we recommend you to install chmlib, if the Shannon outer bound
on rate regions are desired.
==========================================================================================
d) USAGE:
0. In order to verify or regenerate results for all networks in [1], you may need to integrate this package with our GAP package on network enumeration and hierarchy, which is available at: https://goo.gl/syKfUk
1. Generate various bounds on rate region of a network instance
which are all saved in ../temp/:
simSingleGeneralNetworksWdirectAccess(top,dec,sim,Projmethod,IO);
where
% top: a coding matrix for the topology of the network. The i-th row indicate i-th hyperedge has access to which sources and hyperedges. Details are referred to Appendix B in [2]
% dec: a coding matrix for the decoding constraints of the network. The i-th row contains configurations for the sources associated with binary indicator of i,
the hyperedges and sources that a decoder has access to is coded using the
associated integer value from {1,2,…,2^{|\mathcal{E}|}-1}. Details are referred to Appendix B in [2].
% sim: simulation method, ‘H’ for pure hyperplane (inequality)-representations, which are typically the outer bound. ‘V’ for vertex-representation methods, which are typically the inner bound.
% Projmethod: projection method. If ‘H’ method is used, this can be ‘F’ for Fourier-Motzkin projection, or ‘C’ for Convex-Hull Method. If ‘V’ method is used, this projection method can be simply ‘V’.
% IO: inner or outer bound to use: ‘O’ for Shannon outer bound, ’BI' means binary inner, ‘TI’ means ternary inner. For more bounds, please read the comments or matlab source file.
2. Generate vector inner bounds on rate region of a network instance which will be saved in ../temp/
simSingleGeneralNetworksVec_WdirectAccess(top,dec,N,IO,permmethod)
where
% top: a coding matrix for the topology of the network. The i-th row indicate i-th hyperedge has access to which sources and hyperedges. Details are referred to Appendix B in [2]
% dec: a coding matrix for the decoding constraints of the network. The i-th row contains configurations for the sources associated with binary indicator of i,
the hyperedges and sources that a decoder has access to is coded using the
associated integer value from {1,2,…,2^{|\mathcal{E}|}-1}. Details are referred to Appendix B in [2].
% N: number of bits to project from, for example, if N=7, the number of variables in the network is 6, then, we will use vector inner bound projected from 7 binary or ternary bits, which will be determined by IO input.
% IO: inner bound to use: ’BI' means binary inner, ‘TI’ means ternary inner.
% permmethod: permutation method. ’N’ for normal permutation, ‘C’ for constrained permutation. For networks with variables greater than 8, ‘C’ is recommended.
ex: simSingleGeneralNetworksVec_WdirectAccess(top,dec,7,’BI’,’N’) with top=[1 1 1 0 0 0;1 0 1 1 0 0;0 0 1 1 1 0]; dec=[0 0;0 0;0 0;0 0;0 24;40 48; 0 0]; will use binary vector inner bound projected from 7 bits to get the associated vector inner bound on the rate region of Example 4 in [1].
3. Regenerate results for a specific (K,E) pair, where K= # of sources, E= # of hyperedges.
For Shannon outer bound, scalar binary/ternary inner bounds, use the following command:
simGeneralNetworksWdirectAccess(nSrc,nEnc,sim,Projmethod,IO,casenum,topfilename,decfilename)
For Vector inner bounds (binary/ternary), use the following command:
simNetworksVecNew_WdirectAccess(nSrc,nEnc,N,casenum,IO,permmethod,topfilename,decfilename)
The input are similar as 1,2 but you need to specify topfilename and decfilename with correct paths, if you don’t have associated network instances saved in ../table/. Use our network enumeration package to obtain the text files for top file and dec file first and copy them into ../table/.
*********** Some other functions for interested users are listed *******************************
4. Generate Shannon outer bound on region of entropic vectors
[b A]=genShannOuter(numVar,ifsave,format);
where
% numVar: number of variables
% ifsave: 1 to save results to ./bounds/Shannon/, 0 otherwise
% format: std for standard format which is Ax<=b; lrs for b+Ax>=0
5. Generate matroid bounds:
Binary Extreme-ray representation:
[b,A]=genBinMatrInnerBoundext(numVar); % numVar <= 8, and numVar is the number of variables
Binary Half-space representation:
[b A] = genBinMatrInnerBoundSM(N); % N: number of variables
Binary vector bounds in extreme-ray rep.:
[output b]=genVecBinfromNonisoNew(numBits,numVar,upto);
where
% numBits: number of elements to project from;
% numVar: number of variables to project down to;
% upto: the max rank you want to have, if empty, upto=numBits;
Ternary Extreme-ray representation:
[b,A]=genTerMatrInnerBoundext(numVar); % numVar <= 8, and numVar is the number of variables
Ternary Half-space representation:
[b A] = genTerMatrInnerBoundSM(N); % N: number of variables
Ternary vector bounds in extreme-ray rep.:
[output b]=genVecTerfromNonisoNew(numBits,numVar,upto);
where
% numBits: number of elements to project from;
% numVar: number of variables to project down to;
% unto: the max rank you want to have, if empty, upto=numBits;
6. Test Matroid minors:
[Rank ind] = MinorCheck(varargin);
where
% The first input should be the rank vector(s) to check, if multiple vectors are
input as a matrix, each row is a rank vector
% The second and rest input are minors to test, it should be the rank vector of
the minor except U24, U25 and U35, i.e., ‘U24’, ‘U25’, and ‘U35’ are
recognizable minors;
% Rank: the rank vector(s) after excluding minors in the list;
% ind: indicator vector associated with each input minor: i-th position is 1 means
input ranks contain i-th minor and 0 otherwise.
7. Test if a matroid rank is connected:
[is separator] = isConnected(rank);
% rank vector is input, is=1 if it is connected, 0 otherwise. If is=0, the
separator will be given.
************* SOME extra features which require the user know more about the input ********************
8. Compare bounds for network instances
NM = comp_bounds_GeneralWdirectAccess(nSrc,nEnc,casenum,bound1,bound2)
where
% nSrc: number of sources, nEnc: number of hyperedges
% casenum: indices from the enumeration of network instances in our network enumeration package,
% bound1 and bound2, the two bounds you want to compare: BIV for binary
% inner bound obtained from V-method applying double description, same as
% TIV, O for outer bound, SP for superposition, from6BIRateRegion for vector
% inner bounds from 6 variables, etc.
% NM: indices that the input two bounds do NOT match
=======================================================================================
e) REGENERATE or VERIFY RESULTS in paper [1]:
A. Rate Regions verification: For every network instance you want
to verify, you may figure out its configuration matrix first and use the commands
in 1,2 above to generate the rate region; For regeneration, use 3.
B. Compare bounds on rate regions:
Use 8 above to verify the number of non-matched instances for different network problems.
NOTE: when check vector bounds from N’, the casenum should be the instances for which
vector bound from N’-1 are not tight. e.g. verify vector binary bound from 9 bits for
(2,4) network, you need to load NMBIO24from8.mat, since if vector bound from 8 bits is
tight, off course the bound from 9 bits will be tight as well.
C. Regenerate network instances and hierarchy:
Use our NetEnum&Hierarchy package [3] to do this.
=======================================================================================
f) VERSION HISTORY:
v1.0 Oct 30, 2015
=======================================================================================
g) CONTACT:
For questions or comments, please contact Congduan Li via email congduan.li@gmail.com
We also try to implement a user-friendly interface for the network rate region calculations,
if you are interested, please contact me.
=======================================================================================
h) COPYRIGHT:
Same as the integrated packages, all codes written by the author are free for learning purposes.
=======================================================================================
i) REFERENCES:
[1] Congduan Li, Steven Weber, John MacLaren Walsh, “On Multi-source Networks: Enumeration,
Rate Region Calculation, & Hierarchy”, IEEE Transactions on Information Theory,
2015, SUBMITTED. [Online] Available: http://arxiv.org/abs/1507.05728
[2] Congduan Li, “On Multi-source Multi-sink Networks: Enumeration,
Rate Region Calculation, & Hierarchy”, Ph.D. dissertation, Drexel University, 2015. Available: https://goo.gl/6iIs6G
[3] Congduan Li, John MacLaren Walsh, “Network Enumeration and Hierarchy package”, available: https://goo.gl/syKfUk