【问题标题】:Approach to solve delimited scheduling求解定界调度的方法
【发布时间】:2012-12-28 16:17:03
【问题描述】:

我遇到了一个问题,我在决定/想办法解决它时遇到了问题。问题如下:

给定要拨打 N 个电话,安排安排最多拨打的电话。

了解信息:

  • 待处理的电话数量
  • 来电者(会打电话的人)
  • 电话类型(提醒、计费、协商等...)
  • 估算电话类型的持续时间(提醒:1 分钟,计费:3 分钟,协商:15 分钟等...)
  • 待处理的电话数量
  • 给定通话的理想日期
  • 给定调用的“最小”日期(不能在此之前发生...)
  • 给定调用的“最大”日期(不能在...之后发生)
  • 一天只有8小时
  • 规则:

  • 不能在“最低”日期之前或“最高”日期之后拨打电话
  • 已拨提醒电话奖励 1 分,未接提醒电话 -2 分
  • 计费电话发出奖励 6 分,计费电话未接 -9 分
  • 已拨打协商电话奖励 20 分,未接协商电话 -25 分
  • 打电话给 John 的人必须是第一个打电话给他的人。请注意,它不是必须的,但是,如果您这样做,该呼叫将获得额外积分...
  • 我对人工智能略知一二。我可以认识到这是一个适合班级的问题,但我只是不知道采取哪种方法......我应该使用神经网络吗?图搜索?

    PS:这不是一个学术问题。这是我面临的现实世界问题。
    PS2:指向系统仍在创建中...这里采样的点不是真实的...
    PS3:生成的 algol 可以执行多次(批量作业样式),也可以根据性能在线解决...
    PS4:我的合同规定我将根据客户收取费用on:(我拨打的电话数量)+(比率*通话时长),但是有一个关于服务质量的条款,只打提醒电话对我不利,因为即使提醒了,人们仍然忘记参加他们的约会......这降低了我提供的服务的“质量”......我还不知道确切的数字

    【问题讨论】:

    • “加分”——这是作业吗?
    • @Dan-o 不,不是! (阅读最后一行)这只是一个备注......
    • 啊。我在阅读到最后之前发表了评论。我正在努力耐心。 :)
    • 我认为你也需要编辑你的目标 - 如果你安排最大通话次数,分数并不重要。如果您计划获得最高分数,他们会这样做。
    • @Bobson 我刚刚再次编辑...检查 ps4

    标签: c# artificial-intelligence scheduling


    【解决方案1】:

    这对 AI 来说似乎不是问题。

    如果是我,我会创建一组按优先级排序的规则。然后开始填写来电者的日程安排。

    其中一个规则可能是首先分配持续时间最短的呼叫类型(以满足“最大呼叫数”标准)。

    这听起来越来越像knapsack problem,您可以用通话时长和通话点数代替重量和价格。

    【讨论】:

      【解决方案2】:

      这只是一个非常基本的答案,但您可以尝试“蛮力”最佳解决方案:

      • 使用Combinatorics 库(它也在 NuGet 中)生成给定人员在给定时间段内(例如,展望未来一周)进行的所有调用排列。
      • 对于每个排列,按估计持续时间将调用分组为 8 小时的块,并为它们分配一个日期。
      • 遍历块 - 如果您过早调用,则丢弃该排列。否则根据通话是否在结束日期之前进行加减积分。将总分存储为该排列的分数。
      • 选择得分最高的排列。

      【讨论】:

      • 我对此一无所知...生成 6000 个(第一周的预期通话次数)呼叫积压的每个排列看起来非常昂贵且不是很“动态”...
      • @Leonardo - 这就是为什么它是“蛮力”解决方案。它不能很好地扩展,但它适用于足够小的数据集。即使您不将它用于您的实时代码,您也可能希望为一小部分测试数据集实现它,以便交叉检查您的算法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      • 2011-07-08
      • 2018-08-05
      • 1970-01-01
      • 2017-11-30
      • 2014-09-07
      • 2020-01-02
      相关资源
      最近更新 更多