Diferencia entre revisiones de «Predicción de la estructura de proteínas»
De Lógica computacional y teoría de modelos (2019-20)
(Página creada con «<source lang = "prolog"> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Problema 4: Predicción de estr…») |
|||
Línea 1: | Línea 1: | ||
<source lang = "prolog"> | <source lang = "prolog"> | ||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
− | % Problema | + | % Problema: Predicción de estructura de proteinas. |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
% Ulises Pastor Díaz. | % Ulises Pastor Díaz. | ||
Línea 8: | Línea 8: | ||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
% | % | ||
− | % Descripción del problema: Dada una secuencia de aminoácidos hidrofóbicos o polares, determinar la estructura | + | % Descripción del problema: Dada una secuencia de aminoácidos |
− | + | % hidrofóbicos o polares, determinar la estructura espacial (en 2D) que | |
+ | % maximiza los enlaces hidrofóbicos. | ||
% | % | ||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | ||
Línea 70: | Línea 71: | ||
%% Parte 6: Optimización. --opt-mode=optN | %% Parte 6: Optimización. --opt-mode=optN | ||
− | % Diremos que una pareja es energética si sus aminoácidos son h y son adyacentes sin ser consecutivos. | + | % Diremos que una pareja es energética si sus aminoácidos son h y son |
+ | % adyacentes sin ser consecutivos. | ||
epair(I,J) :- prot(I,h), prot(J,h), next(I,J), I+2 < J. % 1 == (I-J) #mod 2 | epair(I,J) :- prot(I,h), prot(J,h), next(I,J), I+2 < J. % 1 == (I-J) #mod 2 | ||
Línea 82: | Línea 84: | ||
% :- {epair(I,J) : prot(I,A),prot(J,B)} k-1. | % :- {epair(I,J) : prot(I,A),prot(J,B)} k-1. | ||
+ | |||
</source> | </source> |
Revisión actual del 11:27 18 feb 2019
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Problema: Predicción de estructura de proteinas.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ulises Pastor Díaz.
% Lógica computacional.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Descripción del problema: Dada una secuencia de aminoácidos
% hidrofóbicos o polares, determinar la estructura espacial (en 2D) que
% maximiza los enlaces hidrofóbicos.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%% Parte 1: Determinar los dominios de la secuencia y del tablero.
%
% Tamaño.
size(N) :- N = #count{I : prot(I,J)}.
% Tablero.
board(1..2*N) :- size(N).
% Casillas.
range(X,Y) :- size(N), board(X), board(Y), |X-N| + |Y-N| <= N.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%% Parte 2: Generación de las posiciones.
%
% Primera y segunda posición.
sol(1,N,N) :- size(N).
sol(2,N,N+1) :- size(N).
% Generación del resto de posiciones.
1 {sol(I,X,Y) : range(X,Y)} 1 :- prot(I,Amino).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%% Parte 3: Restricciones geométricas.
% No podemos tener dos aminoácidos en la misma casilla.
:- prot(I,A), prot(J,B), I < J, sol(I,X,Y), sol(J,X,Y), range(X,Y).
% Adyacencia en el tablero.
next(I,J) :- prot(I,A), prot(J,B), I < J,
sol(I,X1,Y1), sol(J,X2,Y2),
range(X1,Y1), range(X2,Y2),
1 == |Y1-Y2|+|X1-X2|.
% Dos aminoácidos consecutivos son adyacentes.
:- prot(I,A), prot(J,B), I == J-1, not next(I,J).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%% Parte 5: Presentación:
#show sol/3.
#show epair/2.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%% Parte 6: Optimización. --opt-mode=optN
% Diremos que una pareja es energética si sus aminoácidos son h y son
% adyacentes sin ser consecutivos.
epair(I,J) :- prot(I,h), prot(J,h), next(I,J), I+2 < J. % 1 == (I-J) #mod 2
#maximize{1,I,J : epair(I,J)}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Parte 7: Problema de decisión.
% #const k=2.
% :- {epair(I,J) : prot(I,A),prot(J,B)} k-1.