Hello,
I am new to SAS and also using PROC OPTMODEL for the first time. I am trying to do unit commitment of generators.
I have loads from hour 1 to 24.
In a particular constraint, I wish to assign the next state of a variable based on a condition.
Code :
con count{i in PLANTS, j in HOUROP}:
if sum{i in PLANTS, j in HOUROP} use_plant[i,j] < pl_minup[i] then use_plant[i,j+1] = 1;
However, since my loads (j in HOUROP) has values from only 1 to 24, the following error appears
Error:
To avoid the error, you can use a logical condition in the constraint declaration:
con count{i in PLANTS, j in HOUROP: j+1 in HOUROP}:
But you also need to rewrite the IF-THEN logic as a linear constraint. Your desired implication is equivalent to its contrapositive:
/* if use_plant[i,j+1] = 0 then sum{i in PLANTS, j in HOUROP} use_plant[i,j] >= pl_minup[i] */
You can capture this with a big-M constraint:
pl_minup[i] - sum{i in PLANTS, j in HOUROP} use_plant[i,j] <= (pl_minup[i] - 0) * use_plant[i,j+1];
This simplifies to:
sum{i in PLANTS, j in HOUROP} use_plant[i,j] >= pl_minup[i] * (1 - use_plant[i,j+1]);
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
Learn how to run multiple linear regression models with and without interactions, presented by SAS user Alex Chaplin.
Find more tutorials on the SAS Users YouTube channel.