MATPOWER / most

MOST – MATPOWER Optimal Scheduling Tool, for steady-state power systems scheduling problems.
https://matpower.org/
Other
31 stars 11 forks source link

Feature request - User defined variables, constraints and costs #8

Open lordleoo opened 4 years ago

lordleoo commented 4 years ago

MOST does not support adding custom user-defined constraints, yet. Indeed MATPOWER allows that through the "add_userfcn" function, but MOST doesn't

The work-arounds I could think of are: add new constraints and costs manually Building the MOST model, without solving it. that is: set the mpoptions to: most.build_model = true; most.solve_model = false;

Use the functions: build the A, L, U and VS variables to add a new constraint; using the functions: init_indexed_name and add_lin_constraint. To understand how they work, you need to take a deep look at the MOST.m file

Set: build_model = false; solve_model = true;

and call MOST a second time, with your modified model as the input to MOST There is currently a bug that would prevent this. I reported this bug in a separate earlier issue. The bug-fix is also mentioned there.

Note: you have to add you new constraints and variables with the commands: init_indexed_name and add_lin_constraint. modifying the matrices: mdi.QP.A, mdi.QP.l, mdi.QP.u would not work, because these matrices are over-written inside MOST.m

The developers of MOST.m may want to change that behavior, because generating mdi.QP takes a lot of time for large models.

a messy workaround is to build your own A, l and u and call the solver manually and outside most.m, that is:

if UC [mdo.QP.x, mdo.QP.f, mdo.QP.exitflag, mdo.QP.output, mdo.QP.lambda ] = ... miqps_matpower( mdi.QP.H, mdi.QP.C, mdi.QP.A, ... mdi.QP.l, mdi.QP.u, mdi.QP.xmin, mdi.QP.xmax, ... [], mdi.QP.vtype, mdo.QP.opt); else [mdo.QP.x, mdo.QP.f, mdo.QP.exitflag, mdo.QP.output, mdo.QP.lambda ] = ... qps_matpower( mdi.QP.H, mdi.QP.C, mdi.QP.A, ... mdi.QP.l, mdi.QP.u, mdi.QP.xmin, mdi.QP.xmax, ... [], mdo.QP.opt); end

I am currently working on a few papers and have already implemented several cases of custom constraints, new variables and new costs. Once the paper is published, I'll share these along with a brief explanation. An example of a constraint which isn't currently supported is:

but there is no constraint for: maximum-up-time!