Acciones

Completación de redes metabólicas (código e instancia)

De Lógica computacional y teoría de modelos (2019-20)

%% LÓGICA COMPUTACIONAL Y TEORÍA DE MODELOS

%% TRABAJO REDES METABÓLICAS

%% Jesús Camacho Moro
%% Mª Estefanía Espinar García


%% Problema %%
  %%%%%%%%%%


%% Sea un grafo bipartito dirigido, G = (R u M, E), donde R, es el conjunto 
%% de reacciones, M, el conjunto de metabolitos, y E, representa los
%% metabolitos reactantes y productos de cada reacción R. El problema
%% planteado es: dado un conjunto de semillas, S, y otro de resultantes, T,
%% hallar qué reacciones debemos obtener para poder producir los
%% resultantes a partir de las semillas.



%% Definiciones %%
   %%%%%%%%%%%%
   
%% draft(d). :Identificación del grafo G como Net.

%% reaccion(N, G). : es la reacción que tiene un nodo N en el grafo G

%% reactivo(M, r). : es la arista que va de un metabolito a una reacción.

%% producto(M, r). : es la arista que va de una reacción a un metabolito.

%% semilla(M) : es una semilla.

%% objetivo(M). : es el objetivo.



%% Instancias %%
  %%%%%%%%%%%%


draft(d).

reaccion(r1, x).
reaccion(r4, d).

reactivo(m1, r1).
reactivo(m3, r4).
reactivo(m4, r5).

producto(m3, r1).
producto(m5, r4).

semilla(m1). semilla(m2).

reaccion(r2, x).
reaccion(r3, d).
reaccion(r5, x).
reaccion(r6, d).

reactivo(m2, r2).
reactivo(m2, r3).
reactivo(m4, r4).
reactivo(m1, r5).
reactivo(m4, r6).

producto(m3, r2).
producto(m4, r3).
producto(m6, r5).
producto(m7, r6).

objetivo(m5).
objetivo(m7).



%% Código %%
  %%%%%%%%
  
%%% Tipo de reacción a: grafo G. Tipo de reacción x: reacciones añadidas

type(Net) :- draft(Net).
type(a).
type(x).


%%% Grafo extendido.

reaccion(R,x) :- reaccion(R,Net), draft(Net).
{ reaccion(R,x) } :- reaccion(R,a).


%%% Predicado alcanzable

scope(M, T) :- semilla(M), type(T).
scope(M, T) :- type(T), producto(M,R), reaccion(R,T), scope(M2,T), reactivo(M2,R).

:- objetivo(M), not scope(M,x).


%%% Nuevas reacciones y su minimización

nuevo(R) :- reaccion(R,x), draft(Net), not reaccion(R,Net).

reacciones(S) :- S = #count{1: nuevo(R) }.


#minimize{1,R:nuevo(R)}.


#show reacciones/1.
#show nuevo/1.