语法示例

提供在 OPL CP 模型中支持浮点表达式、元素约束语法和专用约束的示例。

Euler 问题

此问题也称为“骑士跳马棋”,是涉及骑士走棋盘的数学问题。 骑士放置在空棋盘上,根据下棋规则移动,在每个方格中只能放置一次。 此问题具有数亿解法,其中大约有 122,000,000 种解法,骑士可完成方格,从此方格骑士将攻击开始方格。 此类棋盘操作描述为已结束。 否则,此棋盘操作描述为开放。 在问题的 Euler 版本中,骑士必须以其原始位置结束。

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

浮点表达式问题

CP 仅支持整数决策变量。 但是,可以约束浮点表达式,或将其用作目标词。 还可以使用 dexpr 关键字声明浮点表达式。

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

二次分配问题

在 CP 中,可以通过其中一个(或多个)索引(为决策变量索引)访问数组。 使用此元素约束的示例为二次分配问题。 这是基于位置理论中标准问题的组合优化的示例。 将为您提供包含 n 件产品和 n 个站点的集合,且会指示您将每件产品分配到一个站点。 具有 size 件产品要在 size 个站点中进行构建,perm 是决策变量。 问题是查找可最小化运输成本的产品到产品站点的分配。 运输成本取决于各站点之间的距离以及输入到生产站点所需的产品的必需流。

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

人才问题

此问题包含规划电影生产。 必须制作一组电影场景,其中各个演员扮演其角色。 规划包含决定要制作场景的时段。

数据包含要制作的场景、演员以及哪个演员参与哪些场景。 此外,演员表示成本,因为从其出现在场景的第一个时段到最后一个时段都会收取费用。 目标是最小化演员的空闲成本。

此模型使用问题的双重表示。 数组用于表示为每个场景规划哪个时段,另一个数组表示为每个时段规划的场景。 两个数组使用 inverse 约束进行链接。 然后,可以将所有其他问题元素轻松编写为这些决策变量的表达式。

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