我有一个应该包含惩罚的 IntVar 数组。它们是通过将 a 和 b 的差乘以 attr[2] 来计算的。但如果 attr[3] 为 1,我想在乘以 attr[2] 之前对差值求平方。我找不到可以做到这一点的视图,但是到目前为止我正在尝试的方法需要更长的时间才能找到解决方案,如果我这样做了,我会收到一个断言错误。有没有办法实现我想要做的事情?
if(attr[3] == 1){
IntVar difSq = VF.bounded("squared difference", 0, 500, solver);
solver.post(ICF.square(difSq, VF.abs(VF.offset(a, -b))));
penalty[i] = VF.scale(difSq, attr[2]);
}else{
penalty[i] = VF.scale(VF.abs(VF.offset(a, -b)), attr[2]);
}