### Code for TMLR submitted paper. 



The structure of the code is the following:

dcg folder contains the core of the classes and methods
- Topology.py 
    (definition of the communication network structure)
- ByzantineAttack.py 
    (how the byzantines attack honest nodes, given some honest parameters and a topoogy)
- RobustCommunication.py   
    (simulates the robust communications)
- Simulation.py 
    (run the whole communication + optimization algorithm.
    can actualy implement optimization algorithm, altough only used 
    in our paper for the communication part.)
- identifiers.py 
    (unique identifiers used through the code)
- Optimization.py 
    (implement optimization task such as - logistic or not - regrestion or plain communication)
- data.py 
    (used if the optimization task is a regression task)

The code is build to run with weight&biases, in order to launch multiple run at the same time.

To run one single experiment, you can choose your configuration using config/unitary_test.yaml and run:

> python main.py

To run multiple experiments using 
> wandb sweep sweep/ACP.yaml

Then run the sweep using the command provided in the terminal. It should look like
> wandb agent your_account/project_name/random_numbers_and_letter

All results are stored in results-data. analysis.ipynb is build such as to analyze the experiments runned after completing one sweep with 
configuration file sweep/ACP.yaml