组合问题示例

提供如何使用 CP Optimizer 对一些真实问题求解的示例。

汽车排序问题

在此问题中,建立了汽车装配线来在划分为单元的生产线上生产汽车。 具有五个单元可用于在汽车上安装选件,针对每个单元执行操作需要不同时间,定义为可在某段时间内处理的汽车数。 具有七辆不同的汽车,每辆汽车需要一组不同的选件。

生产规划指定要生产的每种汽车的数量。 该模型的目标是计算各个单元能够处理的汽车序列,同时在考虑单元负荷的情况下,尽可能减少要插入的空汽车的数量。

要访问此示例,请转至:examples/opl/models/Car

另请参阅《语言用户手册》中的汽车排序示例

配置问题

此问题引入了使用约束来消除对称的概念,并包含一些关注的建模问题。 此示例还说明了结构、通过变量建立索引的数组以及逻辑连接词。 此问题包括将一组电子卡通过电子接口插入机架。 每张卡以其所需的功耗为特征,而每个机架模型由其可提供的最大功耗、其接口数及其价格为特征。 插入机架的每张卡使用一个接口。 模型的目的是确定一组给定卡在可用机架中的分配。

要访问此示例,请转至:examples/opl/config

渐进式单位问题

有关问题和解法的描述,请参阅 The Progressive Party Problem: Integer Linear Programming and Constraint Programming Compared: Proceedings of the First International Conference on Principles and Practice of Constraint Programming(《渐进式单位问题:整数线性规划和约束规划比较:第一届约束规划原理与实践国际会议纪要》)Lecture Notes In Computer Science(计算机科学讲义)976 卷第 36-52 页(1995 出版,ISBN 为 3-540-60299-2)。

注:

如果正在 Preview Edition 中运行 CPLEX Optimization Studio,不支持此示例。

  • 示例包括:

    基本模型:examples/opl/PPP。 这可以使用缺省运行配置基本配置进行访问。

  • 另一个版本的模型访问 Excel 电子表格,可使用运行配置 Excel 版本进行访问。

体育问题

此问题涉及查找体育联盟的安排。 此联盟具有在为期 18 周的赛季中参加比赛的 10 个队。 每个队具有一个主场,在赛季期间各队之间互相比赛两次,一次比赛地点为主场,一次比赛地点为对手队的主场。 对于每次比赛,在其主场比赛的队称为主队;在对手队比赛的队称为客队。 总共具有 90 场比赛。

为期 18 周的赛季中每个星期都具有可向其分配比赛的 5 个相同时段。 每个队一周比赛一次。 对于每组队,这两个队在一个赛季中互为对手两次,这两次比赛必须安排在不同半赛季。 而且,这两次比赛的比赛时间必须安排至少相隔 6 周。 一个队必须在上半赛季或下半赛季(而不是这两者)在主场比赛。

短赛季指某个队在连续几周内在主场或客场参赛。 队具有的短赛季不能超过 3 周。 此问题的目标是最小化短赛季总数。

要访问此示例,请转至:examples/opl/sports

钢铁厂问题

此问题是从半成品的在建库存中可用的板坯构造钢卷。 假设对可请求的板坯数量没有限制,但仅提供了有限数量的板坯大小。

问题是选择用于制造带钢订单并满足以下约束的多个板坯:

  • 每个带钢订单都需要执行特定过程才能从板坯制造为带钢。 此流程按颜色编码。

  • 一个带钢订单只能从一个板坯制造。

  • 多个钢卷订单可从同一板坯构造。 但一个板坯可用于生产最多两个不同“颜色”的钢卷。

  • 从板坯构造的每个钢卷订单的大小总和不得超过板坯大小。

    注:

    如果正在 Preview Edition 中运行 CPLEX Optimization Studio,不支持此示例。

要访问此示例,请转至:examples/opl/steelmill

另请参阅《语言用户手册》中的 "约束编程:库存匹配问题"。

团队构建问题

公司的人力资源部门组织融合日欢迎新员工。

问题是配置遵循以下规则的 10 个团队(每个团队包含 6 名员工)。

  • 具有 30 名新员工和 30 名现有员工。 这些员工在 6 个不同部门(按字母顺序从 A 到 F)中工作。

  • 一个团队必须具有 3 名现有员工和 3 名新员工,且其中至少 4 名员工来自相同部门。

  • 一些新员工由现有员工培训,一名现有员工仅可培训一名新员工。

  • 接受培训的新员工必须与其导师来自同一个团队。

  • 此外,部门 A 和部门 B 不能在相同团队中;部门 E 和 部门 F 的员工不能在相同团队中。

  • 每名员工由 0 - 59 的数字表示;新员工为偶数,现有员工为奇数。

    服务 范围
    A 0-19
    B 20-39
    C 40-44
    D 45-49
    E 50-54
    F 55-59
  • 在部门 A 中:新导师/员工组为 0-1、2-3、4-5、6-7、8-9 和 10-11。

  • 在部门 B 中:新导师/员工组为 20-21、22-23、24-25、26-27、28-29 和 30-31。

  • 在部门 C、D、E 和 F 中,新导师/员工组为 40-41、42-43、45-46、47-48、50-51、52-53、55-56 和 57-58。

  • 人员编号 5 必须与人员 41 或人员 51 一起。

  • 人员编号 15 必须与人员 40 或人员 51 一起。

  • 人员编号 25 必须与人员 40 或人员 50 一起。

  • 此外,人员 20 与人员 24 一起,或者人员 22 与人员 50 一起。

要访问此示例,请转至:examples/opl/teambuilding

时间表问题

此模型对学校时间表问题进行求解。 结合教师技能、教室设备和学生课程需求,此模型为每节课程生成一个时间表,指定教师、开始时间和教室。

将使用约束来确保:

  • 课程在开始后结束,

  • 课程编号采用时间顺序,

  • 任何时候,一名教师仅需要一次,

  • 教室可指导规程,

  • 任何时候,一个教室仅需要一次,

  • 教室可支持规程,

  • 一个类一次遵循一节课程,

  • 对于给定类和规程,教师始终相同,

  • 课程在相同半天开始和结束,

  • 在指定规程之间插入休息时间,

  • 相同规程一天不能教授两次,且

  • 上午教授的规程在上午结束。

要减少决策变量数,可将课程开始时间用作实施资源(类、教师和教室)唯一性的时间点。

示例包括:

  • 基本模型:examples/opl/timetabling。 这可通过使用运行配置较小数据来访问。

  • 相同模型的另一个版本,可通过使用运行配置较大的数据来访问。

另请参阅《语言用户手册》中的时间制表示例