Python -如何根据条件找到理想的解决方案

fcy6dtqo  于 2024-01-05  发布在  Python
关注(0)|答案(1)|浏览(131)

奇怪的是,这里有一个具体的,但我们开始。我帮助管理一个每周活动的场地,我们试图填补某些排的每一个座位。我们有一个常客名单,我们用来填补这些座位,沿着每个人喜欢的座位或排(如果有的话)。我们也有一些排是更重要的,其他人填补-就像如果是在前排有一个空座位和第二排有一个空座位之间,我们会希望前排坐满。当然,不是每一个“常规”都是每周都有。
目前,我们只是根据需要手动安排每个人的位置,但我想尽可能地自动化这一点。我想一旦我们确定了某个星期参加活动的人员名单,我想运行程序,让它根据他们的偏好和我们的偏好自动将每个人放在理想的位置。
一个巨大的额外好处将是能够考虑意外的客人或没有出现。例如,如果有人回复两个人,但他们带来了第三个,这将是惊人的,如果程序可以重新计算最佳地点搬迁他们的党(甚至可能提出不同的选择与利弊。即“这个解决方案移动的人数最少”或“这个解决方案保持最重要的行填充”)
到目前为止,我只是每周手动添加人,这很有效,但很耗时,而且当有人带来一个意想不到的客人或不得不在最后一刻取消时,总是令人头痛。
我意识到这可能是一个非常具体的用例,我当然不是要求任何人为我写它。但是抽象一点,有没有一个术语可以描述这种思维/编程,我可以研究一下?我试图解决一个座位问题,得到最好的解决方案,同时满足尽可能多的“偏好”条件。
感谢您的指导!

p1iqtdky

p1iqtdky1#

  • 优化=从许多可能的解决方案中找到最佳解决方案。
  • 多目标=什么是“最好的”不是由一个方面决定的,而是由多个方面决定的。在优化中,最常见的目标函数是使用一个候选解作为输入,并返回一个数值质量度量作为输出,以确定什么是“好”,什么是“坏”的解决方案。然而,还有优化算法,可以处理多个质量指标作为输出,并可以尝试找到在每个方面都很好的解决方案,在您的示例中可能代表多个人的偏好。
  • 启发式=一种不精确的方法,通常可以在有限的时间内找到接近最优的解决方案。它与精确和近似方法相反,精确和近似方法提供了一定的保证,可以多快找到解决方案或接近最优的解决方案,但这种算法并不适用于每个问题,有时没有必要尝试为简单的问题提出一个。

搜索短语入门建议:“多目标优化”、“启发式优化”
从我的头脑中,我认为使用NSGA-II的进化算法可能符合这些标准,像DEAP这样的Python库应该提供一个实现。棘手的部分可能是编写一个合适的目标函数,可以很好地捕捉多个人的偏好。

相关问题