背景
所以事情是这样的我住在一个三口之家,我们中的老大已经厌倦了独自做家务我们试着为任务制定不同的时间表,但总是有问题,因为要么我们中的一个不在家,家务事没做,要么有人觉得他们比其他人做得更多,导致怨恨和不愿意完成家务。
问题
人类会犯错,但计算机程序是绝对正确的,对吧?这个想法是,可以使用一个计算机程序来公平地分配要做的家务,这样就不会有人觉得自己在做更多的工作我正试图想出一个算法来分配符合以下标准的杂务:
它应该以大约1/3的概率在长期内平均分配家务。
它应该返回一个有序的人员列表,这样如果第一个列表不可用,第二个可以完成它。
它应该避免在同一天为每个人安排多个家务。
它应该避免连续多次将同一件家务安排给同一个人。
它应该是允许偏差的。如果家务活不是由被安排的人做的,只要实际做家务的人得到反馈,就应该保持公平。
它应该以不同的频率处理不同的家务(你需要每天洗碗,但每周只打扫一次卫生间,…)
我的问题是:实现这个算法的最佳/最酷/最公平的方法是什么?
(可笑的过度变形的解决方案是值得赞赏的:D)
我试过什么?
我想实现这种算法的一个简单方法是为不同的标准定义一个成本表,然后使用加权随机数来选择人员,但我认为从长远来看,这是不公平的(它必须限制在每人1/3,否则将不被接受:)。
最佳答案
你的问题由两部分组成:
1)定义得分函数你如何定义公平、高效……?他们之间的取舍是什么?有different techniques需要权衡:
分数加权,例如:1次(不均匀分布)==5次(一天的多项家务)
分数水平,例如:(分布不均)总是高于(一天中的多项家务)
帕累托评分:见维基百科
2)使用优化算法查找得分最高的计划(在所有可能的计划中)。如果你的问题是np完全的,那么就没有这么完美的算法了。但也有很好的我更喜欢从第一个拟合递减开始,然后是禁忌搜索。
有关实现代码的类似示例的完整、详细概述,请遵循this tutorial。用Computer
代替Person
,用Process
代替Chore
。