CPLEX中合并元组时Vl.add报“missing expression”错误求解决
修复DRL中Combination_L_T实例化的"missing expression"错误
错误原因是你在Vl.add()中使用<>符号创建Combination_L_T实例的方式不符合DRL语言的语法规范,DRL中创建自定义tuple(事实对象)实例需要使用new关键字调用构造器。
修复方案
你需要把实例化的语法替换为new Combination_L_T(...)的形式,有两种具体实现方式:
方式1:按字段定义顺序传参
这种方式简洁,依赖元组字段的定义顺序:
tuple Combination_L_T{ int rooms; int days; int slots; int instructors; int studentgroups; int courses; }; {Combination_L_T} Vl = {}; execute { for (var p in L){ for (var q in T){ Vl.add(new Combination_L_T(p.rooms, q.days, q.slots, p.instructors, p.studentgroups, p.courses)); }; }; };
方式2:命名参数传参
这种方式更清晰,即使后续元组字段顺序调整也不会出错,健壮性更强:
tuple Combination_L_T{ int rooms; int days; int slots; int instructors; int studentgroups; int courses; }; {Combination_L_T} Vl = {}; execute { for (var p in L){ for (var q in T){ Vl.add(new Combination_L_T(rooms = p.rooms, days = q.days, slots = q.slots, instructors = p.instructors, studentgroups = p.studentgroups, courses = p.courses)); }; }; };
原理说明
DRL语言中,自定义tuple属于事实对象的一种,必须通过new关键字调用对应的构造器来创建实例,<>符号通常用于集合字面量(如List<Integer> list = <1,2,3>),不能用来创建自定义tuple的实例,这就是导致"missing expression"错误的核心原因。
内容的提问来源于stack exchange,提问作者Yoom
相关产品推荐
相关产品推荐

