Re[3]: Оптимизационная задача в комбинаторике
От: Chorkov Россия  
Дата: 11.06.24 15:04
Оценка:
Здравствуйте, Khimik, Вы писали:

K>Здравствуйте, Sinclair, Вы писали:


S>>Берём из коробки H, получаем C6H6, свободных связей нет, атомов в коробке нет. Задача решена.


K>Перегруппировочные ионы в масс-спектре — это ионы с новыми связями, которые успели образоваться после ионизации молекулы. Например формула бензола C6H6 показана на рисунке в предыдущем посте, и если отсеивать перегруппировочные ионы, то можно получить C6H4, C6H3, но нельзя CH3.


Но есть изомер C6H6 (не бензол), у которого осколок CH3 возможен: CH3-CH=CH-CH=C=CH2
Re[3]: Оптимизационная задача в комбинаторике
От: Khimik  
Дата: 11.06.24 16:54
Оценка:
Здравствуйте, kov_serg, Вы писали:

K>>Пока у меня есть идея, как сделать алгоритм для линейных алканов:

_>У вас атом развывают чем? Если его обстреливают. То имеет смысла так осколки и строить по томуже принципу а не все подряд. Попали в атом, он получил энергию достаточную что бы разорвать связи и улететь вместе с ближайшим окружением, т.е. порвать наиболее слабые связи. Далее имея некое распределение вероятностей осколков вы можете их комбинировать в более сложные конструкции, при этом приписывая им вероятность на основе вероятностей составных частей. Нафига перебирать конфигурации с около нулевой вероятностью

Да, я тут разбираюсь в теме и честно говоря мой изначальный вопрос про алгоритмы, возможно, уже не актуален. Мои вопросы надо задавать химикам а не программистам, но я всё-таки тут напишу их, может кому интересно.
Наверно да мне надо в исходной задаче брать не брутто-формулу, а структуру молекулы (набор атомов и связей между ними), и оценивать как она развалится при обстреле электронами. Мне сказали что перегруппировочные ионы бывают достаточно часто, и надо выяснить наиболее вероятные пути их образования. Слышал что есть изученные виды перегруппировок, в частности перегруппировка Маклаферти и миграция двойной связи, буду это разбирать. И мне показалось что есть какой-то общий механизм перегруппировок, который заключается в том, что из молекулы выбиваются отдельные связи и дальше всё разлетается или рекомбинирует.
Возьмём эту молекулу:



Я сейчас полагаю, что надо сделать такой алгоритм: перебрать в молекуле все пары (вариант — тройки) связей, которые мы удаляем, и смотреть осколки и их комбинации. Для этой молекулы, если удалить связи например C1-C10 и C4-C20, образуются три фрагмента, которые являются радикалами и могут перекомбинироваться, итого имеем такие варианты осколочных ионов:







Буду разбираться, насколько годится такой алгоритм. Тут можно много придумать, например указать что обычные связи могут рваться в количестве до трёх, а ароматические — только два, и так далее. Хорошо бы оценить прочность каждой связи в молекуле, методами квантовой химии это считать муторно, а может есть более простые подходы вроде анализа заселённостей связей (электронная плотность на связях и т.п.).
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Re: Оптимизационная задача в комбинаторике
От: barrett Россия  
Дата: 11.06.24 21:12
Оценка:
Здравствуйте, Khimik, Вы писали:

K>Продолжение этой темы
Автор: Khimik
Дата: 09.06 17:02
. Есть брутто-формула молекулы, например C6H6. Нужно перебрать все осколки, и далее для каждого осколка перебрать все возможные связи в нём, чтобы проверить – можно ли расставить связи так, чтобы валентность водорода была всегда 1, а валентность углерода от 1 до 4. Т.е. c C6H6 можно сгенерировать осколок CH4 или H2, но нельзя CH5 или H3.

K>Я пока решил эту задачу в лоб. Для молекулы из n атомов строится массив n*(n-1)/2 – все возможные пары атомов. В массиве хранятся булевы значения, т.е. если true – значит эта связь есть. Программа перебирает все комбинации связей по алгоритму в теме по ссылке выше; если например в молекуле 10 атомов, то число возможных пар атомов будет 10*9/2=45, и число всех комбинаций 2^45. Для каждой комбинации программа проверяет текущую валентность всех атомов (попадает ли она в мои критерии). И даже для десятитомной молекулы ресурсов компьютера не хватает, чтобы всё перебрать.
K>Как оптимизировать этот алгоритм?

Я, как и большинство ответивших, не химик, но вижу здесь задачу на нагруженных графах. Возможно, стоит курить в этом направлении.
Узел — атом, ребро — межатомная связь и так далее. Думаю, если начать описывать задачу с этой стороны, то потом можно будет прикрутить
какое-либо существующее решение на графах.
Re[4]: Оптимизационная задача в комбинаторике
От: kov_serg Россия  
Дата: 11.06.24 22:00
Оценка:
Здравствуйте, Khimik, Вы писали:

K> Хорошо бы оценить прочность каждой связи в молекуле


https://files.nehudlit.ru/books/002/energii-razriva-himicheskih-sviazey-potentsiali-ionizatsii-i-srodstvo-k-elektronu.djvu
Re: Оптимизационная задача в комбинаторике
От: alpha21264 СССР  
Дата: 11.06.24 22:14
Оценка: 2 (1)
Здравствуйте, Khimik, Вы писали:

K>Продолжение этой темы
Автор: Khimik
Дата: 09.06 17:02
. Есть брутто-формула молекулы, например C6H6...


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

Течёт вода Кубань-реки куда велят большевики.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.