hhb83 发表于 2010-9-7 14:24:09

麻烦大家帮我看一下这个算法该怎么弄

大家好,我有一个算法问题不知道该怎么解决,麻烦帮我看一下吧。假设有五个人ABCDE,每个人都有不同的10个方案1~10.其中号码越小的越好,即每个人都最喜欢自己的1号方案,但一个人的方案可能和另外一个人的方案有冲突,这样他们就不能同时选这两个方案。现在要把所有不冲突的最好的方案选出来(pareto最优解集)。举例来说,若每个人的1号方案都不冲突,则不需要往下继续;若其中B1与E1冲突,则看E2与其他1是否冲突,冲突则继续看E3、E4...,不冲突则记录下来作为一个解(此时不需要继续看E3,因为他的效果不如E2好);接下来E再选1,看B2与其他1是否冲突,同样按上面的方法选择。不过在上面E2的选择中,可能E2与B1不冲突,但与C1冲突,这时可先继续看E3等等是否冲突并记录,在将E回到2,C选C2验证。总之就是遇到冲突了就固定一个,让另一个继续往下找一个最好的,然后将另一个回到冲突点固定,原来那个往下找(即每次冲突都要让双方各找一个不冲突解)。我想要的就是这样一个不冲突的解集。
不知道我描述清楚了没有,我本来想用分枝定界(或剪枝),但也不知该怎么写,感觉逻辑上好像很麻烦,希望大家能给我提些意见,谢谢!
页: [1]
查看完整版本: 麻烦大家帮我看一下这个算法该怎么弄