Source code for MEDfl.LearningManager.strategy


from collections import OrderedDict
from typing import Dict, List, Optional, Tuple

import flwr as fl
import numpy as np

import optuna




<<<<<<< HEAD
[docs]class Strategy: =======
[docs]class Strategy: >>>>>>> 58b1e52fd8ab5e97505682e684fd63c00521021e """ A class representing a strategy for Federated Learning. Attributes: name (str): The name of the strategy. Default is "FedAvg". fraction_fit (float): Fraction of clients to use for training during each round. Default is 1.0. fraction_evaluate (float): Fraction of clients to use for evaluation during each round. Default is 1.0. min_fit_clients (int): Minimum number of clients to use for training during each round. Default is 2. min_evaluate_clients (int): Minimum number of clients to use for evaluation during each round. Default is 2. min_available_clients (int): Minimum number of available clients required to start a round. Default is 2. initial_parameters (Optional[]): The initial parameters of the server model Methods: """
[docs] def __init__( self, name: str = "FedAvg", fraction_fit: float = 1.0, fraction_evaluate: float = 1.0, min_fit_clients: int = 2, min_evaluate_clients: int = 2, min_available_clients: int = 2, initial_parameters = [], evaluation_methode = "centralized" ) -> None: """ Initialize a Strategy object with the specified parameters. Args: name (str): The name of the strategy. Default is "FedAvg". fraction_fit (float): Fraction of clients to use for training during each round. Default is 1.0. fraction_evaluate (float): Fraction of clients to use for evaluation during each round. Default is 1.0. min_fit_clients (int): Minimum number of clients to use for training during each round. Default is 2. min_evaluate_clients (int): Minimum number of clients to use for evaluation during each round. Default is 2. min_available_clients (int): Minimum number of available clients required to start a round. Default is 2. initial_parameters (Optional[]): The initial parametres of the server model evaluation_methode ( "centralized" | "distributed") """ self.fraction_fit = fraction_fit self.fraction_evaluate = fraction_evaluate self.min_fit_clients = min_fit_clients self.min_evaluate_clients = min_evaluate_clients self.min_available_clients = min_available_clients self.initial_parameters = initial_parameters self.evaluate_fn = None self.name = name
[docs] def optuna_fed_optimization(self, direction:str , hpo_rate:int , params_config): self.study = optuna.create_study(direction=direction) self.hpo_rate = hpo_rate self.params_config = params_config
[docs] def create_strategy(self): self.strategy_object = self.get_strategy_by_name()( fraction_fit=self.fraction_fit, fraction_evaluate=self.fraction_evaluate, min_fit_clients=self.min_fit_clients, min_evaluate_clients=self.min_evaluate_clients, min_available_clients=self.min_available_clients, initial_parameters=fl.common.ndarrays_to_parameters(self.initial_parameters), evaluate_fn=self.evaluate_fn )
[docs] def get_strategy_by_name(self): return eval(f"fl.server.strategy.{self.name}")