Job Scheduling Algorithmus 2
Ich suche Feedback, um die Lesbarkeit des Codes zu verbessern und die Effizienz des Algorithmus zu verbessern. Ich habe bereits eine Frage zur Codeüberprüfung zu diesem Thema gestellt. Das Feedback war hilfreich und ich habe die Datenstrukturen überarbeitet.
Link zur vorherigen Frage: Job Scheduling Algorithm
Infos zu Klassen:
Gegenstand ist der Gegenstand, an dem die Maschinen arbeiten. Maschine ist eine einzelne Maschine, die von der Startzeit bis zur Endzeit verwendet werden kann. Eine einzelne Aufgabe ist ein einzelnes Element auf einer Maschine. Job ist ein vollständiger Job und kann mehr als eine Aufgabe haben.
Der Algorithmus plant die Aufgaben, ordnet sie für die jeweilige Maschine neu an und erhöht den Gesamtgewinn, wenn ein Auftrag innerhalb des Zeitplans abgeschlossen wird.
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()
```
Antworten
'Algorithmus' ist überhaupt nicht korrekt und schlägt zur Laufzeit fehl. Bitte stellen Sie sicher, dass Ihr Code funktioniert, bevor Sie ihn veröffentlichen.
startundendwerden nie gelesen.timewird nie definiert. 'row' wird nie definiert - es wird beim zweiten Mal als 'job_row' getippt. Verwenden Sie 'for job in robs', nicht 'for job_row inrange(len(jobs))zusammen mit' jobs [job_row] '. Ich würde generell einen Linter empfehlen, der all diese Fehler auffangen sollte.Fügen Sie dem "Algorithmus" einen Dokumentstring hinzu, der beschreibt, was seine Eingaben sind und was er zurückgibt. Stellen Sie sicher, dass Sie beschreiben, was in Bezug auf BEDEUTUNG zurückgegeben wird, und nicht, was der Algorithmus tut. ("Gibt den besten Weg zum Planen zurück ..." und nicht "Schleifen durch ...") Ändern Sie den Namen des 'Algorithmus', um dessen Funktionsweise widerzuspiegeln (z. B. 'Zeitplan').
Ich persönlich denke, es ist in Ordnung, den Inhalt von 'main' direkt in den
if __name__ == "__main__"Block zu setzen, aber ich habe es in beide Richtungen gesehen.Bei den output_-Methoden sollten Sie eine Zeichenfolge zurückgeben und die Zeichenfolge in zwei Schritten drucken.
" ".join()kann helfen.