Good question. Because the interior point solver does not explicitly define 
binding vs. non-binding constraints in the solution, any such classification 
must be done based on numerical tolerances. I’m pretty sure the intent of that 
code was to only zero out the shadow prices (i.e. mark the constraint as 
non-binding) if both the primal and dual solutions indicate that the constraint 
is not “active”. Not a very rigorous answer, I know, but it was an attempt at 
being conservative in marking a constraint as non-binding. If the shadow price 
is significant, then the constraint is still having an effect on the solution, 
even if the constraint value is not at the bound.

Hope this helps,

    Ray



> On Oct 26, 2015, at 6:45 AM, Camille Hamon <[email protected]> wrote:
> 
> Dear all,
>  
> I am implementing a search for the maximum loadability limit using an OPF 
> with dispatchable loads in Matpower. To model PV buses, I set generator 
> voltage set points as upper limits for the voltage magnitude at generator 
> buses and set the lower voltage limits at a low number (0.1 for example). 
> Also, I keep the reactive power upper limit. When the OPF has run, I check 
> the shadow prices of the upper bound constraints on voltage magnitudes to 
> identify the generators which are still PV buses and the generators which 
> have become PQ buses. During my testing, I ran into cases where the upper 
> bounds voltage constraints are non-binding, but the corresponding shadow 
> prices are nonzero. I believe it is due to the different thresholds used to 
> check binding constraints. In particular, as far as I understood, the shadow 
> prices of all non-binding constraints are set to zero by the following lines 
> (mips solver):
>  
> %% zero out multipliers on non-binding constraints
> mu(h < -opt.feastol & mu < mu_threshold) = 0;
>  
> My understanding is that the first condition h < -opt.feastol checks for 
> non-bining constraints (deviations from the limit h is larger than the 
> tolerance opt.feastol). I do not understand the second condition, however (mu 
> < mu_threshold), which checks for the magnitude of the Lagrange multipliers. 
> In my results, I have the case where h for a constraint is indeed larger than 
> the opt.feastol threshold (h=7 e-4) but the corresponding Lagrange multiplier 
> is larger than the mu_threshold (mu=2 e-4) so that the shadow price is not 
> set to zero. Note also that the product of h and mu for the corresponding 
> constraint is small enough for the last MIPS iteration to conclude on 
> convergence (i.e. the relative complementarity constraint is satisfied). 
>  
> My question would then be:
> -        What is the meaning of having the second check (mu < mu_threshold) 
> in identifying the non-binding constraints?
>  
> Kind regards,
> Camille Hamon
> Post doc
> Department of Electrical Power Engeneering
> Norwegian University of Science and Technology (NTNU)

Reply via email to