组合问题示例
提供如何使用 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。 这可通过使用运行配置较小数据来访问。
相同模型的另一个版本,可通过使用运行配置较大的数据来访问。
另请参阅《语言用户手册》中的时间制表示例。