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

OPL 如何对字符串类型周集合中截至指定周的所有元素求和

OPL字符串类型周集合累加约束实现方案

你遇到的问题核心是OPL中字符串类型不能直接用比较运算符判断时间先后,有两种常用的实现方案:


方案1:提取周名称中的数字比较(适合固定格式命名的场景)

直接通过OPL内置的字符串处理函数提取周编号比较,代码如下:

forall ( w in weeks )
{
  sum ( ww in weeks : asInt(substring(ww, 5)) <= asInt(substring(w, 5)) ) x[ww] >= rhs[w];
}

说明:substring(ww,5)的作用是提取周字符串中Week 之后的数字部分,asInt将其转为整数后就可以正常比较大小。该方案无需额外定义变量,适合所有周名称严格遵循Week 数字格式的场景,即使周数为两位数(如Week 10)也可以正常兼容。


方案2:预定义周顺序映射(通用场景,兼容性更高)

如果周命名格式不固定,或者后续可能新增非连续编号的周,可以提前定义周的先后顺序映射,代码如下:

// 按时间先后顺序定义周列表,同时绑定顺序编号
{string} sortedWeeks = {"Week 1","Week 2","Week 3","Week 4"};
int weekSeq[sortedWeeks] = [1,2,3,4];

// 约束部分直接用预定义的顺序编号比较
forall ( w in sortedWeeks )
{
  sum ( ww in sortedWeeks : weekSeq[ww] <= weekSeq[w] ) x[ww] >= rhs[w];
}

说明:该方案不依赖周的命名规则,你只需要保证sortedWeeks和weekSeq的顺序和实际时间顺序一致即可,后续新增周时只需按顺序更新这两个变量就可以正常运行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:06:04