CPLEX运行出现`syntax error, unexpected +`i++位置语法报错咨询
CPLEX代码报错问题排查
你的代码存在3处核心语法错误,直接触发了syntax error, unexpected +报错:
- 外层for循环语法无效:
for(j==2)的写法不符合OPL语法规范,==是比较运算符,不能放在for循环的参数位置。如果你只需要j取固定值2,不需要套for循环,直接指定j=2即可;如果需要遍历j的取值,要按照OPL循环规则写为for(j in 取值范围)的格式。 - 循环写法混用错误:
for(i=1; i<=6; i++)是C风格的循环写法,仅能在OPL的execute脚本块中使用,如果你是在模型层定义约束,模型层的循环统一使用for(i in 1..6)的格式,错误的写法导致解析器读到i++中的+时无法识别,触发了对应报错。 - 约束定义不规范:你直接裸写了逻辑判断表达式,没有将其放入
subject to约束块中,也没有给约束命名,OPL中所有约束规则都必须定义在subject to块内才能被识别。同时你的逻辑表达式没有加括号明确优先级,容易出现语义歧义,建议补充括号。
正确的约束定义参考写法如下:
subject to { for(i in 1..6) { // 约束名可自定义,逻辑加括号明确优先级,固定j=2 y_xor_constraint[i]: (y[i][2][15] == 1 && y[i][2][16] == 0) || (y[i][2][15] == 0 && y[i][2][16] == 1); } }
内容的提问来源于stack exchange,提问作者Francesca
相关产品推荐
相关产品推荐

