Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- % Linhas
- linhas([lA]).
- % Maquinas
- maquinas([ma,mb,mc,md,me]).
- % Ferramentas
- ferramentas([fa,fb,fc,fd,fe,ff,fg,fh,fi,fj]).
- % Maquinas que constituem as Linhas
- tipos_maq_linha(lA,[ma,mb,mc,md,me]).
- % Opera??es
- tipo_operacoes([opt1,opt2,opt3,opt4,opt5,opt6,opt7,opt8,opt9,opt10]).
- operacao_maquina(opt1,ma,fa,1,1).
- operacao_maquina(opt2,mb,fb,2.5,2).
- operacao_maquina(opt3,mc,fc,1,3).
- operacao_maquina(opt4,md,fd,1,1).
- operacao_maquina(opt5,me,fe,2,3).
- operacao_maquina(opt6,mb,ff,1,4).
- operacao_maquina(opt7,md,fg,2,5).
- operacao_maquina(opt8,ma,fh,1,6).
- operacao_maquina(opt9,me,fi,1,7).
- operacao_maquina(opt10,mc,fj,20,2).
- % PRODUTOS
- produtos([pA,pB,pC,pD,pE,pF]).
- operacoes_produto(pA,[opt1,opt2,opt3,opt4,opt5]).
- operacoes_produto(pB,[opt1,opt6,opt3,opt4,opt5]).
- operacoes_produto(pC,[opt1,opt2,opt3,opt7,opt5]).
- operacoes_produto(pD,[opt8,opt2,opt3,opt4,opt5]).
- operacoes_produto(pE,[opt1,opt2,opt3,opt4,opt9]).
- operacoes_produto(pF,[opt1,opt2,opt10,opt4,opt5]).
- %Clientes
- clientes([clA,clB,clC]).
- % prioridades dos clientes
- prioridade_cliente(clA,2).
- prioridade_cliente(clB,1).
- prioridade_cliente(clB,3).
- % Encomendas do cliente,
- % termos e(<produto>,<n.unidades>,<tempo_conclusao>)
- encomenda(clA,[e(pA,4,50),e(pB,4,70)]).
- encomenda(clB,[e(pC,3,30),e(pD,5,200)]).
- encomenda(clC,[e(pE,4,60),e(pF,6,120)]).
- % cria_op_enc - fizeram-se correcoes face a versao anterior
- :- dynamic operacoes_atrib_maq/2.
- :- dynamic classif_operacoes/2.
- :- dynamic op_prod_client/9.
- :- dynamic operacoes/1.
- cria_op_enc:-retractall(operacoes(_)),
- retractall(operacoes_atrib_maq(_,_)),retractall(classif_operacoes(_,_)),
- retractall(op_prod_client(_,_,_,_,_,_,_,_,_)),
- findall(t(Cliente,Prod,Qt,TConc),
- (encomenda(Cliente,LE),member(e(Prod,Qt,TConc),LE)),
- LT),cria_ops(LT,0),
- findall(Op,classif_operacoes(Op,_),LOp),asserta(operacoes(LOp)),
- maquinas(LM),
- findall(_,
- (member(M,LM),
- findall(Opx,op_prod_client(Opx,M,_,_,_,_,_,_,_),LOpx),
- assertz(operacoes_atrib_maq(M,LOpx))),_).
- cria_ops([],_).
- cria_ops([t(Cliente,Prod,Qt,TConc)|LT],N):-
- operacoes_produto(Prod,LOpt),
- cria_ops_prod_cliente(LOpt,Cliente,Prod,Qt,TConc,N,N1),
- cria_ops(LT,N1).
- cria_ops_prod_cliente([],_,_,_,_,Nf,Nf).
- cria_ops_prod_cliente([Opt|LOpt],Client,Prod,Qt,TConc,N,Nf):-
- cria_ops_prod_cliente2(Opt,Prod,Client,Qt,TConc,N,Ni),
- cria_ops_prod_cliente(LOpt,Client,Prod,Qt,TConc,Ni,Nf).
- cria_ops_prod_cliente2(Opt,Prod,Client,Qt,TConc,N,Ni):-
- Ni is N+1,
- atomic_concat(op,Ni,Op),
- assertz(classif_operacoes(Op,Opt)),
- operacao_maquina(Opt,M,F,Tsetup,Texec),
- assertz(op_prod_client(Op,M,F,Prod,Client,Qt,TConc,Tsetup,Texec)).
- :-cria_op_enc.
- %Criar as tarefas dinamicamente
- % Notas:
- %produto corresponde a uma tarefa
- :-dynamic produtos/1.
- :-dynamic tarefa/4.
- :-dynamic tarefas/1.
- cria_Tarefas:-
- retractall(tarefas(_)),retractall(tarefa(_,_,_,_)),% apaga os dados existentes
- cria_op_enc,
- produtosExistentes(TodosProdutos,NumeroProdutosExistentes),% obtem todos os produtos de todas as encomendas e o numero total
- asserta(tarefas(NumeroProdutosExistentes)), %restringe a existentia de tantas tarefas como o numero de produtos existentes
- cria_tarefas(TodosProdutos, NumeroProdutosExistentes,1),
- findall(tarefa(Id,TempoProcessamento,TempConc,PesoPenalizacao), tarefa(Id,TempoProcessamento,TempConc,PesoPenalizacao), Resultado),
- write(Resultado). % rever esta linha!!!!!
- produtosExistentes(TodosProdutos,NumeroProdutosExistentes):-
- findall(Encomedas,encomenda(_,Encomedas),ConjuntoEncomendas),
- flatten(ConjuntoEncomendas,ListaEncomendas),
- obterProdutosEncomenda(ListaEncomendas,TodosProdutos),
- length(TodosProdutos,NumeroProdutosExistentes).
- obterProdutosEncomenda([],[]).
- obterProdutosEncomenda([Encomenda|RestoEncomendas],[Produto|TodosProdutos]):-
- obter_produto(Encomenda,Produto),
- obterProdutosEncomenda(RestoEncomendas,TodosProdutos).
- obter_produto(e(Produto,_,_),Produto).
- cria_tarefas(_,NumeroProdutosExistentes,NumeroProdutosExistentes).
- cria_tarefas([Produto|RestantesProdutos], NumeroProdutosExistentes,Contador):-
- IdTarefa is Contador,
- cria_tarefaPorProduto(Produto,IdTarefa), % cria tarefa associada a cada produto ---- aqui entra o makespan!!!!
- ContadorAuxiliar is Contador + 1,
- cria_tarefas(RestantesProdutos, NumeroProdutosExistentes,ContadorAuxiliar).
- cria_tarefaPorProduto(Produto,IdTarefa):-
- obterOperacoesDoProduto(Produto,OperacoesDoProduto),
- obterOperacoesOrdenadasPeloMaiorTempoExecucao(OperacoesDoProduto,ParesOrdenadosDecrescente),
- ParesOrdenadosDecrescente = [Operacao|OperacoesRestantes],
- obterTempoExecucaoPrimeiraOperacao(Operacao,MaiorTempoExecucao),
- op_prod_client(_,_,_,Produto,Cliente,DimensaoLote,TempoConclusao,_,_),
- TempoLote is (DimensaoLote *MaiorTempoExecucao),
- somaTempoExecaoRestante(OperacoesRestantes,SomaTempoExecaoRestante),
- Makespan is TempoLote + SomaTempoExecaoRestante,
- somaTemposPreparacao(ParesOrdenadosDecrescente,0,99999,TempoPreparacao),
- MakespanComTempoPreparacao is Makespan-TempoPreparacao,
- prioridade_cliente(Cliente,Prioridade),
- asserta(tarefa(IdTarefa, MakespanComTempoPreparacao,TempoConclusao, Prioridade)).
- obterOperacoesDoProduto(Produto,OperacoesDoProduto):-findall((Texec-Op),op_prod_client(Op,_,_,Produto,_,_,_,_,Texec), OperacoesDoProduto).
- %Obter uma lista de pares Operacao-tempo execucao ordenadas pelo tempo de execucao de forma decrescente
- obterOperacoesOrdenadasPeloMaiorTempoExecucao(OperacoesDoProduto,ParesOrdenadosDecrescente):-
- sort(OperacoesDoProduto,ListaParesOrdenadosPelaKey),
- reverse(ListaParesOrdenadosPelaKey,ParesOrdenadosDecrescente).
- obterTempoExecucaoPrimeiraOperacao( (TempoExecucao-_),TempoExecucao).
- somaTempoExecaoRestante([],0).
- somaTempoExecaoRestante([(TempoExecucao-_)|Operacoes],SomaTempoExecaoRestante):-
- somaTempoExecaoRestante(Operacoes,Tempo),
- SomaTempoExecaoRestante is Tempo + TempoExecucao.
- somaTemposPreparacao([],_,MenorTOcupacao,MenorTOcupacao).
- somaTemposPreparacao([(_-Op)|ListaOperacoes], SomatorioTempoExecucao,MenorTO, TempoPreparacao):-
- op_prod_client(Op,_,_,_,_,_,_,Tsetup,Texecucao),
- TOcupacao is SomatorioTempoExecucao - Tsetup,
- SomatorioTempoExecucao1 is SomatorioTempoExecucao+Texecucao,
- (TOcupacao<MenorTO,MenorTO1 is TOcupacao; MenorTO1 is MenorTO),
- somaTemposPreparacao(ListaOperacoes, SomatorioTempoExecucao1,MenorTO1, TempoPreparacao).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement