Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- % FÁBRICA
- % Linhas
- linhas([lA]).
- % Maquinas
- maquinas([ma]).
- % Ferramentas
- ferramentas([fa,fa,fc]).
- % Maquinas que constituem as Linhas
- tipos_maq_linha(lA,[ma]).
- % ...
- % Operações
- tipo_operacoes([opt1,opt2,opt3]).
- % operacoes deve ser criado dinamicamente
- operacoes([op1,op2,op3,op4,op5]).
- %operacoes_atrib_maq depois deve ser criado dinamicamente
- operacoes_atrib_maq(ma,[op1,op2,op3,op4,op5]).
- % classif_operacoes/2 deve ser criado dinamicamente %%atomic_concat(op,NumOp,Resultado)
- classif_operacoes(op1,opt1).
- classif_operacoes(op2,opt2).
- classif_operacoes(op3,opt1).
- classif_operacoes(op4,opt2).
- classif_operacoes(op5,opt3).
- % ...
- % Afetação de tipos de operações a tipos de máquinas
- % com ferramentas, tempos de setup e tempos de execucao)
- operacao_maquina(opt1,ma,fa,5,60).
- operacao_maquina(opt2,ma,fb,6,30).
- operacao_maquina(opt3,ma,fc,8,40).
- % ...
- % PRODUTOS
- produtos([pA,pB,pC]).
- operacoes_produto(pA,[opt1]).
- operacoes_produto(pB,[opt2]).
- operacoes_produto(pC,[opt3]).
- % ENCOMENDAS
- %Clientes
- clientes([clA,clB]).
- % prioridades dos clientes
- prioridade_cliente(clA,1).
- prioridade_cliente(clB,2).
- % ...
- % Encomendas do cliente,
- % termos e(<produto>,<n.unidades>,<tempo_conclusao>)
- encomenda(clA,[e(pA,1,100),e(pB,1,100)]).
- encomenda(clB,[e(pA,1,110),e(pB,1,150),e(pC,1,300)]).
- % ...
- op_prod_client(op1,ma,fa,pA,clA,1,100,5,60).
- op_prod_client(op2,ma,fb,pB,clA,1,100,6,30).
- op_prod_client(op3,ma,fa,pA,clB,1,110,5,60).
- op_prod_client(op4,ma,fb,pB,clB,1,150,6,30).
- op_prod_client(op5,ma,fc,pC,clB,1,300,8,40).
- % ...
- % :- dynamic operacoes_atrib_maq/2.
- % :- dynamic classif_operacoes/2.
- % :- dynamic op_prod_client/9.
- % :- dynamic operacoes/1.
- % Dado uma máquina retorna uma lista de operações e o tempo de ocupação
- heuristic_occupancy(M,L,T):-
- get_time(Ti),
- op_fe_sorted_list(M,L),
- occupation_time(semfer,L,T),
- get_time(Tf), Tcomp is Tf-Ti,
- write('Gerado em '), write(Tcomp),
- write(' segundos'),nl.
- % Cria pares Ferramenta-Operacao
- op_fe_pair(O,F-O):-op_prod_client(O,_,F,_,_,_,_,_,_).
- % Cria uma lista de operacoes ordenada alfabeticamente pelas ferramentas das operações
- op_fe_sorted_list(M,S):- operacoes_atrib_maq(M,L), maplist(op_fe_pair,L,X), keysort(X,Y), pairs_values(Y,S).
- % Calcula tempo de ocupação de uma lista de operações
- occupation_time(_,[],0).
- occupation_time(F,[H|L],T):- op_prod_client(H,_,F1,_,_,_,_,Tset,Texec), occupation_time(F1,L,T1),
- ((F1==F,!,T is Texec+T1);T is Tset+Texec+T1).
- % Dado uma máquina retorna uma lista de operações e a soma dos tempos de atraso
- heuristic_delay(M,L,T):-
- get_time(Ti),
- op_pr_sorted_list(M,L),
- reverse(L,S),
- %delay_time(semfer,S,_,T),
- soma_tempos_atrasos(semfer,M,S,T,_,_),
- get_time(Tf), Tcomp is Tf-Ti,
- write('Gerado em '), write(Tcomp),
- write(' segundos'),nl.
- % Cria pares Prazo-Operacao
- op_pr_pair(O,P-O):-op_prod_client(O,_,_,_,_,_,P,_,_).
- % Cria uma lista de operacoes ordenada, ascendente, pelos prazos
- op_pr_sorted_list(M,S):- operacoes_atrib_maq(M,L), maplist(op_pr_pair,L,X), keysort(X,Y), pairs_values(Y,S).
- % Calcula soma dos tempos de atraso de uma lista de operações
- delay_time(_,[],_,_).
- delay_time(F,[H|L],To,Ta):- op_prod_client(H,_,F1,_,_,_,Prazo,Tset,Texec),
- ((F==F1,!,To is Texec+To1);To is Tset+Texec+To1),
- ((To<Prazo,!,Ta is Ta1);Ta is To-Prazo+Ta1),
- delay_time(F1,L,To1,Ta1).
- soma_tempos_atrasos(,,[],Tempo,_,Tatraso) :- Tempo is Tatraso.
- soma_tempos_atrasos(Fer,M,[Op|LOp],Tempo,TOcup,Tatraso):-
- op_prod_client(Op,M,Fer1,_,_,_,Texecmax,Tsetup,Texec),
- ((Fer1==Fer,!, TOcup1 is Texec + TOcup);(TOcup1 is Texec + Tsetup + TOcup)),
- ((TOcup1 < Texecmax,!,Tatraso1 is Tatraso);(Tatraso1 is (TOcup1 - Texecmax) + Tatraso)),
- soma_tempos_atrasos(Fer1,M,LOp,Tempo,TOcup1,Tatraso1).
- % A* para tempos de ocupação
- aStar_occupancy(L,Cam,Custo):- aStar_occupancy2([(_,0,L,[ ])|_],Cam,Custo).
- aStar_occupancy2([(_,Custo,[],L)|_],Cam,Custo):- reverse(L,Cam).
- %aStar_occupancy2([(_,Ca,LA,LOpFaltam)|Outros],Cam,Custo).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement