任何人都可以帮我解释为什么代码是不同的结果

Can anyone help me explain why the code are different results

下面有一个代码示例,谁能帮我解释一下为什么结果不同

int : m=3; 
int : n=2; 
array[1..m,1..n] of int: va=[|1,2|
                              3,4|
                              5,6|];
array [1..m,1..n] of var int : val;
constraint forall(i in 1..m,j in 1..n )( i<2->val[i,j]=va[i,j]+1 );
constraint forall(i in 1..m,j in 1..n )( i>=2->val[i,j]=va[i,j]+3 );
output [ show(val) ];

int : m=3;
int : n=2; 
array[1..m,1..n] of int: va=[|1,2|
                              3,4|
                              5,6|];
array [1..m,1..n] of var int : val;

constraint forall(i in 1..m,j in 1..n )( i>=2->val[i,j]=va[i,j]+3 /\ i<2->val[i,j]=va[i,j]+1 );

output [ show(val) ];

我是否可以在一个约束中编写此逻辑?

在你的第二个模型中,两个含义 (->) 和连词 (/\) 绑定不同,然后使用两个 constraint 部分。

以下给出与模型 1 相同的结果。请注意含义周围的括号:

int : m=3;
int : n=2; 
array[1..m,1..n] of int: va=[|1,2|
                              3,4|
                              5,6|];
array [1..m,1..n] of var int : val;

constraint forall(i in 1..m,j in 1..n )( (i>=2->val[i,j]=va[i,j]+3) /\
                                         (i<2->val[i,j]=va[i,j]+1) );

output [ show(val) ];

现在两个模型输出:

[2, 3, 6, 7, 8, 9]
----------
==========