Hi
using CP;
range sequences = 1..2;
range intervals = 1..10;
int charac[intervals]=[0 ,1 ,0, 0 ,0 ,0 ,0 ,0, 0, 1];
dvar interval intv[i in intervals][a in sequences] optional size 1;
dvar sequence s[a in sequences] in all(i in intervals) intv[i][a];
cumulFunction f[a in sequences]=sum(i in intervals) pulse(intv[i][a],1);
dvar int v[i in intervals][a in sequences];
subject to
{
forall(a in sequences,i in intervals) v[i][a]==5*presenceOf(intv[i][a]) +1000*(1-presenceOf(intv[i][a]));
forall(a in sequences)
forall(i in intervals: charac[i] == 1)
(f[a] <= v[i][a]);
}
works fine
regards
------------------------------
[Alex] [Fleischer]
[EMEA CPLEX Optimization Technical Sales]
[IBM]
------------------------------
Original Message:
Sent: Mon January 04, 2021 07:31 AM
From: Tomas
Subject: Sequence of an interval?
Hi Alex,
Thanks for your reply. I tried your code and I saw that, if intervals are optional, unlimited expression error is obtained.
dvar interval intv[i in intervals][a in sequences] optional size 1;
As the intervals are distributed among the sequences (through an alternative constraint, similar to the sched_tcost example), intervals need to be optional. Actually I don't really know why, but this example doesn't work if intervals aren't optional.
------------------------------
Tomas
Original Message:
Sent: Thu December 31, 2020 03:55 AM
From: ALEX FLEISCHER
Subject: Sequence of an interval?
Hi
using CP;range sequences = 1..2;range intervals = 1..10;int charac[intervals]=[0 ,1 ,0, 0 ,0 ,0 ,0 ,0, 0, 1];dvar interval intv[i in intervals][a in sequences] size 1;dvar sequence s[a in sequences] in all(i in intervals) intv[i][a];cumulFunction f[a in sequences]=sum(i in intervals) pulse(intv[i][a],1);subject to{forall (a in sequences)forall(i in intervals: charac[i] == 1) (f[a] <= 5*(presenceOf(intv[i][a]) == 1)+1000*(presenceOf(intv[i][a]) == 0));}
works fine
regards
------------------------------
[Alex] [Fleischer]
[EMEA CPLEX Optimization Technical Sales]
[IBM]
Original Message:
Sent: Tue December 29, 2020 04:40 PM
From: Tomas
Subject: Sequence of an interval?
Hi everyone!
I have a cumul function for each sequence and I need to limit the value of this function based on the intervals in those sequences.
So, for example, if one of the intervals in a sequence has a characteristic of 1 the function will be f<=5.
The problem is that I don't know how to obtain the sequence from each interval (it's part of the problem).
These intervals are not repeated, they are distributed among the sequences.
//Example
range sequences = 1..2
int intervals = 1..10
int charac[intervals]=[0 1 0 0 0 0 0 0 0 1];
dvar interval intv[i in intervals][a in sequences] size 1;
dvar sequence s[a in sequences] in all(i in intervals) intv[c][a];
I have tried this with no success:
forall (a in sequences)
forall(i in Intervals: charac[i] == 1)
if (presenceOf(intv[i][a]) == True) {
f[a] <= 5;
}
Thanks for helping :)
------------------------------
Tomas
------------------------------
#DecisionOptimization