Advertisement
Guest User

Untitled

a guest
Nov 12th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.21 KB | None | 0 0
  1. % FÁBRICA
  2.  
  3. % Linhas
  4. linhas([lA]).
  5.  
  6. % Maquinas
  7. maquinas([ma]).
  8.  
  9. % Ferramentas
  10. ferramentas([fa,fa,fc]).
  11.  
  12. % Maquinas que constituem as Linhas
  13. tipos_maq_linha(lA,[ma]).
  14. % ...
  15.  
  16. % Operações
  17. tipo_operacoes([opt1,opt2,opt3]).
  18. % operacoes deve ser criado dinamicamente
  19. operacoes([op1,op2,op3,op4,op5]).
  20. %operacoes_atrib_maq depois deve ser criado dinamicamente
  21. operacoes_atrib_maq(ma,[op1,op2,op3,op4,op5]).
  22.  
  23. % classif_operacoes/2 deve ser criado dinamicamente %%atomic_concat(op,NumOp,Resultado)
  24. classif_operacoes(op1,opt1).
  25. classif_operacoes(op2,opt2).
  26. classif_operacoes(op3,opt1).
  27. classif_operacoes(op4,opt2).
  28. classif_operacoes(op5,opt3).
  29. % ...
  30.  
  31. % PRODUTOS
  32.  
  33. produtos([pA,pB,pC]).
  34.  
  35. operacoes_produto(pA,[opt1]).
  36. operacoes_produto(pB,[opt2]).
  37. operacoes_produto(pC,[opt3]).
  38.  
  39. % ENCOMENDAS
  40.  
  41. %Clientes
  42. clientes([clA,clB]).
  43.  
  44. % prioridades dos clientes
  45. prioridade_cliente(clA,1).
  46. prioridade_cliente(clB,2).
  47. % ...
  48.  
  49. % Encomendas do cliente,
  50. % termos e(<produto>,<n.unidades>,<tempo_conclusao>)
  51. encomenda(clA,[e(pA,1,100),e(pB,1,100)]).
  52. encomenda(clB,[e(pA,1,110),e(pB,1,150),e(pC,1,300)]).
  53. % ...
  54.  
  55. op_prod_client(op1,ma,fa,pA,clA,1,100,5,60).
  56. op_prod_client(op2,ma,fb,pB,clA,1,100,6,30).
  57. op_prod_client(op3,ma,fa,pA,clB,1,110,5,60).
  58. op_prod_client(op4,ma,fb,pB,clB,1,150,6,30).
  59. op_prod_client(op5,ma,fc,pC,clB,1,300,8,40).
  60. % ...
  61.  
  62. % :- dynamic operacoes_atrib_maq/2.
  63. % :- dynamic classif_operacoes/2.
  64. % :- dynamic op_prod_client/9.
  65. % :- dynamic operacoes/1.
  66.  
  67.  
  68. % Dado uma máquina retorna uma lista de operações e o tempo de ocupação
  69. heuristic_occupancy(M,L,T):-
  70. get_time(Ti),
  71. op_fe_sorted_list(M,L),
  72. occupation_time(semfer,L,T),
  73. get_time(Tf), Tcomp is Tf-Ti,
  74. write('Gerado em '), write(Tcomp),
  75. write(' segundos'),nl.
  76.  
  77. % Cria pares Ferramenta-Operacao
  78. op_fe_pair(O,F-O):-op_prod_client(O,_,F,_,_,_,_,_,_).
  79. % Cria uma lista de operacoes ordenada alfabeticamente pelas ferramentas das operações
  80. op_fe_sorted_list(M,S):- operacoes_atrib_maq(M,L), maplist(op_fe_pair,L,X), keysort(X,Y), pairs_values(Y,S).
  81. % Calcula tempo de ocupação de uma lista de operações
  82. occupation_time(_,[],0).
  83. occupation_time(F,[H|L],T):- op_prod_client(H,_,F1,_,_,_,_,Tset,Texec), occupation_time(F1,L,T1),
  84. ((F1==F,!,T is Texec+T1);T is Tset+Texec+T1).
  85.  
  86.  
  87. % Dado uma máquina retorna uma lista de operações e a soma dos tempos de atraso
  88. heuristic_delay(M,L,T):-
  89. get_time(Ti),
  90. op_pr_sorted_list(M,L),
  91. reverse(L,S),
  92. delay_time(semfer,S,_,T),
  93. get_time(Tf), Tcomp is Tf-Ti,
  94. write('Gerado em '), write(Tcomp),
  95. write(' segundos'),nl.
  96.  
  97. % Cria pares Prazo-Operacao
  98. op_pr_pair(O,P-O):-op_prod_client(O,_,_,_,_,_,P,_,_).
  99. % Cria uma lista de operacoes ordenada, ascendente, pelos prazos
  100. op_pr_sorted_list(M,S):- operacoes_atrib_maq(M,L), maplist(op_pr_pair,L,X), keysort(X,Y), pairs_values(Y,S).
  101. % Calcula soma dos tempos de atraso de uma lista de operações
  102. delay_time(_,[],0,0).
  103. delay_time(F,[H|L],To,Ta):- op_prod_client(H,_,F1,_,_,_,Prazo,Tset,Texec), delay_time(F1,L,To1,Ta1),
  104. ((F1==F,!,To is Texec+To1);To is Tset+Texec+To1),
  105. ((To<Prazo,!,Ta is Ta1);Ta is To-Prazo+Ta1).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement