You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CPLEX中定义门集合的收货门与发货门子集

在CPLEX中定义收货门和发货门子集的方法

基于你提供的初始代码,以下是几种在CPLEX OPL中定义收货门集合Din和发货门集合Dout的常用方式,两种子集均为总门集合Doors的子集:

方式一:显式列举子集元素

适合子集元素固定、数量较少的场景,直接指定属于Din或Dout的门编号:

int numDoors=5;
range Doors=1..numDoors;

// 收货门子集Din,指定门1、3
{int} Din = {1, 3};
// 发货门子集Dout,指定门2、4、5
{int} Dout = {2, 4, 5};

方式二:通过过滤规则定义子集

如果子集划分有统一规则(比如编号奇偶、属性特征),用过滤表达式自动生成子集,灵活性更强:

int numDoors=5;
range Doors=1..numDoors;

// 收货门:编号为奇数的门
{int} Din = {d in Doors | d mod 2 == 1};
// 发货门:编号为偶数的门
{int} Dout = {d in Doors | d mod 2 == 0};

如果需要确保Dout是Doors中排除Din的部分,也可以直接写:

{int} Dout = Doors \ Din;

方式三:用布尔参数标记生成子集

适合需要动态调整子集的场景,先定义每个门的归属标记,再基于标记生成子集:

int numDoors=5;
range Doors=1..numDoors;

// 标记每个门是否为收货门(1=是,0=否)
int isIn[Doors] = [1, 0, 1, 0, 0];
// 标记每个门是否为发货门(1=是,0=否)
int isOut[Doors] = [0, 1, 0, 1, 1];

// 根据标记生成子集
{int} Din = {d in Doors | isIn[d] == 1};
{int} Dout = {d in Doors | isOut[d] == 1};

内容的提问来源于stack exchange,提问作者Kang Dong Ho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 04:05:05