Пример #1
0
    def get_simulation(self,genome: Genome):
        unpacked_gene_list = list(genome.pattern)
        holder_list = []
        container_list = [self.container]
        while len(unpacked_gene_list) >0:
            selected_gene = unpacked_gene_list[0]

            candidate_holder = []
            for each_container in container_list:
                result = each_container.fit_orientation(selected_gene.box, selected_gene.orientation)
                if not result is None:
                    candidate_holder.append(result)
            if len(candidate_holder) <=0:
                return [], []
            else:
                candidate_holder.sort(key=functools.cmp_to_key(Coordinate.cmp_coordinate), reverse = True)
                # print(len(holder_list),candidate_holder)
                the_holder = candidate_holder.pop(0)
                remain_space = []
                
                for each_container in container_list:
                    if each_container.is_empty():
                        container_list.remove(each_container)
                for each_container in container_list:
                    if Coordinate.cmp_coordinate(each_container, the_holder) == 0:
                        remain_space.extend(each_container.get_free_space(the_holder))
                        container_list.remove(each_container)
                for each_container in container_list:
                    if each_container.is_empty():
                        container_list.remove(each_container)

                # merge space to increase the space utility
                for each_container in container_list:
                    for candidate_space in remain_space:
                        if Container.merge(each_container,candidate_space):
                            remain_space.remove(candidate_space)
                

                container_list.extend(remain_space)

                holder_list.append(the_holder)
                unpacked_gene_list.pop(0)
        return holder_list, container_list