in Bin Packing/src/bin_packing_environment.py [0:0]
def __update_bin_type_distribution_map(self, target_bin_util):
if target_bin_util < 0 or target_bin_util + self.item_size > self.bag_capacity:
print("Error: Invalid Bin Utilization/Item Size")
return
elif target_bin_util > 0 and target_bin_util not in self.bin_type_distribution_map:
print("Error: bin_type_distribution_map does not contain " + str(target_bin_util) + " as key!")
return
elif target_bin_util > 0 and target_bin_util in self.bin_type_distribution_map and len(
self.bin_type_distribution_map[target_bin_util]) == 0:
print("Error: bin_type_distribution_map has no element at level " + str(target_bin_util) + " !")
return
elif target_bin_util == 0: # opening a new bin
if self.item_size not in self.bin_type_distribution_map:
self.bin_type_distribution_map[self.item_size] = {str(self.item_size): 1}
elif str(self.item_size) not in self.bin_type_distribution_map[self.item_size]:
self.bin_type_distribution_map[self.item_size][str(self.item_size)] = 1
else:
self.bin_type_distribution_map[self.item_size][str(self.item_size)] += 1
else:
key = np.random.choice(list(self.bin_type_distribution_map[target_bin_util].keys()))
if self.bin_type_distribution_map[target_bin_util][key] <= 0:
print("Error: Invalid bin count!")
return
elif self.bin_type_distribution_map[target_bin_util][key] == 1:
del self.bin_type_distribution_map[target_bin_util][key]
else:
self.bin_type_distribution_map[target_bin_util][key] -= 1
new_key = self.__update_key_for_bin_type_distribution_map(key, self.item_size)
if (target_bin_util + self.item_size) not in self.bin_type_distribution_map:
self.bin_type_distribution_map[target_bin_util + self.item_size] = {new_key: 1}
elif new_key not in self.bin_type_distribution_map[target_bin_util + self.item_size]:
self.bin_type_distribution_map[target_bin_util + self.item_size][new_key] = 1
else:
self.bin_type_distribution_map[target_bin_util + self.item_size][new_key] += 1