Page 1 of 1

Results in the right order/position of the week

Posted: Wed Feb 13, 2019 6:02 pm
by billgen
Hi!

I would like to to solve a weekly problem on a daily basis and the results to be written in the right order/position of the week.

More specifically I have:

sets
t1 "hours_week" / 1 * 168/
t2(t1) "hours_day /1 * 24/ ;

Variable
X(i,t2) ;

Parameter
Xpar(i,t1) ;

then I solve the problem for the first day and I want the results X(i,t2) to be stored in Xpar in the right order:

Xpar(i,t1)$(ord(t1)=1 and ord(t1)<=24) = X.l(i,t2);

But I get the message "error 149 (Uncontrolled set entered as constant)".

Any ideas on how to overcome this issue?

Thank you very much in advance!

Re: Results in the right order/position of the week

Posted: Thu Feb 14, 2019 8:05 am
by Fred
Hi,

The "Uncontrolled set" refers to t2 which you are using on the right hand side of the assignment without controlling it.
You could either replace the ord() stuff by just using t2 on the left hand side as well

Code: Select all

Xpar(i,t2) = X.l(i,t2);
or you might want to declare variable X over super set t1 and then use t1 on the right hand side of your assignment

Code: Select all

Variable X(i,t1) ;
[...]
Xpar(i,t1)$(ord(t1)=1 and ord(t1)<=24) = X.l(i,t1);
or just do both

Code: Select all

Variable X(i,t1) ;
[...]
Xpar(i,t2) = X.l(i,t2);
I hope this helps!

Fred

Re: Results in the right order/position of the week

Posted: Thu Feb 14, 2019 9:21 pm
by billgen
Hi Fred,

Thank you for your prompt reply.

The problem arises with the second loop where I have to store the resuts of the second day of the variable X(i,t2) (where t2 is again between 1 and 24) in parameter Xpar(i,t1), in the right order. I would then like to do the following but unfortunately is not working:

Xpar(i,t1)$(ord(t1)=25 and ord(t1)<=48) = X.l(i,t2);

Is there any way to do that by avoiding solving my problem with X(i,t1) but instead using X(i,t2)?

Thanks again!

Re: Results in the right order/position of the week

Posted: Fri Feb 15, 2019 8:16 am
by Fred
Hi,

If I understand you correctly, you basically want to map 7 daily solutions of hours 1...24 to the hours of week 1...168

day1 1...24 --> 1..24
day2 1...24 --> 25..48
...
day7 1...24 --> 145..168

The following should do he trick:

Code: Select all

set d days /d1*d7/;
loop(d,
* some solve statements that gives you X.l(i,t2)
  Xpar(i,t1)$(ord(t1)>(ord(d)-1)*24 and ord(t1)<=(ord(d))*24) = sum(t2$(ord(t2)=ord(t1)-(ord(d)-1)*24), X.l(i,t2));
);
I am not convinced that this is the best solution. Maybe you could solve your model for the correct set of hours directly instead of doing such a mapping afterwards. If you would be wiling to share your code, users might pick up on that and come up with more elegant suggestions.

Best,
Fred

Re: Results in the right order/position of the week

Posted: Sun Feb 17, 2019 4:37 pm
by billgen
Fred thank you very much for your useful reply. It seems that it’s working.

In case that I got stuck again,I will revert and kindly ask.

Kind regards,
Bill