所以我正在编写一个算法,当给出一组来自不同地方的人时,它会根据一些参数将它们组织成三个一组:
我的数据结构中包含上述所有必需先决条件的变量。我想知道是否有一个很好的方法来解决这个问题?目前我正在使用Gale-Shapely算法的变体(稳定婚姻问题的解决方案)。这个解决方案效果相对较好,但更多时候不是这样,它需要我进入并对最终组进行一些小的调整。
任何人都有任何想法/建议?
我提前感谢你的帮助。
答案 0 :(得分:1)
这是一个graph partitioning问题,因此它几乎可以肯定是NP-Hard(当你只有一个约束时,问题可以在多项式时间内解决 - 这类似于稳定的婚姻问题 - 但是当你有多个限制因素时,复杂性就会提高。)解决这些问题的一个好方法是应用一个启发式(你正在使用Gale-Shapely算法),然后解决与本地回溯搜索的任何冲突(听起来你现在正在手工做) 。我的建议是保持你当前的启发式,如果它似乎对你有用,并添加一个自动的本地回溯算法来解决启发式引起的任何冲突(例如,如果你有一个有两个人的团队谁18岁以下,然后将这些人中的一个与18岁以上的人交换,并且不违反其他三个限制;如果不可能,则选择18岁以上违反最少限制的人,然后交换从群组中取出其他人以满足现在违反的约束;在N次迭代失败后,算法会抛出手并请求人为干预)