Algoritmo de programación de trabajos 2
Estoy buscando comentarios para mejorar la legibilidad del código y mejorar la eficiencia del algoritmo. Ya publiqué una pregunta sobre la revisión del código sobre esto. Los comentarios fueron útiles y reconsideré las estructuras de datos.
Enlace a la pregunta anterior: Algoritmo de programación de trabajos
Información sobre clases:
El artículo es el artículo en el que funcionan las máquinas. La máquina es una sola máquina que se puede utilizar desde el inicio hasta el final. Una sola tarea es un solo elemento en una máquina. El trabajo es un trabajo completo y puede tener más de una tarea.
El algoritmo programa las tareas, las reordena para la máquina específica y se suma al beneficio total si un trabajo se termina dentro del programa.
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()
```
Respuestas
'algoritmo' no es correcto en absoluto y fallará en tiempo de ejecución. asegúrese de que su código funcione antes de publicarlo.
startyendnunca se leen.timenunca se define. 'row' nunca se define; es un error tipográfico como 'job_row' la segunda vez. use 'for job in robs', no 'for job_row inrange(len(jobs))junto con' jobs [job_row] '. En general, recomendaría un linter, que debería detectar todos estos errores.Agrega una cadena de documentación a "algoritmo", describiendo cuáles son sus entradas y qué devuelve. Asegúrese de describir lo que devuelve en términos de SIGNIFICADO y no lo que hace el algoritmo. ("devuelve la mejor manera de programar ..." y no "recorre ...") Cambie el nombre de 'algoritmo' para reflejar lo que hace (por ejemplo, 'programación').
Personalmente, creo que está bien poner el contenido de 'principal' directamente en el
if __name__ == "__main__"bloque, pero lo he visto en ambos sentidos.Para los métodos output_, considere devolver una cadena e imprimir la cadena en dos pasos.
" ".join()puede ayudar.