Acciones

Diferencia entre revisiones de «Estructura secundaria del ARN»

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

(Página creada con «<source lang = "prolog"> </source>»)
 
 
Línea 1: Línea 1:
 
<source lang = "prolog">
 
<source lang = "prolog">
 +
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
% Problema 3: Estructura secundaria del ARN.
 +
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
% Ulises Pastor Díaz.
 +
% Lógica computacional.
 +
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
%
 +
% Descripción del problema: Dada una secuencia de ARN S= s_1...s_n
 +
% determinar la estructura secundaria que minimiza una cierta energía.
 +
%
 +
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
%
 +
%% Parte 1: Determinar los dominios de la secuencia.
 +
%
 +
% Bases.
  
 +
base(a).  base(u).  base(g).  base(c).
 +
 +
% Determinar los índices.
 +
 +
ind(I) :- seq(I,B).
 +
 +
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
%
 +
%% Parte 2: Construcción del emparejamiento.
 +
%
 +
% Generación del emparejamiento.
 +
 +
{pair(J,I) : ind(I)} 1 :- ind(J).
 +
 +
% El emparejamiento es simétrico e inyectivo.
 +
 +
:- ind(I), ind(J), ind(K), I < J, pair(I,K), pair(J,K).
 +
pair(I,J) :- ind(I), ind(J), pair(J,I).
 +
 +
% Cada posición no se empareja con si misma ni con la siguiente.
 +
 +
:- ind(I), pair(I,I).
 +
:- ind(I), ind(J), I = J+1, pair(I,J).
 +
 +
% OPCIONAL: No se pueden pseudonudos.
 +
 +
:- ind(I1;I2;I3;I4), I1 < I2, I2 < I3, I3 < I4, pair(I1,I3), pair(I2,I4).
 +
 +
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
%
 +
%% Parte 3: Buenos emparejamientos entre bases.
 +
 +
% Emparejamientos erróneos.
 +
 +
wrong(X,X) :- base(X).
 +
wrong(a,c).  wrong(a,g).  wrong(c,u).
 +
 +
% No podemos tener emparejamientos erróneos.
 +
 +
:- wrong(B1,B2), seq(I,B1), seq(J,B2), pair(I,J).
 +
 +
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
%
 +
%% Parte 5: Presentación:
 +
 +
#show pair/2.
 +
 +
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
%
 +
%% Parte 6: Optimización. --opt-mode=optN
 +
 +
%% Energía: E = -|P|
 +
 +
% #minimize{-1@1,I,J : pair(I,J)}.
 +
 +
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 +
%% Parte 7: Problema de decisión.
 +
 +
#const k=9.
 +
2*k {pair(I,J) : ind(I), ind(J)} 2*k.
 
</source>
 
</source>

Revisión actual del 11:44 18 feb 2019

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Problema 3: Estructura secundaria del ARN.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ulises Pastor Díaz.
% Lógica computacional.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Descripción del problema: Dada una secuencia de ARN S= s_1...s_n
% determinar la estructura secundaria que minimiza una cierta energía.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%% Parte 1: Determinar los dominios de la secuencia.
%
% Bases.

base(a).   base(u).   base(g).   base(c).

% Determinar los índices.

ind(I) :- seq(I,B).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%% Parte 2: Construcción del emparejamiento.
%
% Generación del emparejamiento.

{pair(J,I) : ind(I)} 1 :- ind(J).

% El emparejamiento es simétrico e inyectivo.

:- ind(I), ind(J), ind(K), I < J, pair(I,K), pair(J,K).
pair(I,J) :- ind(I), ind(J), pair(J,I).

% Cada posición no se empareja con si misma ni con la siguiente.

:- ind(I), pair(I,I).
:- ind(I), ind(J), I = J+1, pair(I,J).

% OPCIONAL: No se pueden pseudonudos.

:- ind(I1;I2;I3;I4), I1 < I2, I2 < I3, I3 < I4, pair(I1,I3), pair(I2,I4).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%% Parte 3: Buenos emparejamientos entre bases.

% Emparejamientos erróneos.

wrong(X,X) :- base(X).
wrong(a,c).   wrong(a,g).   wrong(c,u).

% No podemos tener emparejamientos erróneos.

:- wrong(B1,B2), seq(I,B1), seq(J,B2), pair(I,J).

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

#show pair/2.

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

%% Energía: E = -|P|

% #minimize{-1@1,I,J : pair(I,J)}.

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

#const k=9.
2*k {pair(I,J) : ind(I), ind(J)} 2*k.