Hi Mathias, you can express the constraint using element constraints. Say the two sequences are x and y, you create two new sequences xx and yy (with appropriate length) and then post the following constraints:
for (int i=0; i<x.size(); i++) post(home, x[i] == element(xx,m+i)) for (int i=0; i<y.size(); i++) post(home, y[i] == element(yy,n+i)) for (int i=0; i<xx.size(); i++) post(home, xy[i] = x[i]+y[i]); If you need to constrain the "empty" positions to 0 (e.g. because your optimization function doesn't do that automatically), you can do that in addition: for (int i=0; i<xx.size(); i++) post(home, (i < m || i > m+x.size()) >> xx[i]==0)); for (int i=0; i<yy.size(); i++) post(home, (i < n || i > n+y.size()) >> yy[i]==0)); I didn't test the code, but I hope you get the idea. Christian's email just arrived - I think my solution is different in that the time series can be variables, which means you can't use regular. I understand that correctly from your description? Cheers, Guido On 12 Oct 2011, at 10:57, Mathias Dalheimer wrote: > Hi, > > I'm having trouble expressing the following constraints: I have two > IntVarArrays which contain short timeseries (i.e. consumption values for > one hour, while the remaining hours of one day are empty/not > constrained). The *position* of the constraints of the consumption can > move within the day, this is governed by two IntVars (m, n) (which are > my optimization goal, so the cost function is calculated depending on > the position variables). The underlying question is where to place the > consumption in order to optimize some cost function. > > Now I have some other constraints that depend on the position m and n of > the consumption. I need to sum the timeseries. So, as an example, I have > something like this (. denotes no constraint): > > > . . . 1 2 1 2 3 . . . . . . . . . // m=3 > . . . . . . . 2 4 5 6 5 . . . . . // n=8 > > Now my question: How do I encode a constraint that depends on the sum of > these two IntVarArrays while m and n (the position) can change? > > So, in the previous example, this would be: > > . . . 1 2 1 2 3 . . . . . . . . . // m=3 > . . . . . . . 2 4 5 6 5 . . . . . // n=8 > . . . 1 2 1 2 5 4 5 6 5 . . . . . // sum > > In another example with different m and n: > > 1 2 1 2 3 . . . . . . . . . . . . // m=0 > . . . . . . . 2 4 5 6 5 . . . . . // n=8 > 1 2 1 2 3 . . 2 4 5 6 5 . . . . . // sum > > Different m's and n's are being evaluated and an optimal set of m and n > is the result of the optimization. > > Thanks for any pointers, > -Mathias > > _______________________________________________ > Gecode users mailing list > [email protected] > https://www.gecode.org/mailman/listinfo/gecode-users -- Guido Tack, http://people.cs.kuleuven.be/~guido.tack/ _______________________________________________ Gecode users mailing list [email protected] https://www.gecode.org/mailman/listinfo/gecode-users
