Advertisement
Guest User

TodosOsDadosDaBaseConhecimento

a guest
Dec 13th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.66 KB | None | 0 0
  1. % Linhas
  2. linhas([lA]).
  3.  
  4. % Maquinas
  5. maquinas([ma,mb,mc,md,me]).
  6.  
  7. % Ferramentas
  8. ferramentas([fa,fb,fc,fd,fe,ff,fg,fh,fi,fj]).
  9.  
  10. % Maquinas que constituem as Linhas
  11. tipos_maq_linha(lA,[ma,mb,mc,md,me]).
  12.  
  13. % Opera??es
  14. tipo_operacoes([opt1,opt2,opt3,opt4,opt5,opt6,opt7,opt8,opt9,opt10]).
  15.  
  16. operacao_maquina(opt1,ma,fa,1,1).
  17. operacao_maquina(opt2,mb,fb,2.5,2).
  18. operacao_maquina(opt3,mc,fc,1,3).
  19. operacao_maquina(opt4,md,fd,1,1).
  20. operacao_maquina(opt5,me,fe,2,3).
  21. operacao_maquina(opt6,mb,ff,1,4).
  22. operacao_maquina(opt7,md,fg,2,5).
  23. operacao_maquina(opt8,ma,fh,1,6).
  24. operacao_maquina(opt9,me,fi,1,7).
  25. operacao_maquina(opt10,mc,fj,20,2).
  26.  
  27.  
  28. % PRODUTOS
  29. produtos([pA,pB,pC,pD,pE,pF]).
  30.  
  31. operacoes_produto(pA,[opt1,opt2,opt3,opt4,opt5]).
  32. operacoes_produto(pB,[opt1,opt6,opt3,opt4,opt5]).
  33. operacoes_produto(pC,[opt1,opt2,opt3,opt7,opt5]).
  34. operacoes_produto(pD,[opt8,opt2,opt3,opt4,opt5]).
  35. operacoes_produto(pE,[opt1,opt2,opt3,opt4,opt9]).
  36. operacoes_produto(pF,[opt1,opt2,opt10,opt4,opt5]).
  37.  
  38. %Clientes
  39. clientes([clA,clB,clC]).
  40.  
  41. % prioridades dos clientes
  42. prioridade_cliente(clA,2).
  43. prioridade_cliente(clB,1).
  44. prioridade_cliente(clB,3).
  45.  
  46. % Encomendas do cliente,
  47. % termos e(<produto>,<n.unidades>,<tempo_conclusao>)
  48.  
  49. encomenda(clA,[e(pA,4,50),e(pB,4,70)]).
  50. encomenda(clB,[e(pC,3,30),e(pD,5,200)]).
  51. encomenda(clC,[e(pE,4,60),e(pF,6,120)]).
  52.  
  53.  
  54.  
  55. % cria_op_enc - fizeram-se correcoes face a versao anterior
  56. :- dynamic operacoes_atrib_maq/2.
  57. :- dynamic classif_operacoes/2.
  58. :- dynamic op_prod_client/9.
  59. :- dynamic operacoes/1.
  60.  
  61. cria_op_enc:-retractall(operacoes(_)),
  62. retractall(operacoes_atrib_maq(_,_)),retractall(classif_operacoes(_,_)),
  63. retractall(op_prod_client(_,_,_,_,_,_,_,_,_)),
  64. findall(t(Cliente,Prod,Qt,TConc),
  65. (encomenda(Cliente,LE),member(e(Prod,Qt,TConc),LE)),
  66. LT),cria_ops(LT,0),
  67. findall(Op,classif_operacoes(Op,_),LOp),asserta(operacoes(LOp)),
  68. maquinas(LM),
  69. findall(_,
  70. (member(M,LM),
  71. findall(Opx,op_prod_client(Opx,M,_,_,_,_,_,_,_),LOpx),
  72. assertz(operacoes_atrib_maq(M,LOpx))),_).
  73.  
  74. cria_ops([],_).
  75. cria_ops([t(Cliente,Prod,Qt,TConc)|LT],N):-
  76. operacoes_produto(Prod,LOpt),
  77. cria_ops_prod_cliente(LOpt,Cliente,Prod,Qt,TConc,N,N1),
  78. cria_ops(LT,N1).
  79.  
  80.  
  81. cria_ops_prod_cliente([],_,_,_,_,Nf,Nf).
  82. cria_ops_prod_cliente([Opt|LOpt],Client,Prod,Qt,TConc,N,Nf):-
  83. cria_ops_prod_cliente2(Opt,Prod,Client,Qt,TConc,N,Ni),
  84. cria_ops_prod_cliente(LOpt,Client,Prod,Qt,TConc,Ni,Nf).
  85.  
  86.  
  87. cria_ops_prod_cliente2(Opt,Prod,Client,Qt,TConc,N,Ni):-
  88. Ni is N+1,
  89. atomic_concat(op,Ni,Op),
  90. assertz(classif_operacoes(Op,Opt)),
  91. operacao_maquina(Opt,M,F,Tsetup,Texec),
  92. assertz(op_prod_client(Op,M,F,Prod,Client,Qt,TConc,Tsetup,Texec)).
  93.  
  94. :-cria_op_enc.
  95.  
  96. %Criar as tarefas dinamicamente
  97. % Notas:
  98. %produto corresponde a uma tarefa
  99. :-dynamic produtos/1.
  100. :-dynamic tarefa/4.
  101. :-dynamic tarefas/1.
  102.  
  103. cria_Tarefas:-
  104. retractall(tarefas(_)),retractall(tarefa(_,_,_,_)),% apaga os dados existentes
  105. cria_op_enc,
  106. produtosExistentes(TodosProdutos,NumeroProdutosExistentes),% obtem todos os produtos de todas as encomendas e o numero total
  107. asserta(tarefas(NumeroProdutosExistentes)), %restringe a existentia de tantas tarefas como o numero de produtos existentes
  108. cria_tarefas(TodosProdutos, NumeroProdutosExistentes,1),
  109. findall(tarefa(Id,TempoProcessamento,TempConc,PesoPenalizacao), tarefa(Id,TempoProcessamento,TempConc,PesoPenalizacao), Resultado),
  110. write(Resultado). % rever esta linha!!!!!
  111.  
  112. produtosExistentes(TodosProdutos,NumeroProdutosExistentes):-
  113. findall(Encomedas,encomenda(_,Encomedas),ConjuntoEncomendas),
  114. flatten(ConjuntoEncomendas,ListaEncomendas),
  115. obterProdutosEncomenda(ListaEncomendas,TodosProdutos),
  116. length(TodosProdutos,NumeroProdutosExistentes).
  117.  
  118.  
  119. obterProdutosEncomenda([],[]).
  120. obterProdutosEncomenda([Encomenda|RestoEncomendas],[Produto|TodosProdutos]):-
  121. obter_produto(Encomenda,Produto),
  122. obterProdutosEncomenda(RestoEncomendas,TodosProdutos).
  123.  
  124. obter_produto(e(Produto,_,_),Produto).
  125.  
  126.  
  127. cria_tarefas(_,NumeroProdutosExistentes,NumeroProdutosExistentes).
  128. cria_tarefas([Produto|RestantesProdutos], NumeroProdutosExistentes,Contador):-
  129. IdTarefa is Contador,
  130. cria_tarefaPorProduto(Produto,IdTarefa), % cria tarefa associada a cada produto ---- aqui entra o makespan!!!!
  131. ContadorAuxiliar is Contador + 1,
  132. cria_tarefas(RestantesProdutos, NumeroProdutosExistentes,ContadorAuxiliar).
  133.  
  134.  
  135. cria_tarefaPorProduto(Produto,IdTarefa):-
  136. obterOperacoesDoProduto(Produto,OperacoesDoProduto),
  137. obterOperacoesOrdenadasPeloMaiorTempoExecucao(OperacoesDoProduto,ParesOrdenadosDecrescente),
  138.  
  139. ParesOrdenadosDecrescente = [Operacao|OperacoesRestantes],
  140. obterTempoExecucaoPrimeiraOperacao(Operacao,MaiorTempoExecucao),
  141.  
  142. op_prod_client(_,_,_,Produto,Cliente,DimensaoLote,TempoConclusao,_,_),
  143.  
  144. TempoLote is (DimensaoLote *MaiorTempoExecucao),
  145. somaTempoExecaoRestante(OperacoesRestantes,SomaTempoExecaoRestante),
  146. Makespan is TempoLote + SomaTempoExecaoRestante,
  147. somaTemposPreparacao(ParesOrdenadosDecrescente,0,99999,TempoPreparacao),
  148. MakespanComTempoPreparacao is Makespan-TempoPreparacao,
  149. prioridade_cliente(Cliente,Prioridade),
  150.  
  151. asserta(tarefa(IdTarefa, MakespanComTempoPreparacao,TempoConclusao, Prioridade)).
  152.  
  153.  
  154. obterOperacoesDoProduto(Produto,OperacoesDoProduto):-findall((Texec-Op),op_prod_client(Op,_,_,Produto,_,_,_,_,Texec), OperacoesDoProduto).
  155.  
  156. %Obter uma lista de pares Operacao-tempo execucao ordenadas pelo tempo de execucao de forma decrescente
  157. obterOperacoesOrdenadasPeloMaiorTempoExecucao(OperacoesDoProduto,ParesOrdenadosDecrescente):-
  158. sort(OperacoesDoProduto,ListaParesOrdenadosPelaKey),
  159. reverse(ListaParesOrdenadosPelaKey,ParesOrdenadosDecrescente).
  160.  
  161.  
  162. obterTempoExecucaoPrimeiraOperacao( (TempoExecucao-_),TempoExecucao).
  163.  
  164. somaTempoExecaoRestante([],0).
  165. somaTempoExecaoRestante([(TempoExecucao-_)|Operacoes],SomaTempoExecaoRestante):-
  166. somaTempoExecaoRestante(Operacoes,Tempo),
  167. SomaTempoExecaoRestante is Tempo + TempoExecucao.
  168.  
  169.  
  170. somaTemposPreparacao([],_,MenorTOcupacao,MenorTOcupacao).
  171. somaTemposPreparacao([(_-Op)|ListaOperacoes], SomatorioTempoExecucao,MenorTO, TempoPreparacao):-
  172. op_prod_client(Op,_,_,_,_,_,_,Tsetup,Texecucao),
  173. TOcupacao is SomatorioTempoExecucao - Tsetup,
  174. SomatorioTempoExecucao1 is SomatorioTempoExecucao+Texecucao,
  175. (TOcupacao<MenorTO,MenorTO1 is TOcupacao; MenorTO1 is MenorTO),
  176. somaTemposPreparacao(ListaOperacoes, SomatorioTempoExecucao1,MenorTO1, TempoPreparacao).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement