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

如何修改CPLEX中基于tuple筛选夜间作业集合的代码

问题原因

你原代码的筛选逻辑存在错误:你定义的nightyes集合是所有作业的nightyes取值集合,对应你给出的示例数据,这个集合实际值为{0,1}。你在筛选集合D时引入了无关的n in nightyes迭代,只要nightyes集合里存在值为1的元素,所有作业都会被判定为符合条件,自然会返回全部作业。

正确修改方案

你不需要额外定义nightyes集合,直接匹配每个tuple元素自身的nightyes属性即可,修改后代码如下:

tuple night {
    int jobs;
    int nightyes;
}
{night} jobsnotturni = {<1,1>, <2,0>,<3,0>,<4,1>,<5,1>};
// 直接筛选当前tuple的nightyes属性等于1的作业
{int} D = {i.jobs | i in jobsnotturni : i.nightyes == 1};

修改后生成的D就是你预期的{1,4,5}。


如果你出于其他逻辑需要必须保留nightyes集合的定义,需要把迭代变量n和当前i的属性绑定,写法如下(该写法冗余,不推荐使用):

tuple night {
    int jobs;
    int nightyes;
}
{night} jobsnotturni = {<1,1>, <2,0>,<3,0>,<4,1>,<5,1>};
{int} nightyes = {i.nightyes|i in jobsnotturni };
// 绑定n等于当前i的nightyes属性再判断是否为1
{int} D = {i.jobs|i in jobsnotturni, n in nightyes : n == i.nightyes && n == 1};

内容的提问来源于stack exchange,提问作者Francesca

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:18:04