如果找到目标状态是问题的一部分,则解决计划

人工智能 算法 优化 解决问题 图论
2021-10-23 07:22:35

我很难找到解决占用问题的一些起点,这似乎是人工智能的一个很好的候选者。

假设以下情况:在一家公司,我有 n 辆汽车和 m 名员工。并非每个员工都可以驾驶任何汽车(需要特殊驾驶执照)。一辆车只能由一名员工在特定时间点使用。

有一个计划规定哪些员工必须在一段时间内到达某个地方(因此他们必须使用汽车,所以汽车在这段时间内被阻塞)。

目标是根据该计划找到接近最佳的汽车占用率。

这个问题很容易指定,但我不知道要实现哪些方法。

因为它可以用图表表示,所以我认为解决此类问题的正确方法是使用搜索技术,但这里的问题是我不知道目标状态(并且没有有效的方法来计算它 - 这就是我希望人工智能完成的任务......)。找到目标状态实际上都不是问题的一部分。

所以我的问题是:什么人工智能技术可以用来解决这样的问题?

编辑:一些澄清:

假设我们有两组——一组员工(E)和一组汽车(C)。|C| < |E| 很可能是真的。每辆车都有一个分配的优先级,对应于使用它的成本(例如,使用法拉利比使用达契亚的成本更高,因此达契亚具有比法拉利更高的优先级(例如 1)(例如 10))) . 进一步假设让员工在特定时间段不使用汽车是一件坏事——他们会受到个人罚款(您希望员工在客户身边并卖东西等)。
目标是找到总成本低的员工和汽车的职业。

一个示例:如果您在特定时间段内将一名员工分配给汽车,则可能会发现另一名员工在该时间段内没有得到任何汽车。这可能是因为

  • 汽车是免费的,但他没有驾照
  • 因为一辆车是免费的,但是使用这辆车的成本会比让员工留在总部的成本要高
  • 因为再也没有免费的车了

当然,就成本而言,改变职业并为在此解决方案中没有车的员工提供汽车可能会更好,因此让另一名员工没有车或不使用所有汽车或......

注意:不需要找到精确的最优解(=所有可能职业的最低总成本),因为这需要检查指数解空间的所有可能职业。Insetad 找到接近最优的低总成本的或多或少好的近似值就足够了。

2个回答

您的问题仍然几乎完全不清楚,但让我们做出一些猜测以取得一些进展。

最大的谜团是你的时间片:

  • 你需要几个?随着更细化的时间,你会得到更多的未知数和更多的限制,并且复杂性会迅速增长。
  • 当有人得到一辆车时,他们可能会用它去某个地方旅行,因此可能需要根据距离将司机分配给汽车以进行多个后续切片。这是您的描述中完全缺少的东西(所以我将忽略它)。

如前所述,您需要一个成本函数,即最小化的东西。甚至在此之前,您还需要定义变量。假设您需要二进制变量

x[t, c, e] 

这样x[t, c, e] = 1当在时间片t将汽车c分配给员工e时(否则为零)。现在,我们可以指定一些约束

  • x[t, c, e] = 0对于每个t,当员工e不能开车时c
  • 对于每个tand c,总和最多为 1(因为没有员工可以同时使用两辆汽车)x[t, c, e]e
  • 对于每个tand e,总和最多为一(因为没有汽车可以同时使用两次)x[t, c, e]c

我可能错过了一些限制,但这没什么大不了的。我希望你有这个想法。


您的成本函数将是几个项的总和。

  • 你写的关于优先级的内容我也不清楚,但你可以定义一个权重w[c, e](或者可能只是w[c]),所以让总和w[c, e] * x[t, c, e]t成为描述这些优先级的术语ce
  • 假设u[e]不给员工e汽车的成本。当员工在时间片没有汽车时,表达式y[t, e] = 1 - sum over all c of x[t, c, e]等于一现在,相应的成本项可以表示为总和etu[e] * y[t, e]et

同样,可能还有更多。


到目前为止,我所描述的是您的问题的整数线性规划公式。将我的文本转换为 ILP 生成代码,获取 ILP 求解器,输入并运行它......

当您的问题很小时,您甚至可能获得最佳效果。否则,您将获得一些解决方案(这是有保证的)和最优的界限,因此您可以知道您可以改进多远。

这比任何启发式求解器(例如模拟退火)所能提供的要多。OTOH 使用一些启发式求解器可能会更快地得出一个好的解决方案。但这一切都无关紧要,除非你得到一个明确的问题定义。

我认为有不同的方法可以解决您提出的问题:1)它可以被视为可以通过线性规划设置解决的经典资源优化问题(强烈建议看一看,并非一切都需要 ML)。您可以在此处找到一些资源并此处快速介绍 LP

线性规划 (LP) 是一种用于确定稀缺资源最佳分配的数学程序。LP 是一种已在几乎所有业务方面得到实际应用的程序,从广告到生产计划。运输、配送和总体生产计划问题是 LP 分析中最典型的对象。例如,在石油行业,一家大型石油公司的数据处理经理最近估计,公司 5% 到 10% 的计算机时间用于处理 LP 和类似 LP 的模型。

2) 使用深度 Q 学习网络设置为 ML 问题(可能有点矫枉过正),至少在我看来,设置更容易(可能)。可能有很多方法可以设置您的问题和环境。使用 DQN,您将为您的问题构建一个模拟环境,您可以在其中创建具有许可证要求的汽车列表(或字典)、员工及其许可证列表、另一个日程表,可以简单地声明 0 = 当时没有会议, 1 = 在那个时间开会(假设并非所有员工在所有时间都需要汽车,如果这不是真的,那么您甚至可以删除日程安排要求)。

所以 DQN 就是关于行动 -> 奖励优化。您输入一个状态,这可能是一系列变量,它会根据各自的评分旋转我们的一系列动作。对于状态列,您可以使用汽车可用性(例如每辆车一列),而操作可以是每个员工可能乘坐特定汽车的二维天气数组。您可以在环境模拟器中留下员工拥有正确许可证的天气逻辑检查。即,如果模型将员工派往错误的许可汽车,那么您可以返回负值作为惩罚作为奖励。对于正确的分配,奖励可以是分配给每个员工(固定或可变)的奖励减去汽车成本。

一旦经过训练,在发送到模型的任何给定状态下,它都应该输出一个 2D 矩阵,显示每个员工乘坐每辆车的得分。对于每辆车,您可以选择将获得最高分数的员工,因此只需 numpy 切片和切块即可。再一次,这是经过 10 分钟思考后的一个快速想法,所以要加一点盐。还有许多 DQN 风格(目标-Q、决斗-Q、经验回放、彩虹 DQN 等)

3) 使用上面的 DQN 结构,但将其简单地转化为 Q-learning 问题。动作集可以是相同的,但状态可以简单地按您的日程安排(1,2,3,4,5...)。您将大部分逻辑留给模拟环境,例如每个时期状态下的汽车可用性(例如在每个状态下,根据操作返回,您可以动态设置哪些汽车可用于下一个)。确保正确设置奖励和惩罚。在探索与利用之间建立良好的平衡,也许使用 epsilon-greedy 策略并让它运行。