Algorithme de planification des travaux 2
Je recherche des commentaires pour améliorer la lisibilité du code et améliorer l'efficacité de l'algorithme. J'ai déjà posté une question sur l'examen du code à ce sujet. Les commentaires ont été utiles et j'ai repensé les structures de données.
Lien vers la question précédente: Algorithme de planification des tâches
Informations sur les cours:
L'élément est l'élément sur lequel les machines travaillent. La machine est une machine unique qui peut être utilisée de l'heure de début à l'heure de fin. Une seule tâche est un élément unique sur une machine. Le travail est un travail complet et peut avoir plusieurs tâches.
L'algorithme planifie les tâches, les réorganise pour la machine spécifique et ajoute au profit total lorsqu'un travail est terminé dans le calendrier.
class ItemModel:
def __init__(self, name:str, starts:int, ends:int)->None:
self.name = name
self.start = start
self.ends = ends
class JobModel:
def __init__(self, tasks_needed:int, tasks_done:int, profit:int)->None:
self.tasks_needed = tasks_needed
self.tasks_done = tasks_done
self.profit = profit
class MachineModel:
def __init__(self, starts:int, ends:int)->None:
self.starts = starts
self.ends = ends
class View:
def output_profit(profit:int)->None:
print("profit: " + str(profit), end = "\n")
def output_sublist(sublist:[int])->None:
for item in sublist:
print(str(item), end = " ")
print('\n')
def algorithm(items:[ItemModel], jobs:[JobModel], machines:[MachineModel])->(int, [ItemModel]):
total_profit = 0
for start in range(len(items)):
for end in range(len(items)):
for job_row in range(len(jobs)):
if (time >= jobs[job_row].start_time) and (time <= jobs[job_row].end_time):
jobs[job_row].task_done += 1
profit = 0
for job_row in range(len(jobs)):
if jobs[row].tasks_needed == jobs[row].tasks_done:
profit += jobs[row].profit
yield (profit, sublist)
def main():
items = [ItemModel("a", 0, 2), ItemModel("b", 3, 4)]
jobs = [JobModel(0, 0, 12), JobModel(0, 0, 10)]
machines = [MachineModel(0, 1), MachineModel(0, 7)]
View view = View()
for pair in algorithm(items, jobs, machines):
view.output_profit(pair[0])
view.output_sublist(pair[1])
if __name__ == "__main__":
main()
```
Réponses
«algorithme» n'est pas du tout correct et échouera à l'exécution. veuillez vous assurer que votre code fonctionne avant de le publier.
startetendne sont jamais lus.timen'est jamais défini. 'row' n'est jamais défini - il est typo-d comme 'job_row' la deuxième fois. utilisez «pour le travail dans robs», et non pour «pour job_row dansrange(len(jobs))» avec «jobs [job_row]». Je recommanderais généralement un linter, qui devrait attraper toutes ces erreurs.Ajoutez une docstring à "algorithme", décrivant ce que sont ses entrées et ce qu'il renvoie. Assurez-vous de décrire ce qu'il renvoie en termes de SIGNIFICATION et non ce que fait l'algorithme. ("renvoie la meilleure façon de planifier ..." et non "boucle à travers ...") Modifiez le nom de 'algorithme' pour refléter ce qu'il fait (ex. 'planification').
Personnellement, je pense que c'est bien de mettre le contenu de «main» directement dans le
if __name__ == "__main__"bloc, mais je l'ai vu dans les deux sens.Pour les méthodes output_, envisagez de renvoyer une chaîne et d'imprimer la chaîne en deux étapes.
" ".join()peut aider.