Hello,
I am working on implementing a TSPTW solver according to Pesant et al. in their paper "An exact constraint logic programming algorithm for the tsptw)
However in the model there exists the following constraint:
S[i] = j => S[epsilonj] != beta[i] with the exception that e[j] != (N+1), for all i in Vo (1)
In the above equation, subscripts are represented by square brackets and the operator "=>" means "implies". The constraint functionality that I wish to accomplish would then be something like
// Subtour elimination
forall (i in Vo)
{
if (epsilon[Si] != (N+1))
S[epsilon[Si]] != beta[i];
}
Where epsilon and beta are arrays with the same length as Vo
This however does not work, since according to the documentation: "Conditions in ifelse statements must be ground; that is, they must not contain decision variables."
Now this is very problematic since the model presented in the paper implies very strongly that the subscript j I need in eq. (1) to access the epsilon and beta vectors are in fact values of the dvar vector S.
Is there a way around this? Should I be modelling the "implies" operator in a different way? I also tried an alternative approech where i would write
// (4) Subtour elimination
forall (i in Vo : S[i] != (N+1))
{
S[epsilon[Si]] != beta[i];
}
This yielded an error regarding the usage of decision variables.
My variables are
int betaVo;
int epsilonVo;
dvar int SVo;
Thanks in advance.
PS. How does one invoke the proper formatting for code on this forum?
Topic

Re: On conditional constraints involving decision variables
20121012T12:05:02ZThis is the accepted answer. This is the accepted answer.Hello.
You can use just "=>" to model implications. For example:
using CP; dvar int x; subject to { x!=1 => x>5; }
Regarding the code formatting, it is necessary to write tags "(code)" before and after your code, however instead of () brackets use {} brackets. When you write the message there is a table of markups on the right from the edit box with your text. It's very easy to overlook. There's also preview tab above the edit box to see how the message will look like.
Best regards, Petr