Thank you for you interpretation Prof Ray. Actually I have found a function called sgvm_add_shunts() in matpower -> extras ->syngrid, which looks like it may do what I want, but I am not sure because there is not too much annotation in its source code and user's manual.
--------------------------------------------- "MATPOWER discussion forum" <r...@cornell.edu>; 2020??9??10??(??????) ????10:48 "MATPOWER-L"<matpowe...@list.cornell.edu>; Re: optimal power flow with unit commitment using mixed integer programming So runuopf() begins by running an OPF with all generators turned on, with active power dispatches limited by PMIN and PMAX. Any unit that is dispatched at PMIN (and would be dispatched lower if the limit were relaxed) is said to have a binding PMIN limit and is therefore considered as a candidate for shutdown. It re-runs the OPF with each of these candidates shut down (one at a time) and continues the process with the one that produced the greatest decrease in objective function ?? terminating when the objective is not decreased by shutting down any of the units dispatched at PMIN. So on second thought, since your "shunt generators?? are always dispatched at PMIN (since PMIN = PMAX), they are always candidates for shutdown, so long as the nodal price of active power is positive. This means that runuopf() may actually give you a decent approximation to the solution of the problem after all. The last condition (positive nodal price) is necessary to ensure that it is the PMIN limit that is binding, not the PMAX limit. The binding limit is the one that would alter the solution if it were relaxed. However, runuopf() still requires that the problem be feasible with all generators turned on. It will not be able to shut down units to turn an infeasible problem into a feasible one ?? only to decrease the cost of a feasible problem. Ray