dimensions = [category_n, 4] # Assign dataset to each agent dataset_portion = len(dataset) / agents_number start_dataset = rank * dataset_portion end_dataset = (rank * dataset_portion) + dataset_portion start_dataset = int(start_dataset) end_dataset = int(end_dataset) personal_dataset = dataset[start_dataset:end_dataset] print("Agent ", rank, " got ", len(personal_dataset), " rows of dataset") world.Barrier() sys.stdout.flush() graph = cm.createAdjM(agents_number, number_of_inn_connection) if rank == 0: plt.figure('Graph') nx.draw(graph, with_labels=True) plt.draw() plt.show() exit() x0 = np.ones(dimensions) XX = np.zeros([MAX_ITERATIONS, *dimensions]) losses = np.zeros(MAX_ITERATIONS) XX[0] = x0 losses[0] = func.loss_softmax(x0, category_n, personal_dataset)
# Assign dataset to each agent dataset_portion = len(dataset) / agents_number start_dataset = rank * dataset_portion end_dataset = (rank * dataset_portion) + dataset_portion start_dataset = int(start_dataset) end_dataset = int(end_dataset) # if (end_dataset >= len(dataset)): # end_dataset = len(dataset) + 1 personal_dataset = dataset[start_dataset:end_dataset] #print(personal_dataset) # TODO il dataset va sistemato per prendere tutti le rows nel caso di num agenti non divisibile per 30 print("agent ", rank, " got ", len(personal_dataset), " rows of dataset") adj = cm.createAdjM(agents_number) x0 = np.ones(dimensions) XX = np.zeros([MAX_ITERATIONS, *dimensions]) losses = np.zeros(MAX_ITERATIONS) XX[0] = x0 num_of_neighbors = 0 for in_neighbors in adj.predecessors(rank): num_of_neighbors = num_of_neighbors + 1 weight = 1 / (num_of_neighbors + 1) # 1 is for self-loop world.Barrier() for tt in range(1, MAX_ITERATIONS - 1):
def load_adj_matrix(): input = cm.createAdjM(world_size) #print(input.todense()) return input
import networkx as nx import matplotlib.pyplot as plt from numpy.random import random import create_matrix as cm import calculate_function as cf """ Define world parameter, these have been got from mpi system """ world = MPI.COMM_WORLD world_size = world.Get_size() rank = world.Get_rank() name = MPI.Get_processor_name() """ Define initial value of our test variable """ max_iterations = 50 d = 2 alpha = 0.001 matrix = cm.createAdjM(world_size) def send_data(data): for destination in matrix.successors(rank): # BLOCCANTE world.send(data, dest=destination) sincronizza() def get_data(): data_recv = [] for receive in matrix.predecessors(rank): data_recv.append(world.recv(source=receive))