Re[4]: Перевод понимания из интуиции в логику
От: xma  
Дата: 22.11.20 16:18
Оценка:
Здравствуйте, xma, Вы писали:

xma>п.2.1.1) находить циклы при этом придётся отсечением тех многоугольников (возможно и невыпуклых) где внутри есть другие атомы, по координатам .. (другого решения сходу не видать)


не видать, потому что в общем случае не определить (только по "графу" и без координат) — пересекает ли цепочка связанных атомов — многоугольник (потенциальный цикл), по внутренней его области (тогда этот многоугольник — точно не цикл) или всё таки — с внешней стороны ..
Re[2]: Перевод понимания из интуиции в логику
От: TMU_2  
Дата: 22.11.20 17:13
Оценка:
A>Ув. Khimik! Именно этой проблемой занимается математика, в частности — алгебра. Алгебра позволяет вывести и зафиксировать *любые* закономерности в абстрактных символах.
A>Дилемма состоит в том, что большинство специалистов функционирует в своих областях (например, химия), не осознавая глубину доступных средств из соседних областей (математика).



Подозреваю, что ты хотел использовать слово "проблема", но дилемма звучит лучше, признаю.
Re[4]: Перевод понимания из интуиции в логику
От: Khimik  
Дата: 22.11.20 17:37
Оценка: 2 (1)
Здравствуйте, pagid, Вы писали:

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


K>>Дело в том что я упростил задачу — предложил определять вообще любые циклы. Такого вещества с 14-членным циклом конечно не существует, а вообще ароматические циклы могут быть разных размеров, например в азулене есть два смежных цикла из 5 и 7 атомов.

P>Забавно, о таких не знал.
P>Они могут только рядом быть и существую на пару? Или бывают одиночные варианты?

Если я ничего не путаю, пятичленные ароматические циклы не могут состоять только из атомов углерода, либо они могут быть в виде смежных циклов как в азулене.
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Re[8]: Перевод понимания из интуиции в логику
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 24.11.20 10:58
Оценка:
Здравствуйте, Khimik, Вы писали:

K>Я так и не понял, что вы привязались к этим сотам? Какая разница, все атомы цикла или не все входят в другие циклы?

Потомоу, что на второй картинке у тебя больше чем 4 цикла если не рассматривать циклы только из 6 вершин.
Sic luceat lux!
Re[9]: Перевод понимания из интуиции в логику
От: Khimik  
Дата: 24.11.20 12:48
Оценка:
Здравствуйте, Kernan, Вы писали:

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


K>>Я так и не понял, что вы привязались к этим сотам? Какая разница, все атомы цикла или не все входят в другие циклы?

K>Потомоу, что на второй картинке у тебя больше чем 4 цикла если не рассматривать циклы только из 6 вершин.

Ну это подразумевается условиями задачи — из вложенных друг в друга циклов оставлять самые маленькие.
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Re: Перевод понимания из интуиции в логику
От: gyraboo  
Дата: 24.11.20 13:11
Оценка:
Здравствуйте, Khimik, Вы писали:

K>У меня возникла такая задача: определить в молекуле все циклы (точнее, ароматические циклы). Молекула – это набор атомов с декартовыми координатами и связей между ними. Например в этой молекуле два цикла по 6 атомов:

...
K>Возникает вопрос: можно ли разработать эвристические приёмы, которые переводят “интуитивно-понятное” в “формализованно-понятное”? Например большой список универсальных вопросов.

Например можно найти специализированный инструмент или понятийный аппарат, в котором предметную область уже формализовали, и оперировать этими терминами и возможностями.
Например в случае с циклами: загрузить граф в специализированную графовую БД типа Neojj, и тогда можно оперировать циклами очень лаконично, например, поиск циклов тогда будет выглядеть всего 1-2 короткими строками на специализированном графовом языке:
https://stackoverflow.com/questions/34136944/detecting-short-cycles-in-neo4j-property-graph

Ну а если тебя интересует сам общий подход формализации, то можно посмотреть в сторону DSL и платформы для этого, например Jetbrains MPS.
Т.е. идея заключается в том, что ты сначала придумываешь язык, термины и понятия для той области, которую хочешь формализовать и понять (создаёшь язык DSL), а затем оперируешь этим языком для решения задач этой предметной области. Поэтому ищи и читай про практики создания DSL, чтобы увидеть такие эвристические приёмы.
Re[10]: Перевод понимания из интуиции в логику
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 24.11.20 13:27
Оценка:
Здравствуйте, Khimik, Вы писали:

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


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


K>>>Я так и не понял, что вы привязались к этим сотам? Какая разница, все атомы цикла или не все входят в другие циклы?

K>>Потомоу, что на второй картинке у тебя больше чем 4 цикла если не рассматривать циклы только из 6 вершин.

K>Ну это подразумевается условиями задачи — из вложенных друг в друга циклов оставлять самые маленькие.

Так не получится. Ты опять формулируешь задачу как поиск всех циклов в графе и потом поиска среди них наименьшего, но тут опять вопрос, что если будет цикл из 3х или 4х вершин, но будут и из 6 которые включают 2 по 3?
Sic luceat lux!
Re[11]: Перевод понимания из интуиции в логику
От: Khimik  
Дата: 24.11.20 16:31
Оценка:
K>>>>Я так и не понял, что вы привязались к этим сотам? Какая разница, все атомы цикла или не все входят в другие циклы?
K>>>Потомоу, что на второй картинке у тебя больше чем 4 цикла если не рассматривать циклы только из 6 вершин.

K>>Ну это подразумевается условиями задачи — из вложенных друг в друга циклов оставлять самые маленькие.

K>Так не получится. Ты опять формулируешь задачу как поиск всех циклов в графе и потом поиска среди них наименьшего, но тут опять вопрос, что если будет цикл из 3х или 4х вершин, но будут и из 6 которые включают 2 по 3?

Я не понимаю что вы спрашиваете.
Вот молекула нафталина:



В ней, строго говоря, есть три цикла: два по 6 атомов и один из 10 атомов. Последний нужно отбросить, т.к. он включает в себя первый и второй цикл. Если перебирать циклы через графы, будут найдены все три цикла и алгоритм должен отбрасывать бОльший, содержащие вложенные меньшие циклы.
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Re[12]: Перевод понимания из интуиции в логику
От: Sinclair Россия https://github.com/evilguest/
Дата: 25.11.20 12:39
Оценка:
Здравствуйте, Khimik, Вы писали:
K>В ней, строго говоря, есть три цикла: два по 6 атомов и один из 10 атомов. Последний нужно отбросить, т.к. он включает в себя первый и второй цикл. Если перебирать циклы через графы, будут найдены все три цикла и алгоритм должен отбрасывать бОльший, содержащие вложенные меньшие циклы.
По-прежнему непонятно.
Смотрите:
    A   B
    |   |
C   D   E   F
 \ / \ / \ /
  G   H   I
  |   |   |
  J   K   L
 / \ / \ / \
M   N   O   P
    |   |
    Q   R

Вы видите здесь циклы GDHKNJ и HEILOK. Под "циклом из 10 атомов" вы подразумеваете что — GDHEILOKNJ? Что насчёт GDHKOLIEHKN? или мы должны отбрасывать циклы с самопересечениями?
Дальше — что значит "состоит из вложенных меньших циклов"? В GDHEILOKNJ есть фрагмент HEILOK, но нету GDHKNJ.
Интересуют ли вас циклы произвольной длины, или только 5/6 атомов, только углерода, и без самопересечений?
Могут ли встречаться случаи типа
       
       
A   B     C   
 \ /|\  / 
  D E F   
  |/  |   
  G   H  
   \ / \  
    I   J - K
    |   
    L

? Какие циклы должны быть построены в таком случае? GDBFHI/GEBFHI, или DBEG?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[13]: Перевод понимания из интуиции в логику
От: Khimik  
Дата: 25.11.20 13:02
Оценка:
Здравствуйте, Sinclair, Вы писали:

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

K>>В ней, строго говоря, есть три цикла: два по 6 атомов и один из 10 атомов. Последний нужно отбросить, т.к. он включает в себя первый и второй цикл. Если перебирать циклы через графы, будут найдены все три цикла и алгоритм должен отбрасывать бОльший, содержащие вложенные меньшие циклы.
S>По-прежнему непонятно.
S>Смотрите:
S>
S>    A   B
S>    |   |
S>C   D   E   F
S> \ / \ / \ /
S>  G   H   I
S>  |   |   |
S>  J   K   L
S> / \ / \ / \
S>M   N   O   P
S>    |   |
S>    Q   R
S>

S>Вы видите здесь циклы GDHKNJ и HEILOK. Под "циклом из 10 атомов" вы подразумеваете что — GDHEILOKNJ?
Да

> Что насчёт GDHKOLIEHKN? или мы должны отбрасывать циклы с самопересечениями?


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

S>Дальше — что значит "состоит из вложенных меньших циклов"? В GDHEILOKNJ есть фрагмент HEILOK, но нету GDHKNJ.


Почему нет? Можно же по-другому пронумеровать атомы в цикле.

S>Интересуют ли вас циклы произвольной длины, или только 5/6 атомов, только углерода, и без самопересечений?


Проще искать любые циклы, произвольной длины.

S>Могут ли встречаться случаи типа

S>
       
       
S>A   B     C   
S> \ /|\  / 
S>  D E F   
S>  |/  |   
S>  G   H  
S>   \ / \  
S>    I   J - K
S>    |   
S>    L   
S>

S>? Какие циклы должны быть построены в таком случае? GDBFHI/GEBFHI, или DBEG?

Такие циклы встречаются, хотя для моей задачи их находить в принципе необязательно; по идее нужно выделить все три цикла которые вы назвали.
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Re: Перевод понимания из интуиции в логику
От: Sinclair Россия https://github.com/evilguest/
Дата: 25.11.20 13:02
Оценка: +1
Здравствуйте, Khimik, Вы писали:

K>Я корпел несколько недель над алгоритмом, и то он получился несовершенным. А вы могли бы быстро что-то придумать?

Быстро бы я придумал загуглить https://www.google.com/search?q=алгоритм+поиска+циклов+в+графе.
Потом бы медленно думал над тем, что делать с "лишними" циклами, которые будет выдавать алгоритм.
K>Когда я писал этот алгоритм, возникли такие мысли. С одной стороны, достаточно мельком взглянуть на молекулу и сразу видно, где в ней циклы. В то же время формализовать это “видно” – задача на порядки более трудная. Судя по всему, понимание – штука сложная и понимание бывает на разных уровнях: одно дело – когда смотришь на молекулу и сразу понятно где в ней циклы, а другое дело – когда понятно с точки зрения алгоритма, что такое цикл и как его распознать.
Да, верно.
K>Возникает вопрос: можно ли разработать эвристические приёмы, которые переводят “интуитивно-понятное” в “формализованно-понятное”? Например большой список универсальных вопросов.
Этим всю жизнь занимаются математики — они учатся отбрасывать всё лишнее, оставляя в задаче только существенные характеристики.
Потом им иногда удаётся заметить, что получившаяся задача похожа на какую-то другую — например, распределение регистров вычисления неожиданно сводится к задаче о раскраске графа.
Для того, чтобы добиться успеха в какой-нибудь дисциплине, необходимо стоять на её стыке с какой-то другой дисциплиной. Потому что всё, что можно сделать "внутри" дисциплины уже сделали поколения учёных до нас.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Перевод понимания из интуиции в логику
От: bnk СССР http://unmanagedvisio.com/
Дата: 25.11.20 14:01
Оценка:
Здравствуйте, Khimik, Вы писали:

K>Я корпел несколько недель над алгоритмом, и то он получился несовершенным. А вы могли бы быстро что-то придумать?


Я бы точно начал со штудирования матчасти, а не бросился с шашкой на танк. Вроде же более-менее очевидно, что задача про минимальные циклы в графе?
Там (в графах) вроде как все уже неплохо перепахано, зачем изобретать велосипед.
Re[14]: Перевод понимания из интуиции в логику
От: Sinclair Россия https://github.com/evilguest/
Дата: 26.11.20 00:57
Оценка:
Здравствуйте, Khimik, Вы писали:
K>Да, конечно. Атомы в цикле должны встречаться только по разу.
Ну, тогда всё более-менее прямолинейно. Берём алгоритм Джонсона https://www.cs.tufts.edu/comp/150GA/homeworks/hw1/Johnson%2075.PDF, применяем.
S>>Дальше — что значит "состоит из вложенных меньших циклов"? В GDHEILOKNJ есть фрагмент HEILOK, но нету GDHKNJ.
K>Почему нет? Можно же по-другому пронумеровать атомы в цикле.
Ок, формализуем понятие "цикл C1 входит в С2":
— Длина С1 < длины C2
— Цикл С2 содержит в себе последовательность тех же вершин, что и С1 (либо в обратном порядке).

Это сразу даёт нам алгоритм сравнения двух циклов:
1. Если длина С2 <= длины C1, то возвращаем НЕТ
2. Берём 1 вершину из C1, ищем её в C2 (O(len(C2)))
3. Если не нашли, то возвращаем НЕТ
4. Если нашли (по индексу m), то начинаем проверять следующие вершины:
4.1. C1[i] = C2[(m+i) mod len(C2)] (O(len(C1))) — если хотя бы один не совпал, прерываем цикл и идём в 4.2
4.2. С1[i] = C2[(m-i) mod len(C2)] (O(len(C1))) — если хотя бы один не совпал, возвращаем НЕТ
5. Возвращаем ДА

На основе этого алгоритма легко построить алгоритм изгнания дубликатов:
1. Сортируем список циклов по возрастанию длины, группируем его по длине. То есть у нас есть список L списков циклов, где L[i] — список циклов с одинаковой длиной; и длина циклов в L[i+1] строго больше длины циклов в L[i].
2. Цикл: i перебирает все индексы списка L
3. Цикл: j перебирает все индексы списка L[i]
4. Цикл: k перебирает индексы L от i+1 до конца
5. Цикл: m перебирает все циклы списка L[k]
3. Если L[i][j] входит в L[k][m], то выбрасываем L[k][m] из L[k]
После окончания работы алгоритма в списке L останутся только те циклы, в которые не входят другие циклы.

S>>Интересуют ли вас циклы произвольной длины, или только 5/6 атомов, только углерода, и без самопересечений?


K>Проще искать любые циклы, произвольной длины.

Ну, вообще-то проще искать циклы фиксированной длины
S>>Могут ли встречаться случаи типа
S>>
       
       
S>>A   B     C   
S>> \ /|\  / 
S>>  D E F   
S>>  |/  |   
S>>  G   H  
S>>   \ / \  
S>>    I   J - K
S>>    |   
S>>    L   
S>>

S>>? Какие циклы должны быть построены в таком случае? GDBFHI/GEBFHI, или DBEG?

K>Такие циклы встречаются, хотя для моей задачи их находить в принципе необязательно; по идее нужно выделить все три цикла которые вы назвали.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.