У нас есть программа моделирования, в которой мы берем очень большое количество отдельных людей и группируем их в семьи.Затем каждая семья проходит симуляцию.
Я отвечаю за группирование людей по семьям, и я думаю, что это действительно крутая проблема.
Прямо сейчас моя техника довольно наивна / проста.Каждая индивидуальная запись имеет некоторые характеристики, в том числе брак / холост, возраст, пол и уровень дохода.Для женатых людей я выбираю отдельного человека, перебираю население и ищу совпадение на основе функции совпадения.Для людей / пар с детьми я, по сути, делаю то же самое, ищу случайное количество детей (выбранное в соответствии с эмпирическим распределением), а затем перебираю всех детей, выбираю их и добавляю в семью на основе совпадения.функция.После этого не все сопоставляются, поэтому я ослабляю ограничения в своей функции сопоставления и снова перебираю.Я продолжаю делать это, но я останавливаюсь до того, как моя функция соответствия становится слишком нелепой (например, от 85 до 20 лет).Любой, кто остался, выписан как один человек.
Это работает достаточно хорошо для наших текущих целей, и я, вероятно, никогда не получу время или разрешение на его доработку, но я, по крайней мере, хочу спланировать случай или научиться чему-нибудь интересному - даже если я никогда не буду использоватьЭто.Кроме того, я боюсь, что алгоритм не будет работать очень хорошо для небольших выборок.Кто-нибудь знает, какие алгоритмы я могу изучать, которые могут быть связаны с этой проблемой или как я могу ее формализовать?
Для справки, меня устраивают главы 1-26 CLRS , но я не особо коснулся алгоритмов NP-полноты или аппроксимации.Не то чтобы вам не нужно поднимать эти темы, но если вы это сделаете, возможно, будьте осторожны со мной, потому что я, вероятно, не пойму все, о чем вы говорите, сразу.:) Я также ничего не знаю об эволюционных алгоритмах.
Редактировать: Я специально стремлюсь улучшить следующее:
- Менее нелепые браки.
- Меньше одиноких людей в конце.