Pull to refresh

Comments 48

Когда учился в институте делал свою игру, там была такая штука вроде руки робота, которая тянулась за игроком. Как я понимаю здесь что-то подобное — выбираются два звена цепи и притягиваются друг к другу. У меня для этого использовалась инверсная кинематика, возможно вам пригодится.
Да, это очень похоже на руки робота. А алгоритмы этой инверсной кинематики есть какие-то готовые, где их посмотреть можно?
Обычно в физических движках такое реализуют. Там же могут быть и примеры. Еще у меня брат на флеше рисует, часто пользуется такой штукой для анимации, правда там модель попроще.
Да, и главное, чтобы закрепить эту «руку» в двух точках — а двигались бы только звенья внутри этих точек. Инверсная кинематика это позволяет?
Теоретически иерархию можно закрепить в любых точках, соответственно зафиксированные звенья не просчитываются алгоритмом. Алгоритм итеративный, постепенно приближается к целевому значению в принципе основной принцип описан по ссылке в моем комментарии выше.

Пример можно во многих 3д редакторах посмотреть (например в блендере), обычно это один из алгоритмов движения костей. К сожалению свой код не нашел :(.
Жаль, что код не нашли. Тут вот в чем проблема — если в ходе итераций будут дергаться закрепленные концы, или изменяться длины звеньев и будут между звеньями не стыковки… то все это не годится. А как так провернуть с одной стороны с точки x, и чтобы произошло точное сглаживание до второй точки y — вот это я и не понимаю.
Основные не стыковки, как я понимаю, это самопересечения цепочки атомов?
Это то да. Но я о другом — в процессе итераций ведь могут шевелиться зазоры между звеньями — или не могут?
Расстояние между суставами всегда остается постоянным, при желании можно его сделать одном из степеней свободы, обычно оно фиксировано. Образно руки сами не растягиваются :).
Тогда за счет чего удерживаются закрепленные точки/суставы (пусть 9-е и 27-е звено)? Ведь это же не прямые расчеты, если повернули 18-е — как то нужно оставить недвижимыми и 9-е и 27-е. Как?
За счет углов поворота, т.н. степеней свободы. Если их недостаточно для достижения цели — она не будет достигнута. Что-то вроде этого:

image

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

Скажем поворачиваем 18-е звено. Закреплены 9-е и 27-е звено. Цель у нас приблизить звенья 14-е и 22-е. Тогда на участке 18-27 осуществляется прямая кинематика… но чтобы 27-е звено не сдвинулась, где то например, с 23-го звена нужно осуществлять обратную кинематику.

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

Ну и может есть что-то попроще?
Проще, для дуги можно угол распределить по всем звеньям, получим загогулину в нужную точку :).

Вообще если за ранее известны узлы между которыми могут образоваться водородные связи, например 14-22 на вашем изображении. Очевидно, что они соединяются цепочкой 15-16-...-20-21, свернув ее можно их соединить. При этом остальную часть в принципе можно не считать пусть висит как есть.

После того как первые два узла соединены весь сегменты 14-15-...-21-22 фиксируем и пробуем соединить узлы 13-23, так как сегмент уже фиксирован, будет гораздо проще это сделать.

Дальше можно поступить аналогично с кусками 12-24, 11-25 и т.д. пока все не свернется. Не исключено что я каких-то еще ограничений не понимаю.
Ага, я практически так и делаю. Проблема в том, что если вы фиксирует петлю 15, 16, 17, 18, 19, 20, 21, и образовали связи 14-22, и даже 13-23, то при образовании следующих с 12-24, окажется что образовать ее нельзя. Т.к. петля немного не такая. И так 1000 раз на дню.

Поэтому я вот и думаю нельзя ли как то наоборот при уже закрепленных более дальних связях подкорректировать петлю так, чтобы связи не распались после это корректировки.
Даже при закрепленных узлах 13-23, у нас остаются как минимум 2 (на двумерной картинке) степени свободы в узлах 13 и 23, за счет которых мы можем подобрать необходимое расстояние для связи 12-24.

