Esempio n. 1
0
    def deliver_to_shelf(self, command, order_in_progress):
        #print("COMANDO DELIVER_SHELF:", command)
        transactor = command[2]  #coordinate del transactor
        num_wares = int(
            command[3])  #numero di merci da prelevare dal transactor
        shelves = command[4]

        # cerco i trasportatori liberi
        unused_transporters = self.check_unused_transporter()

        # se la quantità da prendere è maggiore della somma totale della capacità dei trasortatori disponibili, li mando tutti
        if compare_total_capacity(unused_transporters, num_wares):
            chosen_transporters = pathCalculatorSameGoal(
                self.sectors, unused_transporters, transactor)
            print(
                "capacità massima inferiore a quella richiesta: invio tutti i trasportatori"
            )
            order_in_progess = True  #comunica tramite il flag che l'ordine non è ncora stato completato
        else:
            # sennò capisco qual è la combinazione migliore di trasportatori (minima capacità complessiva e minor tempo di arrivo al transactor)
            best_transporters = best_capacity_calculator(
                unused_transporters, num_wares)
            if len(best_transporters
                   ) != 1:  #se non è stata trovata solo una combinazione
                chosen_transporters = pathComparator(
                    self.sectors, best_transporters, transactor
                )  #si controlla quale combinazione è nel complesso più vicina al transactor
            else:  #si sceglie la combinazione trovata senza ulteriori controlli
                chosen_transporters = pathCalculatorSameGoal(
                    self.sectors, best_transporters[0], transactor)
            order_in_progess = False  #comunica tramite il flag che l'ordine sta venendo completato

        # invio i transporter

        return True
Esempio n. 2
0
        sector_14, sector_15, sector_02a, sector_16, sector_01b, sector_17
    ]

    tr1 = TransporterInfo("aa", None, "12", True, 5)
    tr2 = TransporterInfo("bb", None, "16", True, 5)
    tr3 = TransporterInfo("cc", None, "13", True, 3)
    tr4 = TransporterInfo("dd", None, "14", True, 3)
    tr5 = TransporterInfo("ee", None, "15", True, 1)

    transporters = [tr1, tr2, tr3, tr4, tr5]

    target = 10

    goal = '17'

    best_transporters = best_capacity_calculator(transporters, target)

    print("BEST COMBINATION:")

    for n in range(len(best_transporters)):
        strRes = ""
        for m in range(len(best_transporters[n])):
            strRes += best_transporters[n][m].mac_address + "-" + str(
                best_transporters[n][m].capacity) + "|"
        print(strRes)

    if len(best_transporters
           ) != 1:  # se non è stata trovata solo una combinazione
        chosen_transporters = pathComparator(
            sectors, best_transporters, goal
        )  # si controlla quale combinazione è nel complesso più vicina al transactor
Esempio n. 3
0
    def send_to_transactor(self):
        # fintanto che ci sono ancora merci da prendere nel transactor
        while self.retrieve_transanctor:
            #svuoto la lista dei transporter unused
            unused_transporters = []
            # cerco i trasportatori liberi
            unused_transporters = self.handler.check_unused_transporter()

            if len(unused_transporters
                   ) != 0:  #se è stato trovato almeno un transporter unused

                print("UNUSED TRANSPORTERS:")
                for n in range(len(unused_transporters)):
                    print(unused_transporters[n].mac_address)

                # se la quantità da prendere è maggiore della somma totale della capacità dei trasortatori disponibili, li mando tutti
                print("self.num_wares prima =", self.num_wares)
                if compare_total_capacity(unused_transporters, self.num_wares):
                    # vengono selezionati tutti i transporter
                    chosen_transporters = unused_transporters
                    print(
                        "capacità massima inferiore a quella richiesta: invio tutti i trasportatori"
                    )
                else:

                    print("self.num_wares dopo =", self.num_wares)
                    # sennò capisco qual è la combinazione migliore di trasportatori (minima capacità complessiva e minor tempo di arrivo al transactor)
                    best_transporters = best_capacity_calculator(
                        unused_transporters, self.num_wares)

                    print("BEST TRANSPORTERS:")
                    for n in range(len(best_transporters)):
                        print("LISTA #", n + 1)
                        for m in range(len(best_transporters[n])):
                            print(best_transporters[n][m].mac_address)

                    if len(
                            best_transporters
                    ) != 1:  # se non è stata trovata solo una combinazione
                        chosen_transporters = pathComparator(
                            self.handler.sectors, best_transporters,
                            self.transactor
                        )  # si controlla quale combinazione è nel complesso più vicina al transactor
                    else:  # si sceglie la combinazione trovata senza ulteriori controlli
                        chosen_transporters = best_transporters[
                            0]  #TODO vedi qua
                    self.retrieve_transanctor = False  # comunica tramite il flag che sono stati inviati abbastanza transporter da prelevare tutte le merci dal transactor
                #setto i trasportatori scelti su working
                self.handler.setTransportersStatus(chosen_transporters)

                print("CHOSEN TRANSPORTERS:")
                for n in range(len(chosen_transporters)):
                    print(chosen_transporters[n].mac_address)

                self.handler.print_transporters()
                #assegno ad ogni transporter le shelf da consegnare
                assigned_transporters = self.assignShelves(
                    chosen_transporters, self.tmp_remaining_shelves)

                print("TMP SHELVES")
                for n in range(len(self.tmp_remaining_shelves)):
                    print("SHELF:", self.tmp_remaining_shelves[n].coord)
                    print("LEVELS:", self.tmp_remaining_shelves[n].levels)
                print("TOTAL SHELVES")
                for n in range(len(self.total_remaining_shelves)):
                    print("SHELF:", self.total_remaining_shelves[n].coord)
                    print("LEVELS:", self.total_remaining_shelves[n].levels)

                print("ASSIGNED TRANSPORTERS:")
                for n in range(len(assigned_transporters)):
                    print(assigned_transporters[n][0].mac_address)

                #invio i transporter
                for n in range(len(assigned_transporters)
                               ):  #cicla tra i transporter scelti
                    tmp_assigned = assigned_transporters[n][
                        0]  #transporter assegnato
                    tmp_diz_shelf = assigned_transporters[n][
                        1]  #dizionario delle shelf del transporter
                    #si calcola quante wares totali dovrà trasportare il trasportatore
                    tot_delivered = 0
                    for m in range(
                            len(tmp_diz_shelf)
                    ):  #cicla tra tutte le shelf assegnate al trasportatore
                        tot_delivered += len(
                            tmp_diz_shelf[list(tmp_diz_shelf)[m]])
                    tmp_diz_transactor = {}
                    tmp_diz_transactor[self.transactor] = [
                        tot_delivered,
                    ]

                    #si invia il transporter
                    tmp_deliver_shelf_controller = transporterControllerDeliverShelf(
                        tmp_assigned, tmp_diz_shelf, tmp_diz_transactor,
                        self.handler.sectors, "DELIVER_SHELF",
                        self.handler.crosses_queue, self.handler.sectors_queue,
                        self)
                    tmp_deliver_shelf_controller.start()