I have a small script/code and i want to impose some active constraints. In the code shown below, i have P[I,J] #= E and in the next line Result[I,E] #= J but this is throwing an instantiation error because E is not instantiated.
For these constraints i need to know what value is at P[I,J], so if i write it as E is P[I,J] then offcourse i will not get an instantiation error(incase i suspend next two constraints with suspend, e.g suspend:(P[I,J] #= E) but will it effect the activeness of a constraint because the assignment will not be delayed but only constraint will be delayed. Is there any alternative way to impose this constraint?
multifor([I,J] ,[1,1],[N,N]),param(P,ResultFirst),foreach(E,_) do
E #:: 1..9,
P[I,J] #= E,
(ResultFirst[I,E] #= J),
It would be nice if one could just write it the way you have done, but unfortunately this is currently not supported (assuming you are using ECLiPSe). If the array index
Eis uninstantiated at constraint setup time, you have to use an element/3 constraint. So, instead ofwrite