DNAComputer

FrontPage|FindPage|TitleIndex|RecentChanges| UserPreferences P RSS
DNA 컴퓨터는 기존 컴퓨터의 이진법을 DNA를 구성하는 아데닌(A), 사이토신(C), 구아닌(G), 타이민(T) 등 네 가지 요소로 바꾼 뒤 문제를 지닌 길다란 DNA 가닥 하나와 해답을 지닌 짧은 DNA 가닥들을 만들어 나가는 방식으로 만들어진다.

2001년 11월자 네이쳐에는 [http]와이즈만 연구소 에서 연구한 DNAComputer에 관한 연구가 실렸다. [http]Programmable and autonomous computing machine made of biomolecules

논문원문은 김우재에게 있습니다. 관심있으신분은 메일주시면 보내드리겠습니다.



김우재의 부족한 컴퓨터지식으로는 정확한 원리가 이해가 안됩니다. 논문 보내드릴테니 간단하게 소개 해주실 수 있는 유능한 프로그래머 계십니까?

오류의 위험이 있기는 하지만 이번 달 과학동아에 아주 쉽게 설명되어 있더군요. TSP를 DNAComputer로 푸는 예를 서울, 대구, 대전, 부산(기억이 맞다면) 네 도시와 그 사이를 다니는 버스로 간략화 해서 DNAComputer가 해를 어떻게 구하는지 설명합니다.

논문 좀 보내주세요. 근데 사실 DNAComputer는 공학자가 이해하기가 쉽지 않을 걸요. 오히려 생물학자들이 이해하기가 더 나을 거 같아요. 기본적인 아이디어는 time complexity 를 space complexity 로 바꾸었다는 것이고, 그 방법은 바로 DNA 를 사용하였다는 것입니다. 1994년 science 지였나? 처음에는 TSP로 소개되었고, 후에 Maximal clique, 체스... 뭐 몇몇 논문이 나왔지만, 시험관에서의 DNA 반응의 한계가 역시 존재한다는 점에서 조금 시들해졌다고 할까? 시험관 크기가 e-tube 크기가 아니라 비이커만하면 균일한 반응이 일어날 수가 없잖아요. 네이쳐에 실렸으면 뭔가 획기적인 전기가 있었던 것일지 궁금하군요. 가능하면 읽어보고 제가 설명할 수 있는 부분이 있음 올릴께요. 부탁. ^^ --지상은


이 논문의 특징은 DNAComputer를 프로그래밍 할 수 있도록 했다는 점에 있는 것 같습니다. DNAComputer 가 이제까지는 초기 컴퓨터들처럼 프로그래밍이 가능하지 않은 구조였던데 비해서, 이것은 범용으로 쓸 수 있다는 얘기가 되지 않을까 싶습니다.

이 논문의 아이디어는 software 와 input을 double strand DNA 로 하면서, software molecule들, 즉 finite state automata에서 각각 transition을 선택할 수 있도록 하였습니다. 그것이 프로그램을 바꿔주는 효과를 내게 하죠.

하지만 이 논문에서도 역시 극복 못한 근본적인 한계가 있습니다. DNAcomputer 는 time complexity를 space complexity 로 바꾸는 것에 불과하기 때문에, 계산해야 하는 복잡성이 작을 때는 돌아가지만, 복잡성이 증가하면, 역시 한계를 드러낼 수 밖에 없습니다. DNA 같은 biomolecule 들이 균일한 반응을 일으키기 위해서는 충분히 섞일 수 있을 정도의 작은 space에서 반응이 이루어져야 하는데, space 역시 exponential 하게, 즉, 10^2, 10^3, 10^4... 10^100... 이런 식으로 증가할 수는 없기 때문에, 역시 complexity 가 exponential 하게 증가하는 NP problem을 해결할 수 있는 방법이 되지는 못한다는 것이 현재까지의 견해입니다.

이 논문에서는 예를 들어 "abaaba" 라는 어떤 sequence를 어떤 소프트웨어(프로그램), 다시 말해서 어떤 finite state automata 에서 만들 수 있는지 없는지와, 만들 수 있다면 최종 state 가 S0 인지, S1인지를 알려 줍니다.

일단 Figure 1에서 보는바와 같이 소프트웨어(finite state automata)가 A1-A7 까지 7가지가 있습니다. 그리고 그 각각의 finite state automata에서 transition 은 8개가 됩니다. S0에서 S1 으로 가는 것과, S1에서 S0으로 가는 것 합하면 2개, S0, S1 이 스스로 도는 것 2개, 거기다가 a, b를 만드는 것 2개 해서 2*2*2 모두 곱하면 8가지의 transition 이 나오죠.

