Hi Alex,
Thank you for your response. I am not sure if I can simply use the inequality as you have suggested, because the inequality implies the maximum/minimum over the
entire time horizon of the cumul function, but I only want the max/min over some subset of the time horizon (i.e. local max/min).
I would like to append one more (complicating) details about the problem structure (that hopefully clarifies my intention):
- the start time of the jobs can be anywhere over the domain of the cumulative function of the sole resource
Also, to avoid confusion, I will refer to the fixed intervals of time as "zones" (e.g [10, 50] in the previous post). I will illustrate the problem in an example solution, where I would like to keep track of the max/min of the cumul function within a "zone".
Then, since the interval variables (representing jobs) can start anywhere in the domain of the cumul function, I found that I could not track the maximum or minimum of the cumul function as I would not know which jobs falls into the zone or outside of the zone.
For instance, for the following solution (where z denotes a zone and the resource has capacity of 6):
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
Time Horizon id |
- |
- |
- |
- |
z |
z |
z |
z |
z |
z |
z |
- |
- |
- |
Time "Zone" Locations |
[ |
J1 |
] |
|
[ |
J2 |
] |
[ |
J3 |
] |
|
|
|
Job Intervals (of fixed size) |
|
|
|
|
|
[ |
J4 |
] |
|
|
|
|
|
2 |
2 |
2 |
0 |
4 |
6 |
6 |
6 |
6 |
2 |
2 |
0 |
0 |
0 |
Cumul Function Value |
Ideally, I would like to penalize any capacity of the resource not used to full over the time "zone". In this solution, I will penalize t = {5, 10, 11} only, as the "zone" starts at t = 5 and ends at t = 11. One approximation I can compromise with is to only penalize (the total resource capacity - maximum usage over the time zone), which may be simpler, hence motivating my original question.
Does this make sense?
------------------------------
Louis Luo
------------------------------
Original Message:
Sent: Fri December 17, 2021 04:30 AM
From: ALEX FLEISCHER
Subject: Tracking Max/Min of Cumul Function within Fixed intervals
Hi,
you can add cumuls.
For instance,
using CP;range r=1..3;dvar interval itvs[i in 1..3] in i..i+5 size 5;// 3 simple cumulscumulFunction ci[i in r]=pulse(itvs[i],i);cumulFunction ci4=pulse(0,10,100);// sum of those 3 cumulscumulFunction sumc=sum(i in r) ci[i];cumulFunction sumc2=ci[1]+ci[3]-ci[2]+ci4;subject to{ sumc<=10; sumc2<=1000;}
works fine
Using this you could manage with what you need
------------------------------
[Alex] [Fleischer]
[EMEA CPLEX Optimization Technical Sales]
[IBM]
Original Message:
Sent: Thu December 16, 2021 03:22 PM
From: Louis Luo
Subject: Tracking Max/Min of Cumul Function within Fixed intervals
Hi,
In CP Optimizer, I was wondering is there a way to track the maximum or minimum of a cumulative function within some fixed interval that is a subset of cumul function's domain?
For instance, say I have a cumul function representing one big resource from time 0 to time 100, and I want to add, to an objective function, two linear costs associated with the minimum/maximum value of this cumulative function from time intervals [10, 50] and [50, 80], respectively.
I am aware that I can track the max of a cumul function (f) over its entire domain by the simple expression "f <= x", where x is an integer variable, and similarly the minimum. For a subset of the domain, I see on the documentation [1] that perhaps I can do this with "AlwaysIn" constraint, but I found that its arguments "h_min" and "h_max" cannot be (integer) variables during implementation.
One idea is that perhaps I can decompose single resource into separate ones segmented by the start and end times of these fixed intervals (e.g. [0, 10], [10, 50], [50, 80], [80, 100]), but that would involve using "Alternative" constraint and creating more interval variables, which I am reluctant to do. Is there a better way to accomplish this?
[1] https://www.ibm.com/docs/en/icos/20.1.0?topic=concepts-cumul-functions-in-cp-optimizer
Thanks,
Louis
------------------------------
Louis Luo
------------------------------
#DecisionOptimization