/Fairness-and-Sum-Rate-Maximization-via-Joint-Subcarrier-and-Power-Allocation-in-Uplink-SCMA-Transmis

Code for the joint power and subcarrier allocation algorithm for sum rate and fairness maximization in SCMA uplink transmission (link to the paper https://ieeexplore.ieee.org/document/8836645)

Primary LanguagePythonGNU General Public License v3.0GPL-3.0

Citing

@ARTICLE{Evangelista2019,
author={J. V. C. {Evangelista} and Z. {Sattar} and G. {Kaddoum} and A. {Chaaban}},
journal={IEEE Transactions on Wireless Communications},
title={Fairness and Sum-Rate Maximization via Joint Subcarrier and Power Allocation in Uplink SCMA Transmission},
year={2019},
doi={10.1109/TWC.2019.2939820},
}

Abstract

In this work, we consider a sparse code multiple access uplink system, where J users simultaneously transmit data over K subcarriers, such that J > K, with a constraint on the power transmitted by each user. To jointly optimize the subcarrier assignment and the transmitted power per subcarrier, two new iterative algorithms are proposed, the first one aims to maximize the sum-rate (Max-SR) of the network, while the second aims to maximize the fairness (Max-Min). In both cases, the optimization problem is of the mixed-integer nonlinear programming (MINLP) type, with non-convex objective functions, which are generally not tractable. We prove that both joint allocation problems are NP-hard. To address these issues, we employ a variant of the block successive upper-bound minimization (BSUM) 1 framework, obtaining polynomial-time approximation algorithms to the original problem. Moreover, we evaluate the algorithms’ robustness against outdated channel state information (CSI), present an analysis of the convergence of the algorithms, and a comparison of the sum-rate and Jain’s fairness index of the novel algorithms with three other algorithms proposed in the literature. The Max-SR algorithm outperforms the others in the sum-rate sense, while the Max-Min outperforms them in the fairness sense.

Link to paper

Acknowledgement

This work was also supported by the Tier 2 Canada Research Chair on the Next Generations of Wireless IoT Networks

My Ph.D. is funded by the Mitacs Globalink Graduate Fellowship and the FRQNT B2X Doctoral Fellowship.

Usage

Installing Dependencies

pip

pip install -r requirements.txt

Anaconda

Coming soon...

Running

The simulation can be run with the script run.py with the options:

usage: python3 run.py [-h] [-K NUM_SC] [-J NUM_USERS] [-Pm PMAX [PMAX ...]]
                      [-N NUM_SC_PER_USER] [-df NUM_USERS_PER_SC]
                      [-Np NUM_PROCS] [-bw BANDWIDTH] [-N0 NOISE_POWER]
                      [-r RADIUS] [-a ALPHA] [-dpath DATA_PATH]
                      [-algo {maxmin,maxsr}] [-niter NUM_ITER]
                      [-p PRINT_EVERY] [-s {ECOS,SCS,MOSEK}]
                      [-uf UPDATE_FREQ [UPDATE_FREQ ...]] [-t DELTA_T]
                      [-dop DOPPLER_FREQ] [-prob {outdated,perf}]

optional arguments:
  -h, --help            show this help message and exit
  -K NUM_SC, --num-sc NUM_SC
                        Number of subcarriers available
  -J NUM_USERS, --num-users NUM_USERS
                        Number of SCMA layers
  -Pm PMAX [PMAX ...], --Pmax PMAX [PMAX ...]
                        Array with power allocation budget in dBm
  -N NUM_SC_PER_USER, --num-sc-per-user NUM_SC_PER_USER
                        Maximum number of SCMA layers allocated per user
  -df NUM_USERS_PER_SC, --num-users-per-sc NUM_USERS_PER_SC
                        Maximum number of users allocated per SCMA layers
  -Np NUM_PROCS, --num-procs NUM_PROCS
                        Number of process to run simulation on
  -bw BANDWIDTH, --bandwidth BANDWIDTH
                        Bandwidth in Hertz
  -N0 NOISE_POWER, --noise-power NOISE_POWER
                        Noise power in dB/Hz
  -r RADIUS, --radius RADIUS
                        Wireless cell radius
  -a ALPHA, --alpha ALPHA
                        Path loss exponent
  -dpath DATA_PATH, --data-path DATA_PATH
                        Path to store simulation data
  -algo {maxmin,maxsr}, --algorithm {maxmin,maxsr}
                        Optimization algorithm to choose: maxmin (Fair
                        allocation) or maxsr (Maximize sum-rate)
  -niter NUM_ITER, --num-iter NUM_ITER
                        Number of samples for Monte Carlo simulation
  -p PRINT_EVERY, --print-every PRINT_EVERY
                        Print update after every iterations
  -s {ECOS,SCS,MOSEK}, --solver {ECOS,SCS,MOSEK}
                        Choice of conic solver supporting exponential cones
  -uf UPDATE_FREQ [UPDATE_FREQ ...], --update-freq UPDATE_FREQ [UPDATE_FREQ ...]
                        Array with update frequencies per pilot transmission
  -t DELTA_T, --delta_t DELTA_T
                        Time interval between successive transmission blocks
  -dop DOPPLER_FREQ, --doppler-freq DOPPLER_FREQ
                        Maximum Doppler frequence
  -prob {outdated,perf}, --problem {outdated,perf}
                        Run script for either evaluate algorithm performance
                        or the performance under outdated CSI

Solvers

We make use of the cvxpy module that supports the solvers in this link. The script has been tested with ecos, scs and Mosek (starting from version 9 with support for exponential cones).

We achieved the best results in running time and quality of the solutions found using the Mosek solver, however the software requires a license (that can be obtained for free for students). Among the open source solvers ecos had better results.