Exemple #1
0
def run_for_n_resources(resources):
    """
    Runs experiments for a number of resources.

    Parameters
    ----------
    resources : int
        Number of resources
    """
    print(f'- Running experiment for {resources} resources.')
    # Initializes the cost matrix with zeros
    cost = np.zeros(shape=(resources, max_tasks+1))
    # Fills the cost matrix with costs based on a quadratic function
    base_seed = rng_seed_resources
    for i in range(resources):
        devices.create_quadratic_costs(base_seed, cost, i, max_tasks)
        base_seed += 1

    # Iterates over the number of tasks running all schedulers
    for tasks in range(min_tasks, max_tasks, step_tasks):
        # Prepares the upper and lower limit arrays
        avg_tasks = tasks // resources
        lower_limit = np.full(shape=resources, fill_value=4)
        upper_limit = np.full(shape=resources, fill_value=avg_tasks*2)
        # Finds the resource with the maximum and minimum costs for 'tasks'
        max_index = np.argmax(cost[:, tasks])
        lower_limit[max_index] = avg_tasks // 4
        min_index = np.argmin(cost[:, tasks])
        upper_limit[min_index] = avg_tasks // 2

        # 2. Run Proportional with three task values to base itself
        a = schedulers.extended_proportional(tasks, resources, cost, 1,
                                             lower_limit, upper_limit)
        check_and_store(f'Proportional-(1)', tasks, resources, a, cost,
                        lower_limit, upper_limit)
        a = schedulers.extended_proportional(tasks, resources, cost, avg_tasks,
                                             lower_limit, upper_limit)
        check_and_store(f'Proportional-(tasks/res)', tasks, resources, a, cost,
                        lower_limit, upper_limit)
        a = schedulers.extended_proportional(tasks, resources, cost, tasks,
                                             lower_limit, upper_limit)
        check_and_store(f'Proportional-(tasks)', tasks, resources, a, cost,
                        lower_limit, upper_limit)

        # 3. Run FedAvg
        a = schedulers.extended_fedavg(tasks, resources,
                                       lower_limit, upper_limit)
        check_and_store('FedAvg', tasks, resources, a, cost,
                        lower_limit, upper_limit)

        # 4. Run Fed-LBAP
        a = schedulers.extended_fed_lbap(tasks, resources, cost,
                                         lower_limit, upper_limit)
        check_and_store('Fed-LBAP', tasks, resources, a, cost,
                        lower_limit, upper_limit)

        # 5. Run OLAR
        a = schedulers.olar(tasks, resources, cost, lower_limit, upper_limit)
        check_and_store('OLAR', tasks, resources, a, cost,
                        lower_limit, upper_limit)
Exemple #2
0
 def test_extended_fed_lbap(self):
     assignment = schedulers.extended_fed_lbap(self.tasks, self.resources,
                                               self.cost, self.lower_limit,
                                               self.upper_limit)
     self.assertEqual(assignment[0], 2)
     self.assertEqual(assignment[1], 1)
     self.assertEqual(assignment[2], 1)
Exemple #3
0
 def test_extended_fed_lbap_u(self):
     upper_limit = np.array([1, 3, 2])
     assignment = schedulers.extended_fed_lbap(self.tasks, self.resources,
                                               self.cost, self.lower_limit,
                                               upper_limit)
     self.assertEqual(assignment[0], 1)
     self.assertEqual(assignment[1], 2)
     self.assertEqual(assignment[2], 1)
Exemple #4
0
 def test_extended_fed_lbap_l(self):
     lower_limit = np.array([0, 0, 3])
     assignment = schedulers.extended_fed_lbap(self.tasks, self.resources,
                                               self.cost, lower_limit,
                                               self.upper_limit)
     self.assertEqual(assignment[0], 0)
     self.assertEqual(assignment[1], 1)
     self.assertEqual(assignment[2], 3)
Exemple #5
0
 def test_extended_fed_lbap_l_u(self):
     # corner case fixed by the verification by the end
     lower_limit = np.array([0, 0, 2])
     upper_limit = np.array([1, 3, 2])
     assignment = schedulers.extended_fed_lbap(self.tasks, self.resources,
                                               self.cost, lower_limit,
                                               upper_limit)
     self.assertEqual(assignment[0], 1)
     self.assertEqual(assignment[1], 1)
     self.assertEqual(assignment[2], 2)
Exemple #6
0
 def test_extended_fed_lbap_final_verification(self):
     tasks = 4
     resources = 3
     lower_limit = np.full(shape=self.resources, fill_value=1)
     upper_limit = np.full(shape=self.resources, fill_value=3)
     cost = np.array([[0.0, 1.0, 2.0, 3.0, 4.0], [0.0, 1.0, 2.0, 3.0, 4.2],
                      [0.0, 1.0, 2.0, 3.0, 4.5]])
     assignment = schedulers.extended_fed_lbap(tasks, resources, cost,
                                               lower_limit, upper_limit)
     self.assertEqual(assignment[0], 1)
     self.assertEqual(assignment[1], 1)
     self.assertEqual(assignment[2], 2)