Hi @jimhSAIntencoord,
Thanks for following up on this.
First, I’ll try to clarify some language. Remember, a production cost model representing a power market is an optimization problem. An optimization problem does not determine when things are “needed” based on some criteria. When an optimization problem is solved, the optimization engine, or “solver”, simply determines what is the value of all variables subject to a set of constraints that results in the minimum value for the objective function. In the case of power market models, the variables that are primarily of interest are the power injection and unit commitment of the generators, the constraints are their operating bounds, and the objective function represents the total cost of operating the system.
I understand this is challenging. The solver is robotic. A modeler must change their frame of reference and help guide it to a realistic solution. This means that you cannot rely on the solver to determine when flexible demand is needed. You either need to tell it directly when flexible demand is needed, or you need to carefully specify when demand flexibility is an option. Once those constraints are defined, the solver will do the rest. Below is a bit deeper explanation of how this works in SAInt.
When a user specifies a PSET event for an EDEM object, this tells the solver that the power withdrawal variable P for that object is equal to the value of PSET: P=PSET. The simplest way to make demand “flexible” in SAInt is to use the PSETPRC property. This tells the solver that the power withdrawal variable P for that object must be less than or equal to PSET: P≤PSET. In this case, it also tells the solver that the objective function should increase by a value of PSETPRC if there is any deviation between P and PSET: the objective function term is (PSET-P)*PSETPRC. In terms of plain English, setting PSETPRC will allow the demand to “curtail” its power withdrawal P if it pays the rate of the “penalty price” PSETPRC.
When a user specifies a PAVG event for an EDEM object, this is entirely different. In this case, the solver is given the following constraint:

This is a much more sophisticated representation of “flexible” demand. In terms of plain English, setting PAVG will allow the demand to participate in the market and its power withdrawal variable P at each timestep will be optimized by the solver – along with the value of all other variables – to minimize overall system cost.
The key thing to understand here is that in the absence of additional constraints, the optimal solution will appear very extreme and perhaps unrealistic depending on what the demand is representing. This aligns with what you are describing. Fortunately for you, there are many options available to help the solver find a solution that is realistic. The best solution is to add additional constraints. I would recommend that you also define PMIN and PMAX in conjunction with a PAVG event. This allows you to constrain how much demand is “flexible” at any given time for a specific object.
Using a PAVG event is an advanced but very powerful (and fun!) application in SAInt. However, with great power comes great responsibility
. A couple of other things to keep in mind:
- If both a PAVG and PSET event are defined, the software will ignore the PAVG event and use the PSET event.
- Some of the Default Charts are not configured to work well with PAVG events out-of-the-box, so be careful!
I hope this helps, and please feel free to continue the conversation here if anything else needs to be clarified.
Happy modeling!