解决分界调度的方法

时间:2012-12-28 16:17:03

标签: c# artificial-intelligence scheduling

我正面临一个问题,我在决定/找出解决问题的方法时遇到了问题。问题如下:

  

如果要拨打N个电话,请以最大限度的方式安排。

知道信息:

  • 待处理的电话号码
  • 号码来电者(将通过电话交谈的人)
  • 电话类型(提醒,结算,谈判等......)
  • 估算电话类型的持续时间(提醒:1分钟,结算:3分钟,协商:15分钟等)
  • 待处理的电话号码
  • 给定电话的理想日期
  • 给定电话的“最短”日期(之前不可能发生......)
  • 给定电话的“最长”日期(......之后不可能发生)
  • 一天只有8个小时
  • 规则:

  • 无法在“最短”日期之前或“最长”日期之后拨打电话
  • 提醒电话放置奖励1分,提醒电话错过-2分
  • 结算通话获奖6分,结算通话错过-9分
  • 谈判电话奖励20分,谈判电话错过-25分
  • 第一个打电话给John的电话必须由第一个人打电话给他。请注意,它没有,但是,如果您这样做,该通话将获得额外积分......
  • 我对A.I.有点了解。我能认识到这个问题适合全班,但我不知道采取哪种方法......我应该使用神经网络吗?图搜索?

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

    2 个答案:

    答案 0 :(得分:4)

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

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

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

    这听起来越来越像knapsack problem,您可以在呼叫持续时间和呼叫点中替换重量和价格。

    答案 1 :(得分:0)

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

    • 使用Combinatorics库(也在NuGet中)来生成给定人员在给定时间段内进行的每个调用排列(例如,查看未来一周)。
    • 对于每个排列,按估计的持续时间将呼叫分组为8小时的分块,并为其分配日期。
    • 遍历大块 - 如果你过早接到电话,就放弃这种排列。否则,根据是否在结束日期之前进行呼叫来添加或减少积分。将总分存储为该排列的分数。
    • 选择得分最高的排列。