4

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

给定要打 N 个电话,以一种方式安排最多的电话。

了解信息:

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

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

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

    4

    2 回答 2

    4

    这对人工智能来说似乎不是问题。

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

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

    这听起来越来越像一个背包问题,你可以用通话时长和通话点来代替重量和价格。

    于 2012-12-28T16:24:28.660 回答
    0

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

    • 使用Combinatorics库(它也在 NuGet 中)生成给定人员在给定时间段内发出的所有调用排列(例如,展望未来一周)。
    • 对于每个排列,按估计的持续时间将调用分组为 8 小时的块,并为它们分配一个日期。
    • Iterate through the chunks - if you get to a call too early, discard that permutation. Otherwise add or subtract points based on whether the call was made before the end date. Store the total score as the score for that permutation.
    • Choose the permutation with the highest score.
    于 2012-12-28T18:22:54.943 回答