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.