Скорее всего я что-то не понимаю, можете объяснить по этой картинке как петля может быть не такой?
Ну там все сложнее же, каждый узел это нуклеотид — он состоит из около 30 атомов, которые неким образом связаны. Вращаться можно только по 6 торсионным углам (я писал в прошлых статьях). поэтому степеней то там хватает с одной стороны — их много больше 2-х. Но этого не достаточно, чтобы образовалась водородная связь. Например, предыдущая связь зафиксировалась так, что не позволяет дотянуться атомам друг до друга, что нужно для образования следующей связи. И это еще ничего. Но далее может оказаться, по стеку дальше, что и еще предыдущая связь x1 не позволяет занять текущей связи x2 стать в такое положение чтобы образовалась следующая связь x3 (хотя эти две x1 и x2 образуются). И еще дальше там уже петля и пока она не примет нужную форму не смогут образоваться все водородные связи.
Кажется понял, попытался представить как это выглядит — не получилось. Можно использовать целевую функцию с несколькими атомами вроде (13-23) + (12-24), опять же как бы я решал задачу с рукой робота, будь там множество степеней свободы.

В описанном случае действительно если закрепленная петля не позволяет дотянуться до атома, скорее всего означает то что ее нельзя закреплять. Возможно «мягко» закрепить, то есть она будет двигаться но не так активно как незакрепленная часть.

Хотя опять же допускаю возможность такой комбинации поворотов, что без полного переворота всей петли будет невозможно дотянуться до некоторого атома. При переборе углов очевидно оптимальное расположение будет найдено, итеративно скорее всего — нет. Можно придумывать различные точки отката, скорее всего это не то что нужно. Выстроить сразу правильную петлю не думаю что получится, разве что методом Монте-Карло из различных начальных положений сворачивать (опять же нет гарантии правильности решения).

Лирическое отступление: мне кажется в природе в любом случае они сворачиваются из изначальной структуры под действием некоторых сил, стремясь образовать водородные связи и каким-то образом расположиться в пространстве. Мне все же кажется — это больше итеративный подход, нежели перебор всех углов с отсечением.
Проблему Вы поняли. Будем думать как решать. Со спиралью то я справляюсь за пару дней… но те же проблемы, только в большем масштабе при соединении двух спиралей L1+L2 (но это я позже напишу статейку еще)
Кстати, в первой части — есть рисунок спирали 3d — там все видно.
«Возможно «мягко» закрепить, то есть она будет двигаться но не так активно как незакрепленная часть.»

Кстати, именно это и обеспечивает указанная в статье функция пригодности (на слайде)
Похоже я использую то, что называется прямой кинематикой… только вот никаких сил и т.п. там нет, сплошные повороты по углам… вот и хотелось бы не вводить никаких виртуальных сил, и решать задачу только в терминах поворотов по углам.
Образно силы — это те же целевые функции, которые формируют водородные связи. Просто по ссылке это в физических терминах описано.
>Тогда приходится менять коэффициент сжатия, так или иначе разрывать связи и повторять процесс. Это уже делается в ручную, и автоматизировать невозможно.

Т.е. ваш метод поиска не работает? Ну значит имеет смысл применять более сильные методы которые выходят из локальных минимумов.
Таких методов еще не существует :)
И если серьезно. Дело совершенно не в методах. Все методы, которые якобы выходят из локальных минимумов — на самом деле выходят в произвольном направлении. В статье Ограничение оптимизирующих методов в играх с противником и без я показал, что энергетическая поверхность существенно меняется после каждого хода, т.е. в нашем случае после каждого фиксирования поворота. Поэтому только кажется, что выскакиваешь из минимума. Но на самом деле, с 99% вероятностью попадаешь просто в другой минимум, который для прошлого состояния может быть даже худшим чем был. И крутишься постоянно возле средних значений без шанса пойти против законов вероятности. Я цепь РНК имеет такой свойство, сворачиваться на каждом шагу не статистически по вероятности, а фиксируя свои связи так, чтобы следующий шаг мал наименее статистически вероятен.

Это все проверенно, а не просто мои рассуждения. А не понимание этого — и ведет к тому, что задача не решается по сей день.

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

Вот это я и сделал в 4 части. Здесь ситуация усложнилась, я снова уточнил целевую функцию. Да, есть некоторые проблемки — но это существенно лучше чем все альтернативное.

Важно при этом понимать, что целевая функция меняется, так же как и цели в шахматах — вначале там надо сделать одно, потом другое, и только потом гоняться за королем. Так и здесь. А погоня за супер пупер методом — не дает решения, т.к. нельзя решить задачу в которой цели постоянно меняются а действовать все равно однообразно.
И нет, мой метод работает. Дело только в том, что не все шаги можно автоматизировать — это разные вещи. Но это путь к тому, чтобы ЦЕЛЕНАПРАВЛЕННО понимать по каким законам сворачивается РНК, или точнее по каким вычислительным законам ее надо конструировать.
Попробую проиллюстрировать сказанное. Вот над чем сейчас работаю. Видите три нуклеотида, два с одной стороны а третий должен соединиться с ними обеими. С одной стороны соединился, теперь проворачивается ко второму. Но посмотрите какое напряжение у все цепи — это идет против всех законов статистической вероятности. По вероятности легче соединится как раз наоборот (т.е. тот что уже образовал водородные связи, наоборот с тем где пока нет), и даже с другой стороны этой спирали.

