hots.placement

Provide placement heuristics and all placement-related methods (check capacity, change assignment …).

hots.placement.allocation_distant_pairwise(instance, cluster_var_matrix, labels_, nb_nodes=None, lb=0.0)[source]

First placement heuristic implemented.

Idea : take two most distant clusters (from their mean profile), and assign by pair (one container from each cluster) on the first available node, and so on. Take the following node if current one has not enough resources. Return a list of containers forced to be grouped together.

Parameters:
  • instance (Instance) – _description_

  • cluster_var_matrix (np.array) – _description_

  • labels (List) – _description_

  • nb_nodes (int, optional) – _description_, defaults to None

  • lb (float, optional) – _description_, defaults to 0.0

hots.placement.allocation_ffd(instance, cluster_vars, cluster_var_matrix, labels_, bound_new_node=50)[source]

Second placement heuristic.

Idea (based on “first-fit decreasing” bin-packing heuristic) : order clusters by decreasing variance, place all containers belonging to the clusters in this order. For each container, try to place it on a node decreasing the node’s variance. If not possible, place it on the node whose variance increases the least.

Parameters:
  • instance (Instance) – _description_

  • cluster_vars (np.array) – _description_

  • cluster_var_matrix (np.array) – _description_

  • labels (List) – _description_

  • bound_new_node (float, optional) – _description_, defaults to 50

hots.placement.allocation_spread(instance, min_nodes=None)[source]

Spread technique for placement.

Parameters:
  • instance (Instance) – _description_

  • min_nodes (int, optional) – _description_, defaults to None

hots.placement.assign_container_node(node_id, container_id, instance, remove=True)[source]

Assign container_id to node_id, and remove it from old node.

Parameters:
  • node_id (str) – _description_

  • container_id (str) – _description_

  • instance (Instance) – _description_

  • remove (bool, optional) – _description_, defaults to True

hots.placement.assign_indiv_available_host(instance, indiv_id, tmin, tmax, nb_open_nodes)[source]

Assign the individual to first available host.

Parameters:
  • instance (Instance) – _description_

  • indiv_id (str) – _description_

  • tmin (int) – _description_

  • tmax (int) – _description_

  • nb_open_nodes (int) – _description_

Raises:

RuntimeError – _description_

hots.placement.assign_indiv_initial_placement(instance, indiv_id, tmin, tmax, conso_nodes, min_nodes, n=0)[source]

Assign indiv in node during first heuristic.

Parameters:
  • instance (Instance) – _description_

  • indiv_id (str) – _description_

  • tmin (int) – _description_

  • tmax (int) – _description_

  • conso_nodes (List) – _description_

  • min_nodes (int) – _description_

  • n (int, optional) – _description_, defaults to 0

Returns:

_description_

Return type:

bool

hots.placement.build_placement_adj_matrix(df_indiv, dict_id_c)[source]

Build the adjacency matrix of placement.

Parameters:
  • df_indiv (pd.DataFrame) – _description_

  • dict_id_c (Dict) – _description_

Returns:

_description_

Return type:

np.array

hots.placement.colocalize_clusters(list_containers_i, list_containers_j, containers_grouped, instance, total_time, min_nodes, conso_nodes, n=0)[source]

Allocate containers of 2 clusters grouping by pairs.

Parameters:
  • list_containers_i (List) – _description_

  • list_containers_j (List) – _description_

  • containers_grouped (List) – _description_

  • instance (Instance) – _description_

  • total_time (int) – _description_

  • min_nodes (int) – _description_

  • conso_nodes (List) – _description_

  • n (int, optional) – _description_, defaults to 0

Raises:
  • RuntimeError – _description_

  • RuntimeError – _description_

Returns:

_description_

Return type:

int

hots.placement.find_substitution(instance, indiv_id, tmin, tmax)[source]

Find a node in which we can place indiv_id by moving another indiv.

Parameters:
  • instance (Instance) – _description_

  • indiv_id (str) – _description_

  • tmin (int) – _description_

  • tmax (int) – _description_

Raises:

RuntimeError – _description_

hots.placement.free_full_nodes(instance, full_nodes, tick)[source]

Change the solution in order to satisfy node capacities.

Parameters:
  • instance (Instance) – _description_

  • full_nodes (List) – _description_

  • tick (int) – _description_

hots.placement.move_container(mvg_cont, instance, tmin, tmax, old_id)[source]

Move mvg_cont to another node.

Parameters:
  • mvg_cont (int) – _description_

  • instance (Instance) – _description_

  • tmin (int) – _description_

  • tmax (int) – _description_

  • old_id (str) – _description_

hots.placement.move_list_containers(mvg_conts, instance, tmin, tmax, order='max')[source]

Move the list of containers to move.

Parameters:
  • mvg_conts (List) – _description_

  • instance (Instance) – _description_

  • tmin (int) – _description_

  • tmax (int) – _description_

  • order (str, optional) – _description_, defaults to ‘max’

hots.placement.nb_min_nodes(instance, total_time)[source]

Compute the minimum number of nodes needed to support the load.

Parameters:
  • instance (Instance) – _description_

  • total_time (int) – _description_

Returns:

_description_

Return type:

float

hots.placement.place_opposite_clusters(instance, cluster_vars, cluster_var_matrix, labels_, min_nodes, conso_nodes)[source]

Initialize allocation heuristic by co-localizing distant clusters.

Parameters:
  • instance (Instance) – _description_

  • cluster_vars (np.array) – _description_

  • cluster_var_matrix (np.array) – _description_

  • labels (List) – _description_

  • min_nodes (int) – _description_

  • conso_nodes (np.array) – _description_

Returns:

_description_

Return type:

Tuple[np.array, np.array]

hots.placement.remove_container_node(node_id, container_id, instance)[source]

Remove container from node.

Parameters:
  • node_id (str) – _description_

  • container_id (str) – _description_

  • instance (Instance) – _description_

hots.placement.spread_containers(list_containers, instance, conso_nodes, total_time, min_nodes)[source]

Spread containers from list_containers into nodes.

Parameters:
  • list_containers (List) – _description_

  • instance (Instance) – _description_

  • conso_nodes (np.array) – _description_

  • total_time (int) – _description_

  • min_nodes (int) – _description_