详细内容或原文请订阅后点击阅览
家庭数据科学:使用蒙特卡洛和遗传算法解决保姆时间表难题
让混乱变得有序,同时简化我们寻找完美保姆的过程作为数据科学领导者,我习惯于拥有一支能够将混乱变为清晰的团队。但是,当混乱是你自己家庭的保姆时间表时,即使是最好的计划也会出错。一想到工作会议、午睡时间和不可预测的轮班,我们的思绪就会陷入混乱——直到我意识到我可以使用解决业务问题的相同算法来解决非常个人的问题。借助蒙特卡罗模拟、遗传算法和一些父母的聪明才智,我开始了一场驯服我们疯狂时间表的旅程,每次调整一个算法。结果如何?好吧,我们只能说我们保姆的新时间表看起来非常合适。照片由 Markus Spiske 在 Unsplash 上拍摄设置舞台:伟大的时间表难题我们的家庭时间表看起来就像瓷器店里的公牛一样。父母 1 的工作时间是固定的朝九晚五,是这个难题中比较容易解决的部分。但接下来是父母 2,他在芝加哥一家医院繁忙的急诊室上班,工作时间却完全不可预测。有些日子从黎明开始,而另一些日子则持续到深夜,没有规律或理由。突然间,原本简单的日程安排变成了看不到答案的魔方。照片由 Nick Fewings 在 Unsplash 上拍摄我们想象自己身处这种混乱之中。早上变成了疯狂的奔波,下午总是在猜谜游戏,晚上——谁知道呢?O
来源:走向数据科学发展完美的保姆:遗传算法的力量
武装着我们的日程安排可以向我们投掷曲线球的所有可能方式,我知道是时候引入一些重击优化技术了。输入遗传算法 - 一种自然选择启发的优化方法,该方法通过迭代发展的候选解决方案来找到最佳的解决方案。
Sangharsh Lohakare Unplash在这种情况下,每个“候选人”都是一个潜在的保姆特征,例如它们的可用性和灵活性。该算法评估了不同的保姆特征,并迭代地改善了这些特征,以找到适合我们家庭需求的特征。结果?一个高度优化的保姆,具有调度偏好,平衡了我们的父母覆盖差距和保姆的可用性。
这种方法的核心是我喜欢称之为“保姆染色体”。用遗传算法术语,染色体只是代表潜在解决方案的一种方式 - 在我们的情况下是不同的保姆特征。每个“保姆染色体”都有一组定义其时间表的功能:每周可以工作的天数,一天可以覆盖的最高时间以及适应不同开始时间的灵活性。这些功能是算法会考虑的每个潜在的保姆时间表的基础。
定义保姆染色体
在遗传算法中,“染色体”代表了一种可能的解决方案,在这种情况下,它是定义保姆时间表的一组功能。这是我们定义保姆特征的方式:
#功能生成nanny特性deferate_nanny_characteristics():返回{'fixible':np.random.choice([true,false,false]),#nanny的灵活性'days_per_week':np.random.choice(np.random.choice' 8、9、10、11、12])#每天可用的小时}