Virtual Laboratory Wiki
Advertisement

Внимание Внимание: Открытый исследовательский проект, к которому может присоединится каждый ...

Эта статья часть материалов: лаборатории Биоинформатика


RNAFoldingAI - программное обеспечение молекулярного моделирования РНК, с элементами искусственного интеллекта. Разрабатывается участниками Викиверситета для проведения исследований в трех направлениях: геномика, искусственный интеллект, гибкое программное обеспечение высокого качества.

Все авторские права самого программного обеспечения принадлежат основателю проекта Сергею Яковлеву, но участникам проекта программное обеспечение может быть предоставлено для реализации научных и образовательных целей.


Ревизии

Программное обеспечение находится в процессе разработки поэтому его описание будет появляться практически в интерактивном режиме.


Исходники данного ПО находятся в репозитории SVN, т.е. используется контроль версий. Для ознакомления список ревизий можно посмотреть здесь Далее следует список ревизий относящихся к данному проекту:

  1. №22 - Первая черновая версия проекта RNAFoldingAI. Создает .pdb файл стартового состояния по первичной структуре РНК.
  2. №23 - Черновая версия модуля RNARotate „Вращение 3-х мерной цепи РНК“
  3. №24 - Черновая версия модуля RNAEnergyСalc „Расчет энергетических характеристик РНК“
  4. №25 - Черновая версия модуля FoldingSearchRnd „Поиск структуры с минимальной оценкой энергии цепи случайным перебором“.
  • Итого на данный момент выполнен реинжиниринг РНК расчетов из ПО Rosseta. Функциональность воспроизведена, но требует тестирования. Можно начинать думать об архитектуре и написании модуля ИИ. Но уже сейчас можно отметить улучшение ряда архитектурных решений: ПО разделено на предметные модули, убраны лишние ненужные связи между классами.

Причины создания

Предметные причины создания описываются в статье «Геномика бросает вызов искусственному интеллекту». Здесь же мы рассмотрим причины только с точки зрения создания нового программного обеспечения RNAFoldingAI 0.1.

