Skip to content

Deep Reinforcement Learning for Joint Spectrum and Power Allocation in Cellular Networks code

License

Notifications You must be signed in to change notification settings

tanxiangtj/Spectrum-Power-Allocation

 
 

Repository files navigation

Deep Reinforcement Learning for Joint Spectrum and Power Allocation in Cellular Networks

Authors: Yasar Sinan Nasir and Dongning Guo

Please email me for any questions or comments: snasir [at] u.northwestern [dot] edu

Note: Instructions are for Linux. Please create a virtual environment and install the specified tensorflow and numpy versions:

python3.6 -m pip install --user virtualenv
virtualenv -p python3.6 venv
source $HOME/venv/bin/activate
pip install -r requirements.txt

DEMO:

The repository comes with data to reproduce immediate results, run:

Reproduce Fig. 3.a:
  • python3 -i ./train_results.py --json-file "train_K5_N20_M2_shadow10_episode4-5000_travelIND_fd10"
    * Expected Output: Deployment: train_K5_N20_M2_shadow10_episode4-5000_travelIND_fd10; policy: ddpg200_100_50; K: 20; N: 5
    Averages for last 200 episodes:
    Sum rate per link - proposed: 2.54
    Sum rate per link - joint learning: 2.47
    Sum rate per link - FP: 2.42
    Sum rate per link - FP Multi delayed: 2.22
    Sum rate per link - random: 0.82
    Sum rate per link - full: 0.82
    Average FP iterations per run: 106.99

Reproduce Fig. 3.b:
  • python3 -i ./train_results.py --json-file "train_K5_N20_M4_shadow10_episode4-5000_travelIND_fd10"
    * Expected Output: Deployment: train_K5_N20_M4_shadow10_episode4-5000_travelIND_fd10; policy: ddpg200_100_50; K: 20; N: 5
    Averages for last 200 episodes:
    Sum rate per link - proposed: 4.14
    Sum rate per link - joint learning: 3.96
    Sum rate per link - FP: 3.76
    Sum rate per link - FP Multi delayed: 3.53
    Sum rate per link - random: 1.85
    Sum rate per link - full: 1.85
    Average FP iterations per run: 127.75

Reproducing Table I Row 3: (Trained policy parameters are included as well for further testing)

The repository contains the pre-trained policy parameters in ./simulations/sumrate/policy, so there is no need to run training to reproduce the results. For each row of Table I, you can execute:

  • python3 ./test_results.py --json-file "test_K5_N20_M4_shadow10_episode10-500_travel0_fd10" --json-file-train "train_K5_N20_M4_shadow10_episode4-5000_travelIND_fd10" --json-file-PA-train "ddpg200_100_50" --json-file-CS-train "dqn100_50_50"

  • python3 ./test_results.py --json-file "test_K5_N20_M4_shadow10_episode10-500_travel0_fd10" --json-file-train "train_K5_N20_M4_shadow10_episode4-5000_travelIND_fd10" --json-file-PA-train "dqn200_200_100" --json-file-CS-train "dqn200_200_100"
    Expected Output: Test: test_K5_N20_M4_shadow10_episode10-500_travel0_fd10; train train_K5_N20_M4_shadow10_episode4-5000_travelIND_fd10; policy: ddpg200_100_50
    Sum rate per link for policy after 4 episodes: 4.57, percentage: 1.20
    Sum rate per link - FP: 3.81, percentage: 1.00
    Sum rate per link - FP w delay: 3.57, percentage: 0.94
    Sum rate per link - random: 2.12, percentage: 0.56
    Sum rate per link - full: 2.12, percentage: 0.56
    Average FP iterations per run: 122.15
    Test: test_K5_N20_M4_shadow10_episode10-500_travel0_fd10; train train_K5_N20_M4_shadow10_episode4-5000_travelIND_fd10; policy: dqn200_200_100
    Sum rate per link for policy after 4 episodes: 4.38, percentage: 1.15
    Sum rate per link - FP: 3.81, percentage: 1.00
    Sum rate per link - FP w delay: 3.57, percentage: 0.94
    Sum rate per link - random: 2.12, percentage: 0.56
    Sum rate per link - full: 2.12, percentage: 0.56
    Average FP iterations per run: 122.1

Reproducing Table I Row 7: (Trained policy parameters are included as well for further testing)

The repository contains the pre-trained policy parameters in ./simulations/sumrate/policy, so there is no need to run training to reproduce the results. For each row of Table I, you can execute:

  • python3 ./test_results.py --json-file "test_K10_N50_M5_shadow10_episode10-500_travel0_fd10" --json-file-train "train_K10_N50_M5_shadow10_episode4-5000_travelIND_fd10" --json-file-PA-train "ddpg200_100_50" --json-file-CS-train "dqn100_50_50"

  • python3 ./test_results.py --json-file "test_K10_N50_M5_shadow10_episode10-500_travel0_fd10" --json-file-train "train_K10_N50_M5_shadow10_episode4-5000_travelIND_fd10" --json-file-PA-train "dqn200_200_100" --json-file-CS-train "dqn200_200_100"
    Expected Output: Test: test_K10_N50_M5_shadow10_episode10-500_travel0_fd10; train train_K10_N50_M5_shadow10_episode4-5000_travelIND_fd10; policy: ddpg200_100_50
    Sum rate per link for policy after 4 episodes: 3.79, percentage: 1.19
    Sum rate per link - FP: 3.18, percentage: 1.00
    Sum rate per link - FP w delay: 2.94, percentage: 0.92
    Sum rate per link - random: 1.64, percentage: 0.52
    Sum rate per link - full: 1.64, percentage: 0.52
    Average FP iterations per run: 206.38
    Test: test_K10_N50_M5_shadow10_episode10-500_travel0_fd10; train train_K10_N50_M5_shadow10_episode4-5000_travelIND_fd10; policy: dqn200_200_100
    Sum rate per link for policy after 4 episodes: 3.76, percentage: 1.18
    Sum rate per link - FP: 3.18, percentage: 1.00
    Sum rate per link - FP w delay: 2.94, percentage: 0.92
    Sum rate per link - random: 1.64, percentage: 0.52
    Sum rate per link - full: 1.64, percentage: 0.52
    Average FP iterations per run: 206.38

To train a policy from scratch:

We prepared a bash script file that runs all the python files required to run all simulations from scratch:

./scripts/train.sh

Table I:

It takes several hours to complete the above script, so you can just run test scenarios by using the provided pretrained parameters.

./scripts/testK5N20M1.sh
./scripts/testK5N20M2.sh
./scripts/testK5N20M4.sh
./scripts/testK10N50M1.sh
./scripts/testK10N50M2.sh
./scripts/testK10N50M4.sh
./scripts/testK10N50M5.sh
./scripts/testK10N50M10.sh

Configuration files:

  1. Proposed learning DQN hyper-parameters are in ./config/policy/dqn100_50_50.json.
    Proposed learning DDPG hyper-parameters are in ./config/policy/ddpg200_100_50.json.
    Joint learning DQN hyper-parameters are in ./config/policy/dqn200_200_100.json.

    Note: If you set cuda to True, running python files in parallel as done in the scripts will not work.

    Note: neightresh is unused in the current version.

    Note: Scaling parameters are used to scale the channel gains in dB before feeding them into neural networks.

    Note: We provide a DQN implementation for reference. Its config file has num_actions option in addition to the ones listed above.

  2. Deployment scenarios are in ./config/deployment/. There are two types of configuration files: train and test. Please examine both before using.

About

Deep Reinforcement Learning for Joint Spectrum and Power Allocation in Cellular Networks code

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 93.0%
  • Shell 7.0%