DNA-computing

湧源アドベントカレンダーに参加しています。

https://qiita.com/advent-calendar/2019/yugen

Qittaはどうやら情報系のサイトらしいので、「私の好きなもの×情報系」を考えました。その結果、DNA computingという語句を思いついたので、調べてみました。

DNA computingに期待されること

DNAの優秀な点は、小さなスペースに大量のデータを詰め込める可能性をもつことだと思います。DNA1本に対して(明記されてないがおそらく最大25塩基長)1文字の情報を割り当てたとしても、1mLの溶液中に6千万GBの記憶容量を持たせられるそうです。また、並列性もDNAの優秀な点です。この後ろに実例を示しますが、複数の処理を同時に行うことができます。

実例その1

まず、DNA-computingの元祖と呼ばれる成果を紹介します。Leonard M. Adleman氏が、1994年にScienceで発表した手法です。 

Molecular computation of solutions to combinatorial problems | Science

この論文では、7つの点とそれを結ぶ14個の矢印からなるグラフについて、すべての点を一度だけ通るパスを、DNA-computingにより見つけています。具体的な方法を説明します。下の図は、4つの点とそれを結ぶ6つの矢印のグラフについて、同様に解く方法を示したものです。

 

f:id:unyu39:20191208162123p:plain

巡回セールスマン問題をDNAで解く

点(city)に対して、8塩基対からなるDNAを割り当て用意します。(用意するのは図のcomplementつまり相補鎖と書いてある方です。) また、矢印(flight)に対して、始点となる点の後半4塩基と、終点となる点の前半4塩基に結合できるような配列を用意します。

これら全てと、リガーゼという二本鎖DNAの片側が1か所切れた部分をつなげる酵素を、水中で混ぜると、DNAが互い違いに組み合って二重らせんを形成します。これを、リガーゼできちんとつなげます(このままだと8塩基ごとにリン酸ジエステル結合がないDNAになっているので)。この段階で、一筆書きで行ける経路を表すたくさんの配列ができます。

このままでは、始点がこの点で終点はこの点、という条件を満たさないので、次の増幅の段階で工夫をします。増幅(PCR)には、プライマーと呼ばれる「この配列から増幅する」ということを示す短いDNAが必要になります。なので、プライマーとして始点にしたい点と終点にしたい点の配列に揃えた2つを使うことで、始点と終点を定めることができます。このままでは、始点だけ正しい配列と、終点だけ正しい配列もできてしまいますが、両方正しい配列の方ができる速度が速い(両方のプライマーから増幅されるので)ため、増幅量が増えて飽和する前にPCRを止めることで、目的配列が大半を占める集団をとってくることができます。

最後に、得られた集団の配列を精製したのちに、増幅収率が高い配列をシークエンサーで読み取れば、答えが得られます。

http://152.2.128.56/~montek/teaching/Comp790-Fall11/Home/Home_files/Adleman-ScAm94.pdf

 


実例その2

その2として、DNAでinputやoutputを表現し、論理ゲートを作る例を紹介します。いろいろありますが、ANDゲートを作った例を紹介しようと思います。

https://pubs.acs.org/doi/abs/10.1021/acssynbio.7b00101

2本のDNAで、(1,1)=(短いDNA有り,長いDNA有り)というinputを表現します。outputは、0=RNAが出てこない、1=RNAが出てくる、です。ANDゲートなので、2種類のDNA両方が入力されたときだけ、RNAが出力されます。


inputのDNAは、水溶液中で、template DNAとT7RPという名前のDNAからRNAを作る酵素と共存させます。

template DNAは図の黄色で描かれた構造をしています。そして、図(d)のようにinputのDNAと2本鎖を作ることができます。

T7RPという酵素は、DNAの決まった配列かつ2本鎖の部分にのみ結合ができ、また結合できて初めてRNAを作ります。

Template DNAの1本鎖と2本鎖の境目に、T7RPの結合できる配列があるので、dのようにinputのDNAが2本鎖を組まなければ、RNAは作られない、という仕組みです。

bの(0,1)のときは、長いDNAがtemplateと2本鎖を組んでもよい気がしますが、自分の中で2本鎖を形成しているときは、端から引き離されない限りは、べつのDNAと2本鎖を組もうと思わないので、templateにくっつけません。(短いDNAとくっつく側は、長いDNAの端が2塩基だけ余っているのでくっつけます。)といいつつ、少しは長いDNAがtemplate DNAにくっついてしまうので、RNAの出力量で0というより0.2くらいのoutputを示してしまうようです。outputが1とはちゃんと区別できる程度の誤出力なので、許容というところでしょうか。

ちなみに、outputの検出は、ナノポアにRNAが近づいたときに生じる膜電位の変化で行っています。

この例では、RNAがoutputされた後に次の論理ゲートに入れることができないので、論理回路を組むことはできませんが、論理ゲートの実装という意味はあると思います。ほかにも、2本鎖を組む組まないの検出方法の違いから、NANDゲートの実装などが行われています。

まとめ

DNA-computing自体は、この記事を書こうと思って調べた付け焼刃な知識なので、もっと紹介するにふさわしい話があるかもしれないです。

とりあえず、DNAでおもしろいことができそう、ということが伝わるといいなと思います。