При написании данного ПО, был исследован исходных код ПО Rosetta 2.3 (см. Молекулярное моделирование), который написан преимущественно на Си++ с элементами Фортрана и при этом ориентирован на ОС Linux, и дальнейшее его развитие пошло исключительно для ОС Linux. При ближайшем рассмотрении оказалось:

  1. Архитектурное качество ПО Rosetta 2.3 находится на очень низком уровне
  2. Смешан объектно-ориентированный и процедурный стиль, часто используются глобальные переменные
  3. Использование Си++ утяжеляет программные конструкции
  4. Использование Фортрана сильно затрудняет процесс отладки (debug`ing)
  5. Объем кода большой и он не может быть поделен на предметные части, все смысловые части сильно переплетены между собой

Поэтому дальнейшее развитие данного ПО невозможно. Но при всех этих недостатках данное приложение обладает одним несомненным преимуществом - оно работает и проверенно людьми с био-образованием. Кроме того, наверное, это одно из лучших ПО имеющегося на данный момент.

Планы

Поэтому было решено полностью переписать данное ПО, а точнее создать заново на современном языке C#. Но при этом как в плане изучения, так и тестирования ориентироваться на функциональность ПО Rosetta 2.3. При этом, первейшей задачей является создание пяти независимых модулей:

  1. Формирование 3-х мерной цепи РНК по ее первичной структуре Шаблон:Сделано
  2. Вращение 3-х мерной цепи РНК Шаблон:Сделано
  3. Расчет энергетических характеристик РНК Шаблон:Сделано
  4. Поиск структуры с минимальной оценкой энергии цепи случайным перебором Шаблон:Сделано
  5. Поиск структуры с минимальной оценкой энергии цепи применяя методы ИИ

В дальнейшем они могут быть расширены и для экспериментов с ДНК и белками.

Описание функциональности

Модуль RNACreate „Формирование 3-х мерной цепи РНК по ее первичной структуре“

Входные, выходные данные

Считывает файл с расширением .seq, содержащий первичную структуру РНК.

На выходе формирует два файла: промежуточный выходной файл с расширением .out и файл 3-х мерного расположения молекулы с расширением .pdb (стандартный файл, который можно просмотреть программами визуализации молекулярной структуры, например, VMD).

В заголовке файла .out приводится последовательность цепи. Далее следуют две строки SCORE - описание и значения энергетических характеристик РНК - они рассчитываются модулем RNAEnergyСalc и описаны ниже.

Далее для каждого нуклеотида приводятся 10 углов базовых атомов нуклеотида и координаты x, y, z нуклеотида. Дополнительные предметные детали см. Энергия связей аденин-урацил в РНК.

Основное содержимое .pdb файла это координаты x, y, z всех атомов цепи.

Формирование цепи

  1. Рассчитать координаты x, y, z каждого атома системы
  2. Построить дерево связанных атомов
  3. Рассчитать углы phi, theta, d для каждого атома системы

Модуль RNARotate „Вращение 3-х мерной цепи РНК“

  1. Сформировать множество потенциально возможных поворотов для n (=3, но может быть упрощенно =1) нуклеотидов
  2. Повернуть 9 атомов n нуклеотидов на угол phi
  3. На основе измененных углов пересчитать координаты x, y, z атомов системы

Модуль RNAEnergyСalc „Расчет энергетических характеристик РНК“

В оценке энергии цепи РНК участвуют следующие составляющие:

SCORE = (VDW + RG) + (RNA_BS + RNA_BP_W + RNA_BP_H + RNA_BP_S) + (RNA_NONB + RNA_O2ST + RNA_PHOS) + (RNA_AXIS*0.2 + RNA_STAG)

Модуль FoldingSearchRnd „Поиск структуры с минимальной оценкой энергии цепи случайным перебором“

  1. Установить начальное значение BestScore = LowScore = CurrentScore равным первому значению оценки энергии
  2. На основе оценки энергии и случайных поворотов отобрать лучшею позицию
    1. Если CurrentScore > BestScore
      1. Расчитать некоторой уровень возможности Probability такого поворота
      2. Если случайное число R > Probability, то отклонить такой поворот (rejected) и закончить
      3. Иначе, условно принять (accepted by chance)
    2. Если CurrentScore < LowScore
      1. Найден правильный поворот в траектории сворачивания, записать BestScore = LowScore = CurrentScore
      2. Иначе (CurrentScore > LowScore and CurrentScore < BestScore) поворот принять, но не считать удовлетворительным (accepted), записать BestScore = CurrentScore
    3. Случайно выбрать следующею позицию и вид поворота, рассчитать оценку энергии, перейти к пункту 2.1

Модуль FoldingSearchAI „Поиск структуры с минимальной оценкой энергии цепи применяя методы ИИ“

Постановка задачи в терминах Q-learning

В качестве агента будет выступать собственно цепь РНК. Средой для агента будет энергетическая поверхность окружающая цепь РНК и формирующая ее 3-х мерную поверхность.

Действием агента будем считать все возможные повороты элементов цепи, а вознаграждением от среды значение оценки энергии этой цепи.

Действие определяется двумя числами: (1) выбранной позицией - нуклеотид который поворачивается и (2) идентификатором поворота - определяет 9 углов поворота с последующим пересчетом позиций атомов нуклеотида. Тогда множество доступных агенту действий - это открытое множество не запрещенных для выбранной позиции поворотов. Учитывая, что действие не задается простым перечислением, оно должно быть реализовано, в отличии от классического версии, динамическим массивом. Элементами массива, будет объект действие (а не просто число), характеризующийся рядом параметров - в данном случае двумя позиция и идентификатор поворота.

Теперь нам нужно построить модель среды. Для этого нужно оценить множество состояний в котором может находится агент, и которое среда должна для него обеспечить. Тут возможны варианты, рассмотрим их по отдельности.

Состояния на базе статического определения. В данном случае состояние определяется энергией цепи. А энергия цепи определяется положением всех нуклеотидов. Например, в примере выше, определяется следующими числами:

0 - 332 // читается как положение начального (нулевого) нуклеотида в цепи в положении 332
1 - 993 
2 - 1858
3 - 2271

и такое положение однозначно определяется значением энергии равной -1.39 .

Множество возможных положений не превышает 3000. Но множество состояний, в таком случае, зависит от длины цепи. Число состояний можно оценить как , где n - длина цепи, а k - число возможных положений. То есть в нашем примере - огромное число состояний для нашей маленькой цепи. Нам же нужно исследовать как минимум цепи с длиной около 100 нуклеотидов, т.е. с числом состояний . Конечно многие из них вырожденные, но какие именно это еще нужно выяснить.

Но главное, даже не это. Посмотрим стратегию чего мы находим при такой постановке? Стратегия будет основываться на поиске только конечного энергетического состояния цепи. Казалось бы именно это нам и нужно. Но в таком случае, все наши исследования будут ограничены сферой применения только для данной конкретно выбранной цепи, и их никак нельзя будет распространить на другую цепь. Любое мельчайшее изменение в первичной структуре цепи, кардинальным образом изменит энергетическую поверхность, и найденная нами стратегия, ориентированная на конечное состояние будет непригодна в другой образованной поверхности.

Поэтому от такого способа мы должны отказаться и рассмотреть другой способ задания множества состояний.


Состояния на базе динамического определения.

Описание архитектуры ПО

Advertisement