Sum(sum()) with optimization variable

20 views (last 30 days)
Andra Vartolomei
Andra Vartolomei on 15 Aug 2022
Commented: Jan on 18 Aug 2022
I want to write the following equation as a constraint
and x is an optimization variable.
I managed to get to following formulation
Constraint2 = sum(sum(x,3),1) <= ones(1,nRess)
Now the problem is, that I do not know how to change the running boundries of the inner sum, to the above given form (so not all the elements of the dimension 3, but only starting from l=t-pt_jr to t, and also while l>0).
pt_jr is a 2D matrix.
I tried to write it with sum(sum()) as I read about vectorization and didn't want to generate too long working times wir for loops.
Thanks ahead for any ideas.
  1 Comment
Walter Roberson
Walter Roberson on 15 Aug 2022
What if you multiply x by a logical condition ? That would zero out some locations, and that would add nothing to the sum.

Sign in to comment.

Answers (2)

Jan
Jan on 15 Aug 2022
Edited: Jan on 15 Aug 2022
Constraint2 = sum(x(:, :, (t - pt(j, r)):t), [1, 3]) <= 1;
  6 Comments
Andra Vartolomei
Andra Vartolomei on 15 Aug 2022
@Jan: should I build your intel into for-loops, like this?
pt= [15 22; 8 13; 10 15];
x = optimvar('x',3,2,50,'Type', 'integer','LowerBound',0,'UpperBound',1);
for r = 1:2
for j = 1:3;
for t = 1:50
if (t - pt(j,r) >0)
Constraint2 = squeeze(sum(sum(x(:, :, (t - pt(j, r)):t), 1), 3)) <= 1;
end
end
end
end
Regarding your comment to me using an old Matlab edition with the sum(sum(...)) approach - I am using the Version 2022a :)
Jan
Jan on 18 Aug 2022
@Torsten, @Andra Vartolomei: My guess was completely wrong. After:
nTasks = 3;
nRess = 2;
maxPT = 50;
x = optimvar('x',nTasks,nRess,maxPT,'Type', 'integer','LowerBound',0,'UpperBound',1);
x is not an array we can sum over. While I was talking about an array, the introduction of optimvar() was out of my view. I have no idea, what the realtion between the question and this code is.

Sign in to comment.


Bruno Luong
Bruno Luong on 15 Aug 2022
What about this:
L = reshape(1:size(x,3),1,1,[])
b = L >= t-pt_rj & L <= t;
Constraint2 = sum(sum(b.*x,3),1) <= ones(1,size(x,2))
  4 Comments
Andra Vartolomei
Andra Vartolomei on 18 Aug 2022
Edited: Andra Vartolomei on 18 Aug 2022
Thank you for your input and yes, I should have written more information but I was afraid that if it gets too long I will end up with no replies.
I tried adapting your approach, as it still does not work as I inted it to.
Here are the other requirements that I probably should have added from the start, and that need to be met:
  • t stands for time
  • x_jrt (optim. var.) has to schedule different tasks/jobs (j) to different ressources (r) at certain time points (t) along the time frame
  • In x this means, that every page (3rd dimension, t) represents a time point. At every time point/on every page a job (row) can be started by a resource (column)
  • there are two other constraints I consider:
  • (Constr. 1): that every jobs is being completed without interruption
  • (Constr. 2, this question): every resource can only work on one task at a time
  • (Cosntr. 3): tasks have to be finished if they are required for follow-up tasks
I tried to adapt your reply and didn't quite manage.
  • I need t (you set it to t=2) to be the time starting from 0 to whatever time frame is maximale needed/calculated earlier within the sum of max processing times (for example 50).
  • If a task (lets say 1) is started at t=0 and lasts 15 time units, there should be a 1 (one, number) in the 1st page (finished 1st time unit) where the resource A (column 1) took up the specific task (here 1) AND there should not be another 1 (one, number) in any of the following pages until task 1 is finished (in this case including page 15) for this resource (as it is "occupied" for the entire duration of this task, in this example 15 time units)
  • in my formulation pt_rj is the processing time that resource r requires for task j (here, 15 time units for task 1)
  • this is what I tried to formulate in Constraint 2
  • at time unit 16 the same resource could pick up the next task, as the processing time is over
As you can see, it's pretty hard to formualte the problem and I didn't want to overwhelm anyone with it, therefore I just posted the mathematical form I managed to formulate for this constraint.
Bruno Luong
Bruno Luong on 18 Aug 2022
I'm lost, it sounds like you are stuck with how to transforming whatever the scheduling problem you want to solve in math formulation, and not transforming math into matlab.
If that is the case I won't be able to help you, for the simple reason is that I don't understand what you wrote in the description.

Sign in to comment.

Products


Release

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!