В большем масштабе

Вы тестировали ваше решение на реальной задаче, или просто разбираете теорию на данный момент?
А это по вашему не реальная задача? Я же сворачиваю вполне реальный рибозим :)
Или вы думаете, это я рассуждаю без экспериментов in silico?
Да, и кстати, все что я пишу — это не классическая теория. Это все мои соображения как нужно решать эту задачу. А соображения сформировались под действием экспериментов in silico, а не я сел и придумал :)
По поводу того, что это не классическая теория я понял. Просто я пытаюсь найти этот «рибозим» в PDB и не нахожу.
Он еще не изучен. Есть только первичная последовательность. Это вироидный рибозим NC_003540

см. в NCBI
Не подумай-те что это какой-то суровый поклеп, мне действительно интересно то, что выделаете, но на мой взгляд изучать фолдинг РНК для неизвестной структуры не имеет большого смысла, т.к. результат не с чем сравнить. Если бы работы базировались на реальной структуре то было бы значительно больше практической пользы, если таковую вы закладываете.

891 структура РНК в PDB
www.rcsb.org/pdb/results/results.do?outformat=&qrid=C08D4559&tabtoshow=Current
Это сделано намерено. Рибозимы имеют одинаковую базовую структуру, точнее то из-за чего их выделяют в один класс. Для сравнения я использую другой реально имеющийся рибозим 2QUS. Мне потом важно увидеть в чем отличия, а в чем похожесть.
Теперь понятно, вы взяли периодические структуры, и вироид имеет тоже консерваативную структуру.
Да, только эта консервативная структура очень маленькая, базируется возле кольца (между спиралями L1, L2, и спиралью на концах). Ну и есть у меня еще одна надежда, понять почему он саморазрезается, но не биологически, а так сказать с геометрическо-кибернетической точки зрения.
Ну, и потом мы можем по разному понимать «практическую пользу» :) В чем она по вашему?
Практическая польза с моей точки зрения — моделирование рибозом и РНК с неизвестной 3D структурой.
Ну вот видите я этим и занимаюсь :)
Но те не менее, мне не важен такой практический результат. Мне важно получить некоторые законы по которым нужно сворачивать вообще любые РНК. Пусть они будут не до конца правильными, но хотелось бы чтобы они целенаправленно, а не стохастическим поиском, давали результат.
Организм Chrysanthemum chlorotic mottle viroid
И еще картинка. Тут замечательное состояние образованы обе спирали, и все межспиральные водородные связи (подробнее буду рассказывать в следующих статьях). Потратил я на это более 3 месяцев. Это к тому какой глубокий может быть поиск в глубину. И по функции пригодности просто замечательные результаты. Видим в кружке как хорошо стыковались межспиральные водородные связи два нуклеотида одной спираль с одним другого (44-15-20).

Но один минус :) — так в природе рибозим не сворачивается. Я уже думал можно перейти к заключительной части закрутить концы рибозима в спираль (начиная со связей 7-55). Но они в таком положении не могут достать друг до друга 7 и 55 стали столь далеко, что не достают друг до друга, чтобы образовать связь. Начал искать в чем же проблема? А оказалось, что связь 44-15-20 образовалась с другой стороны. И любой метод дал бы то же самое. И почему? Да, потому что наконец оказалось, что взаимодействий ТОЛЬКО водородных связей мало — надо учитывать еще и другие взаимоотношения. Т.е. по сути я ответил на поставленный вопрос «как пойдет ход сворачивания, если РНК будет стремиться только к образованию водородных связей?». Ответ ниже.

И это же означает, что та безобразная еще не свернутая спираль на рисунках выше — более близка к природному состоянию, чем так которая получилась из не достаточно точной целевой функции. Теперь я надеюсь понятно почему я усложняю и эксперементирую с методами, а пытаюсь понять каким законам подчиняется сворачивание, через вывод закона в целевой функции. Да во много это ручной труд, а не автоматизированный. Но это приближает нас к пониманию того как сворачивается РНК. А не просто к получению среднее статистического результата.

Да, забыл сказать, стрелкой показано, куда нужно переместить участок главной цепи. Т.е. спираль нужно перевернуть, и образовать межспиральные связи с другой стороны. Но из этого состояния — этого уже никогда не случится.
Sign up to leave a comment.

Articles