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)
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)
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)
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)
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)
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)