GEDKeeper icon indicating copy to clipboard operation
GEDKeeper copied to clipboard

Калькулятор родственных связей ошибается на уровень.

Open se-sss opened this issue 1 year ago • 9 comments

Братьев считает правильно. Двоюродных считает правильно. Для троюродных в качестве троюродного берёт родителя троюродного, а не самого троюродного.

V2.20.1.0

se-sss avatar Jul 30 '22 08:07 se-sss

Спасибо! Обязательно посмотрю и попробую исправить к следующему выпуску (2.21).

Serg-Norseman avatar Jul 30 '22 10:07 Serg-Norseman

2.21.0.0 Сломалось совсем image

se-sss avatar Aug 30 '22 21:08 se-sss

Подставляет мать 2-го человека, А родство вроде правильно.

se-sss avatar Aug 30 '22 21:08 se-sss

Проверю

Serg-Norseman avatar Aug 30 '22 21:08 Serg-Norseman

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

Возможно, что алгоритм просто не может воспроизвести всю цепочку родства. Поэтому выводится только фрагмент той цепочки, которая удалась. Алгоритм работает так: строится граф всех связей, затем выделяется цепь связей от одного заданного человека до другого. Затем определяется отношение каждого звена с учетом предыдущего. Если где-то образовался обрыв - выводится только фрагмент. У вас скорее всего именно эта ситуация.

Serg-Norseman avatar Aug 31 '22 12:08 Serg-Norseman

image

syerokhin avatar Aug 31 '22 13:08 syerokhin

image

se-sss avatar Aug 31 '22 13:08 se-sss

То есть, да, сестра, но подставляется мать. На троюродных аналогично. Вообще сразу после фикса я сам собирал из исходников и работало. А релиз - нет

se-sss avatar Aug 31 '22 13:08 se-sss

Проверил на нескольких похожих семьях у меня в базе, пока никак - ни в релизе, ни в рабочем проекте :(

Serg-Norseman avatar Aug 31 '22 13:08 Serg-Norseman

Неизвестно.ged.zip Сделал простенький файл. Сразу после добавления братья правильно определялись. После сохранения и перезапуска программы - неправильно.

И снова сама связь считается правильно, а вместо 2-го человека берётся его мать. image

se-sss avatar Sep 12 '22 20:09 se-sss

Если удалить мать, то снова считается правильно.

se-sss avatar Sep 12 '22 20:09 se-sss

родители A и A(F), дети AA и AB

se-sss avatar Sep 12 '22 20:09 se-sss

fix_relations.patch.txt

Я шарпы не особо знаю. Но вроде так работает.

se-sss avatar Sep 12 '22 20:09 se-sss

Но непонятно, почему при изначальном создании работало правильно.

se-sss avatar Sep 12 '22 20:09 se-sss

Да, баг подтвержден, повторимость есть. Занятно - в прошлом алгоритм имел похожую часть, как вы добавили. Может не в точности, но что-то похожее. Нужно будет поднять историю коммитов и посмотреть как выглядело и понять - почему я это "соптимизировал".

Serg-Norseman avatar Sep 12 '22 20:09 Serg-Norseman

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

Serg-Norseman avatar Sep 12 '22 20:09 Serg-Norseman

Но непонятно, почему при изначальном создании работало правильно.

Мне еще больше непонятно, почему при неработающем калькуляторе эта же самая ситуация на том-же файле в древе выдает правильный результат.

Serg-Norseman avatar Sep 12 '22 20:09 Serg-Norseman

Могу предположить, что нисходящая ветка родства для калькулятора заполнятся по другому. То есть ребра те же самые в том же порядке, но каждое отдельное ребро перевернуто. И тут код адаптировано под перевернутое ребро, а подсунули неперевернутое. a-b, b-c, c-d и b-a, c-b, d-c. Бралось последнее ребро, но не конечная точка.

se-sss avatar Sep 12 '22 21:09 se-sss

Я проверил ваш патч в работе, всё хорошо работает. Каких либо проблем не заметил. И код нормальный. Вы можете сделать коммит и PR от себя? Я бы хотел, чтобы ваше участие было в истории :)

Serg-Norseman avatar Sep 13 '22 07:09 Serg-Norseman

А теперь задача с звёздочкой. :-) Родство через жену image

syerokhin avatar Sep 13 '22 19:09 syerokhin

Кажется работает. Немножко странно выглядит, что начинается рассказ не с перевого выбранного, но так изначально было (см первый скриншот выше),

image

se-sss avatar Sep 13 '22 21:09 se-sss

Ужас! Вот это круто! На таких примерах я не тестировал, да. Вы меня повергли в нокаут с такими экспериментами :)

Serg-Norseman avatar Sep 13 '22 21:09 Serg-Norseman

А задача с 3-мя звёздочками - искать разные пути и их тоже выводить. Но эту багу наверное надо закрыть.

se-sss avatar Sep 15 '22 21:09 se-sss