Acciones

Completación de redes metabólicas

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

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Problema 6: Completación de redes metabólicas.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ulises Pastor Díaz.
% Lógica computacional.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Dado un grafo bipartito dirigido G = (R u M, E) dónde R son
% reacciones, M son metabolitos y E representa que metabolitos son
% reactantes y productos de cada reacción R, el problema es dado un
% conjunto de semillas S y otra de resultantes T, determinar qué
% reacciones debemos obtener a un subgrafo dado para poder producir los
% los resultantes a partir de las semillas.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%% Parte 1: Tipos de reacción.
%
% Predicado tipo.

tipo(R) :- red(R).
tipo(a).   tipo(x).

% Tipo a: del grafo completo. Tipo x: Añadidas a la red.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%% Parte 2: Extensión del grafo.
%
% Las reacciones preexistentes son de tipo x.

reaccion(R,x) :- reaccion(R,N), red(N).

% Podemos añadir las reacciones de tipo a.

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

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%% Parte 3: Condición de alcanzable.
%
% Definición del predicado alcanzable.

alcanzable(M,T) :- semilla(M), tipo(T).
alcanzable(M,T) :- tipo(T), alcanzable(N,T), producto(M,R), reaccion(R,T), not irrealizable(R,T).

% Predicado auxiliar irrealizable.

irrealizable(R,T) :- not reaccion(R,T), reaccion(R,a), tipo(T).
irrealizable(R,T) :- tipo(T), reactante(N,R), not alcanzable(N,T).

% Todo objetivo es alcanzable.

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

% Predicado nuevo.

nuevo(R) :- reaccion(R,x), red(N), not reaccion(R,N).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%% Parte 5: Presentación:

% #show nuevo/1.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%% Parte 6: Optimización. --opt-mode=optN 

nuevos(N) :- N = #count{R : nuevo(R)}.

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

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Parte 7: Problema de decisión.

#const k = 1.

:- k+1 {nuevo(R) : reaccion(R,a)}.