Hi,
int n=10;
range r=1..n;dvar boolean x[r];
dvar boolean start[r];
dvar int su[r];
dvar int res[r];subject to
{// example values
forall(i in r: i!=3 && i!=8) x[i]==1;
x[3]==0;
x[8]==0;// end of example values
start[1]==x[1];
forall(i in r:i!=1) start[i] == ((x[i]==1) && (x[i-1]==0));
forall(i in r) x[i]==0 => su[i]==0;
su[1]==x[1];
forall(i in r:i!=1) x[i]==1 => su[i]==su[i-1]+1;res[n]==su[n];
forall(i in r:i!=n) (x[i]==0) => res[i]==0;
forall(i in r:i!=n) ((x[i]==1) && (x[i+1]==0)) => res[i]==su[i];
forall(i in r:i!=n) ((x[i]==1) && (x[i+1]==1)) => res[i]==res[i+1];
}execute
{
writeln(res);
}
gives
[2 2 0 4 4 4 4 0 2 2]
regards
PS: Many how to at https://www.linkedin.com/pulse/how-opl-alex-fleischer/
Source: Re: Sum or count function