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
Exemple #4
0
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))