Acciones

Reparación de redes metabólicas

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

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Problema 5: Reparación de redes metabólicas
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ulises Pastor Díaz.
% Lógica computacional.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Descripción del problema: Dado un grafo de influencia G = (V,E,c) con
% c: E -> {+,-} y un etiquetado m:V -> {+,-} (parcial) de los vértices,
% corregir G para que sea consistente con m con el mínimo número de
% operaciones.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%% Parte 1: Definición de los signos.
%
% Signos.

signo(menos).   signo(mas).

% Predicado opuesto.

opuesto(mas,menos).   opuesto(menos,mas). 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%% Parte 2: Construcción del etiquetado.
%
%% Etiquetado para vértices.

1 {m(V,S) : signo(S)} 1 :- vertice(V).

% Consistecia con la observación.

m(V,S) :- obs(V,S).

%% Etiquetado de arcos.

1 {c(U,V,S) : signo(S)} 1 :- arco(U,V).

% Consistecia con la observación.

c(U,V,S) :- not error(U,V), obs(U,V,S).

c(U,V,T) :- error(U,V), obs(U,V,S), opuesto(T,S).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%% Parte 3: Detección de errores, competibilidad.

% Generación de errores.

{error(U,V)} :- arco(U,V).

% Reglas de signos. (Predicado signo no necesario).

resultado(V,mas) :- arco(U,V), c(U,V,S), m(U,S).

resultado(V,menos) :- arco(U,V), opuesto(S,T), c(U,V,S), m(U,T).

%% El etiquetado debe ser consistente.

:- m(U,S), not resultado(U,S), not entrada(U).

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

#show error/2.
#show m/2.
#show c/3.

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

errores(N) :- N = #count{1 : error(U,V)}.

#minimize{1,U,V : error(U,V)}.

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

#const k = 2.

% :- k+1 {error(U,V) : arco(U,V)}.