Я работаю над проблемой в области интеграции данных опросов, но ее проще описать искусственной аналогией.Поскольку установка немного затянулась, я с самого начала задам свои вопросы:
Соответствует ли этот сценарий каким-либо компьютерным проблемам, решения которых я мог бы просто позаимствовать и адаптировать?
Если нет, то какие подходы вы могли бы предложить?Я никого не прошу решить проблему;скорее, просто надеясь быть направленным в одном или нескольких многообещающих направлениях.
Представьте себе, что экосистемы имеют существ , которые состоят из одного или нескольких молекул , которые состоят из одного или нескольких атомов .Чтобы быть жизнеспособным существом, его молекулы должны совместно использовать ровно один атом каждого типа.В приведенном ниже примере обратите внимание, что каждое существо использует все четыре атома только один раз.Также стоит отметить, что упорядочение молекул внутри существ и атомов внутри молекул не имеет значения.
Atoms in the universe: a b c d.
Ecosystem X
creature x1
molecule 1: a b
molecule 2: c
molecule 3: d
creature x2
molecule 4: a b c
molecule 5: d
creature x3
molecule 6: a b c d
Ecosystem Y
creature y4
molecule 7: a b
molecule 8: c
molecule 9: d
creature y5
molecule 10: a b
molecule 11: c d
Учитывая две экосистемы, моя задача состоит в том, чтобы создать «спаривания».Спаривание состоит из набора молекул (или комбинаций молекул) из одной экосистемы, которые отображаются на эквивалентные молекулы (или комбинации молекул) из другой экосистемы.Эквивалентность определяется основными атомами.Как и у существ, спаривания нежизнеспособны, если каждый из двух наборов молекул (по одному из каждой экосистемы) не использует все атомы ровно один раз.Вот некоторые (не все) пары из приведенного выше примера:
# A direct mapping from the molecules of creature x1 to those of y4.
m1 = m7
m2 = m8
m3 = m9
# As above, but substitute m10 for m7.
m1 = m10
m2 = m8
m3 = m9
# We can combine molecules.
m4 = m7 + m8
m5 = m9
# Another combination.
m1 = m10
m2 + m3 = m11
В реальной проблемной области может быть от 2 до 100 атомов в игре (с соответствующим разнообразием размеров молекул) ипара дюжин существ на экосистему.Кроме того, две экосистемы могут не давать жизнеспособных пар.В этом случае моему приложению Python в конечном итоге потребуется предложить приблизительные пары (список комбинаций молекул, которые объединяются, а затем список отставших от каждой экосистемы).