Transition molecule 은 Figure 2-a 에서 보는 것처럼 만듭니다. 공통적으로 FokI 이라는 제한효소로 인지되는 부분이 있고, sticky end 는 어떤 state 에서 어떤 state에서 가는지와 a를 만드느냐 b를 만드느냐에 따라 약간씩 다르게 만듭니다. 중요한 것은 FokI 이 인지하는 부분과 자르는 부분에 차이가 있다는 것입니다. 옆으로 한참 가서 자르는 특성을 사용하는 것입니다.

Input molecule 은 우리가 생성하고자 하는 "abaaba" 같은 sequence입니다. Figure 2-b 에서는 앞부분이 "ab" 로 시작하는 sequence 이죠. "ab" 의 앞부분은 어차피 떨어져 나갈 부분으로 일종의 Begin state 에 해당한다고 보시면 됩니다. 디자인을 그렇게 한 거죠.

Symbol 과 state 는 Figure 2-c에서 보는 것과 같이 만듭니다.

이제 Figure 2-d의 mechanism을 보시죠. 맨 처음에 input molecule을 FokI 으로 짤라 버립니다. Begin state 떨어져 나가고, 그 다음에 input molecule 의 "a" 부분이 노출되게 됩니다. 그 다음에는 ligation을 시키는 거죠. A1 - A7에 해당하는 프로그램 종류에 따라서 transition molecule 들을 넣는 조합이 다르겠지만, 일단 transition T1이 있으면 당연히 T1이 달라붙습니다. 다른 건 상보적이지 않아서 붙지를 않습니다.

그 다음에 또 자릅니다. 이번에는 새로 붙은 T1 의 FokI 부위가 인지되어서, 한참 오른쪽의 부분이 짤리니까, input molecule 의 "b" 부분이 노출되게 됩니다. 이런 식으로 계속 반복하다 보면... 결국은 최종적으로 a 나 b 같은 sequence 들은 아무것도 안 남게 됩니다. 그리고 맨 마지막 그림에서 볼 수 있듯이, output reporter를 보면 맨 마지막에 끝나는 state 가 S0 인지 S1인지 알 수 있습니다. 이것이 프로그램이 끝까지 수행될 때 나오는 결과물이고, 만약 S1 이건 S0이건 이것이 나오지 않는다면, 그건 그 프로그램으로는 input sequence를 만들 수 없다는 얘기가 됩니다.

실제 실험 결과가 Figure 3 의 전기영동 결과로 display 됩니다. Figure 3-a 에 보면 sequence "aa" "aba" "aabb" 는 프로그램 A1 이 generation 할 수 있다는 의미이고, 최종 종료되는 state 는 각각 S0, S1, S0 임을 알 수 있습니다. 조금 더 가면, 프로그램 A2에서 "aabb" 는 생성할 수 없음을 알 수 있습니다.

논문에는 parallel computation 과 non-deterministic computation 등 몇가지 더 있는데, 결국 위 개념의 확장판에 불과하다고 보여집니다.

컴파일러 공부하다가 생각이 든건데, 이게 지금 어떤 모델에서 어떤 sequence 가 생성(production) 되는지를 FiniteStateAutomata 로 본 거거든요. TransformationalGrammar 중에서 Regular Grammar 로 lexical analysis 한 거죠. 그럼 사람들이 다음 단계는 뭘 생각할까요? 당연히 Context Free Grammar 로 syntax analysis 하는게 되겠죠. 이건 순차적으로 반응이 일어나서는 안되고, 떨어진 곳끼리 상호작용을 해야하기 때문에 훨씬 복잡할 걸로 생각되지만, DNA 가 실제로 그렇게 작동을 하잖아요. 방법은 당연히 있을테지만, 시험관안에서 어떻게 만드느냐의 디자인 문제일 것 같군요. 관심 있으신 분은 생각해 보세요. 이거 처음으로 해낼수만 있다면, Science 나 Nature 에 논문 실을 수 있습니다.

디자인도 문제겠지만, '시험관안'이라는 공간의 문제도 상당히 크죠?
물론입니다. 균일한 반응이 일어날 수 있는 space 의 한계를 고려한 디자인이 필요하죠. ^^
space complexity가 허용하는 한계 내의 문제 중에 얼마나 실질적인 문제가 적용될 수 있을지가 항상 의문입니다. :)


See also TuringMachine


"; if (isset($options[timer])) print $menu.$banner."
".$options[timer]->Write()."
"; else print $menu.$banner."
".$timer; ?> # # ?>