Hi,

Just a query, can you point me any example code that demonstrates the whole
direct specification of extended OPF formulation described in section 7.1?

Regards,
Jubeyer



On Thu, Apr 25, 2019 at 10:50 AM Ray Zimmerman <[email protected]> wrote:

> The A matrix of (6.38) in the MATPOWER 7.0b1 User’s Manual will have to
> include the coefficients for all variables, both Pg and z.
>
>    Ray
>
> On Apr 22, 2019, at 10:06 PM, Jubeyer Rahman <[email protected]> wrote:
>
>
> Hi,
>
> Thanks a lot for your reply.
>
> Are you referring to Ar matrix ( The A matrix multiplied with Pg here)
> from the reserve formulation (since this is a subtraction with the variable
> z)?
>
> So, If I want to implement anything like, Pg-z*factor= Po; where Po is the
> dispatch in pre-contingency case how should I do it?
>
> The way I am thinking to do is, I will run the pre-contingency case,
> preserve the 'Pg' data, and pass it as the 'Pmin' for the redistpatch
> period. Then I will add the z variable with the OPF structure.
>
>  I apologize I could not come up with a proper formulation as I am not
> quite sure what I am thinking is correct or not.
>
> Regards,
> Jubeyer
>
>
>
>
>
>
>
>
>
>
>
> On Tue, Apr 16, 2019 at 9:01 AM Ray Zimmerman <[email protected]> wrote:
>
>> Add a single constraint of the form …
>>
>> A * Pg - z  = 0
>>
>> … where A is a row vector, Pg is the vector of generation and z is a new
>> scalar variable representing the total amount of the resdispatch.
>>
>>    Ray
>>
>>
>> On Apr 9, 2019, at 5:56 PM, Jubeyer Rahman <[email protected]> wrote:
>>
>> And for redispatch case as you have mentioned , if I want the generators
>> redispatch in a certain way (make them produce power like Pg+some
>> factor*some variable), how should I do that?
>>
>> On Tue, Apr 9, 2019 at 4:56 PM Jubeyer Rahman <[email protected]> wrote:
>>
>>> I am really sorry that I haven't been able to make it more clear.
>>> However, I will come up with a clear formulation later on.
>>>
>>> Actually, I have already formualted that and am getting some value for
>>> R. But I am not quite sure whether I have been able to get the cost
>>> formulation correct.
>>>
>>> So, for now , can you only tell me, that if I do get some value for R,
>>> which is supposed to come from some certain generator's, how can I make
>>> that calculated as a total power generation Pg+R from the gencost
>>> information and not from the reserve cost.
>>>
>>> On Tue, Apr 9, 2019 at 4:50 PM Ray Zimmerman <[email protected]> wrote:
>>>
>>>> I’m afraid I still don’t understand the problem you intend to solve.
>>>> The formulation you provided is completely equivalent to the standard OPF
>>>> with some additional variables and constraints that have no effect
>>>> ultimately (since r_i = 0 is feasible).
>>>>
>>>> It sounds like you want to apply some kind of constraint to Pg to
>>>> restrict redispatches from some initial dispatch or something, but the
>>>> formulation you provided does not accomplish that.
>>>>
>>>> So, it seems like the first step would be to get the problem
>>>> formulation clear and correct, then we can help if you have questions about
>>>> the implementation.
>>>>
>>>>     Ray
>>>>
>>>>
>>>> On Apr 9, 2019, at 4:33 PM, Jubeyer Rahman <[email protected]> wrote:
>>>>
>>>> Yes, I don't want the objective function to be affected in that way.
>>>> The reason of formulating that way is if I don't have all the generators
>>>> active in my system (in case  I loose one generator for example, I want the
>>>> rest of the generator's to respond in a certain way).
>>>>
>>>> On Tue, Apr 9, 2019 at 4:30 PM Ray Zimmerman <[email protected]> wrote:
>>>>
>>>>> I think there must be something missing. Because the addition of these
>>>>> variables and constraints will not affect the OPF solution at all. It will
>>>>> be the same as the standard OPF formulation with no reserves. That is, the
>>>>> original solution will still be both optimal (since there is no change to
>>>>> the objective function in (6.34)) and feasible (since r_i = 0 is feasible
>>>>> and imposes no additional restrictions on the problem).
>>>>>
>>>>> Your formulation as stated includes no reason for r_i to be non-zero.
>>>>>
>>>>>    Ray
>>>>>
>>>>>
>>>>>
>>>>> On Apr 9, 2019, at 3:33 PM, Jubeyer Rahman <[email protected]> wrote:
>>>>>
>>>>> Ok. Here they go:
>>>>>
>>>>> similar to 7.2
>>>>>
>>>>> 0<=r_i<=Pmax
>>>>>
>>>>> for 7.3: Since I don't want the cost to be calculated separately, I
>>>>> don't need anything here (reserves from generators should be calculated as
>>>>> the total power generation cost, no separate cost for generator)
>>>>>
>>>>> for 7.4
>>>>> pg^i+x*r_i<=pg^i,max
>>>>>
>>>>> x is given as parameters here.
>>>>>
>>>>> for 7.5; since I don't have zonal requirement I don't have anything
>>>>> for that.
>>>>>
>>>>> Let me know if you need anything for more clarification.
>>>>>
>>>>>
>>>>>
>>>>> On Tue, Apr 9, 2019 at 3:13 PM Ray Zimmerman <[email protected]> wrote:
>>>>>
>>>>>> Ok, so you are attempting to modify the existing fixed reserves
>>>>>> implementation to something with a similar, but not identical structure. 
>>>>>> I
>>>>>> think I need to fully understand the formulation. Can you provide the
>>>>>> equivalent of equations (7.2)–(7.5) for your problem so I can see exactly
>>>>>> where the differences are?
>>>>>>
>>>>>>    Ray
>>>>>>
>>>>>>
>>>>>> On Apr 9, 2019, at 11:43 AM, Jubeyer Rahman <[email protected]>
>>>>>> wrote:
>>>>>>
>>>>>> Ok. Thanks a lot for your reply.
>>>>>>
>>>>>>  What I am trying to implement is something like this 'Pg+x*R', where
>>>>>> 'Pg' is real power generation, x is a collection of factors (parameters)
>>>>>> usually fraction number ranging between 0 and 1, and R will be a variable
>>>>>> for reserves. Usually the minimum value for R is 0 and maximum value is
>>>>>> equal to the 'Pmax' for each generator asked to provide reserves. What I
>>>>>> also want is that the reserve cost to be ignored ,rather the cost of 
>>>>>> total
>>>>>> power generation 'Pg+x*R'  should be calculated from the generator cost
>>>>>> information and not from the reserve costs ( I have tried that by making
>>>>>> all the reserve costs zero). In addition to these I have no zonal reserve
>>>>>> requirement ( I have made the constraint deactivated and deleted the 
>>>>>> second
>>>>>> row of the mpc.reserves.zones, deactivated mpc.reserves.req and also
>>>>>> deactivated where  'req' has been implemented).
>>>>>>
>>>>>>
>>>>>> Can you suggest how can how I do it? or do you have any comments on
>>>>>> the process I am already following?
>>>>>>
>>>>>> Just to illustrate more on the reserve cost modification:
>>>>>>
>>>>>> For example, I have 'Pg' from  a particular generator  (generator 1)
>>>>>> 5 MW, now after implementing the reserve , it is supplying another 1 MW
>>>>>> from its capacity (it's Pmax is 10 MW). Now what I want is that this
>>>>>> (5+1)=6 MW generation cost to be calculated by using the polynomial cost
>>>>>> information from the mpc.gencost section.
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Tue, Apr 9, 2019 at 10:38 AM Ray Zimmerman <[email protected]>
>>>>>> wrote:
>>>>>>
>>>>>>> I think it might help me to have a high-level view of what you are
>>>>>>> trying to accomplish. If you are simply trying to *use* the already
>>>>>>> implemented fixed reserve capability, you shouldn’t need to even concern
>>>>>>> yourself at all with the implementation (i.e. the Ar matrix and the 
>>>>>>> various
>>>>>>> callback functions, etc.). In that case, all you need is to understand 
>>>>>>> the
>>>>>>> inputs in Table 7-5. If, on the other hand, you are modifying the
>>>>>>> implementation to do something other than what is currently implemented,
>>>>>>> then I need to understand what that is.
>>>>>>>
>>>>>>> In what is already implemented, the generation cost is simply the
>>>>>>> cost of Pg. There is a separate cost of R that is added as a user cost. 
>>>>>>> See
>>>>>>> (7.3). So the cost coefficients of R are provided in
>>>>>>> mpc.reserves.cost (see Table 7-5).
>>>>>>>
>>>>>>>     Ray
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Apr 8, 2019, at 2:39 PM, Jubeyer Rahman <[email protected]>
>>>>>>> wrote:
>>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> I have another few questions regarding the addition of the fixed
>>>>>>> zonal reserves. So, far I understand, after adding the reserves, the 
>>>>>>> real
>>>>>>> power output of the generator will be added with reserve amount, so in 
>>>>>>> the
>>>>>>> part of the objective function where real power cost is being 
>>>>>>> calculated,
>>>>>>> which power is fed into as for calculation is it the 'Pg' part of 
>>>>>>> 'Pg+R' or
>>>>>>> is it the total 'Pg'?
>>>>>>>
>>>>>>> If I want to implement a reation like 'Pg+x*R' , where x is a
>>>>>>> collection of parameters (n-by-1) , which place can I feed into these
>>>>>>> parameters? I am assuming, this should be the second column of the Ar
>>>>>>> matrix. Is that correct?
>>>>>>>
>>>>>>> Regards
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Fri, Apr 5, 2019 at 10:53 AM Jubeyer Rahman <[email protected]>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Please ignore the last email, I have figured this out. Every column
>>>>>>>> in the first row corresponds the generators supposed to participate in 
>>>>>>>> the
>>>>>>>> reserve provision , that's why they are made one.
>>>>>>>>
>>>>>>>> On Wed, Apr 3, 2019 at 5:27 PM Jubeyer Rahman <[email protected]>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> Are you talking about the columns in the second row?
>>>>>>>>>
>>>>>>>>> On Mon, Apr 1, 2019 at 5:21 PM Ray Zimmerman <[email protected]>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> The only thing you need to do is make sure the corresponding
>>>>>>>>>> column in mpc.reserves.zones is all zeros.
>>>>>>>>>>
>>>>>>>>>>    Ray
>>>>>>>>>>
>>>>>>>>>> On Apr 1, 2019, at 10:31 AM, Jubeyer Rahman <[email protected]>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>> Ok, I got your point and realized my mistake in understanding the
>>>>>>>>>> zone handling section. So, if I want some of the generator's 
>>>>>>>>>> choosing not
>>>>>>>>>> to provide ramp, should just setting the element of Identity matrix's
>>>>>>>>>> corresponding rows of first column of Ar be Ok? or I may need to 
>>>>>>>>>> change
>>>>>>>>>> something else as well?
>>>>>>>>>>
>>>>>>>>>> On Mon, Apr 1, 2019 at 9:45 AM Ray Zimmerman <[email protected]>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> Regarding your first question, as described by (7.2) in the
>>>>>>>>>>> User’s Manual, the reserve for a given generator is bounded above 
>>>>>>>>>>> by both
>>>>>>>>>>> any limit provided in mpc.reserves.qty (r_i^{max}) and by any
>>>>>>>>>>> physical ramp rate (∆_i) given in mpc.gen(:, RAMP_10). It just
>>>>>>>>>>> so happens that the example in t_case30_userfcn does not
>>>>>>>>>>> specify any physical ramp rates, but the code still needs to handle 
>>>>>>>>>>> cases
>>>>>>>>>>> which *do* provide physical ramp limits.
>>>>>>>>>>>
>>>>>>>>>>> I’m not sure why you say only two generators are supposed to
>>>>>>>>>>> take part in the reserve provision. In t_case30_userfcn there
>>>>>>>>>>> are two reserve zones defined, but all 6 generators are able to 
>>>>>>>>>>> participate
>>>>>>>>>>> in providing the required reserves.
>>>>>>>>>>>
>>>>>>>>>>> You may want to review carefully the formulation in (7.2)–(7.5)
>>>>>>>>>>> and Table 7-2.
>>>>>>>>>>>
>>>>>>>>>>>    Ray
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Mar 29, 2019, at 4:06 PM, Jubeyer Rahman <[email protected]>
>>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>> Referring to the 'userfcn_reserves_formulation', there is a line
>>>>>>>>>>> which is finding the value of k, which seems to be zero since none 
>>>>>>>>>>> of the
>>>>>>>>>>> data in  'Ramp_10' column  in t_case_30_userfcn is all zeros. so I 
>>>>>>>>>>> don't
>>>>>>>>>>> see any point of using the line
>>>>>>>>>>>
>>>>>>>>>>> Rmax(k)=mpc.gen(k,Ramp_10), can you explain why the code is
>>>>>>>>>>> written that way.
>>>>>>>>>>>
>>>>>>>>>>> From my understanding only two generators are supposed to take
>>>>>>>>>>> part in the reserve provision, but the while putting the value for 
>>>>>>>>>>> Rmax and
>>>>>>>>>>> Rmin, the code is considering all of them, which looks kind of 
>>>>>>>>>>> unreasonable
>>>>>>>>>>> to me. Can you please explain this section as well?
>>>>>>>>>>>
>>>>>>>>>>> Regards,
>>>>>>>>>>> Jubeyer
>>>>>>>>>>>
>>>>>>>>>>> On Fri, Mar 29, 2019 at 12:43 PM Ray Zimmerman <[email protected]>
>>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> That is correct. All of the callbacks are technically optional.
>>>>>>>>>>>> Typically you need the formulation callback to implement the
>>>>>>>>>>>> actual problem modifications, and possibly ext2int and int2ext if
>>>>>>>>>>>> you need to do some handling of input and output data, 
>>>>>>>>>>>> respectively. The
>>>>>>>>>>>> printpf and savecase callbacks are only needed if you want to
>>>>>>>>>>>> add things to the standard pretty-printed output or saved case 
>>>>>>>>>>>> data.
>>>>>>>>>>>>
>>>>>>>>>>>>     Ray
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On Mar 29, 2019, at 12:15 PM, Jubeyer Rahman <
>>>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>> Just how important it is to include printpf and savecase
>>>>>>>>>>>> callback during the extension of OPF, if I don't really need 
>>>>>>>>>>>> anything
>>>>>>>>>>>> printed out right after I call the power flow? Will it be still 
>>>>>>>>>>>> possible to
>>>>>>>>>>>> extract information from the 'results' when I say 
>>>>>>>>>>>> results=runopf(mycase)?
>>>>>>>>>>>>
>>>>>>>>>>>> To my understanding, after runopf being called, 'results'
>>>>>>>>>>>> struct will be returned and can be accessed by writing some 
>>>>>>>>>>>> command like
>>>>>>>>>>>> results.gen(:,2), etc. Let me know if I am thinking correctly or 
>>>>>>>>>>>> not?
>>>>>>>>>>>>
>>>>>>>>>>>> On Fri, Mar 29, 2019 at 9:53 AM Jubeyer Rahman <
>>>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Thank you very much.
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Fri, Mar 29, 2019 at 8:43 AM Ray Zimmerman <
>>>>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Are you attempting to use the provided extension for fixed
>>>>>>>>>>>>>> reserves, or are you attempting to write your own extension?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> If it’s the former, the full implementation is included in
>>>>>>>>>>>>>> toggle_reserves()
>>>>>>>>>>>>>> <http://www.pserc.cornell.edu/matpower/docs/ref/matpower6.0/toggle_reserves.html>.
>>>>>>>>>>>>>> Simply load your case file, use toggle_reserves() to enable
>>>>>>>>>>>>>> the callbacks, then run the OPF (or just call runopf_w_res()
>>>>>>>>>>>>>> <http://www.pserc.cornell.edu/matpower/docs/ref/matpower6.0/runopf_w_res.html>,
>>>>>>>>>>>>>> which does these 3 steps automatically for you).
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> If you are attempting to write your own extension, I suggest
>>>>>>>>>>>>>> making a copy of toggle_reserves.m and rename it and all of
>>>>>>>>>>>>>> the functions in it and use it as a template for your own 
>>>>>>>>>>>>>> extension.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>    Ray
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Mar 28, 2019, at 12:40 PM, Jubeyer Rahman <
>>>>>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Recently I was digging through the extending OPF chapter of
>>>>>>>>>>>>>> Matpower manual, but I don't quite catch the process. Regarding 
>>>>>>>>>>>>>> the example
>>>>>>>>>>>>>> given there on 'Fixed zonal reserves' what I understand from my 
>>>>>>>>>>>>>> reading is,
>>>>>>>>>>>>>> it is required to write down a call back function for 
>>>>>>>>>>>>>> formulation along
>>>>>>>>>>>>>> with some call of callback functions. I have followed every 
>>>>>>>>>>>>>> steps mentioned
>>>>>>>>>>>>>> there but could not make the code run (I am using version 6.0). 
>>>>>>>>>>>>>> I am adding
>>>>>>>>>>>>>> my code snippet here for better conveying.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> %%%
>>>>>>>>>>>>>> mpc=loadcase('case30.m');
>>>>>>>>>>>>>> mpopt = mpoption('out.all', 0, 'verbose', 0);
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> mpc=add_usefcn(mpc,'formulation',@userfcn_reserves_formulation);
>>>>>>>>>>>>>> mpc=ext2int(mpc,mpopt);
>>>>>>>>>>>>>> results=runopf(mpc);
>>>>>>>>>>>>>> results=int2ext;
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> %%%%
>>>>>>>>>>>>>> *Error message:*
>>>>>>>>>>>>>> *Access to an object's fields is only permitted within its
>>>>>>>>>>>>>> methods.*
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I have added the mpc.reserve data(cost, req, zones) posted in
>>>>>>>>>>>>>> 't_case30_userfcns.m' file.
>>>>>>>>>>>>>> I have written the userfcn_reserves_formulation in a
>>>>>>>>>>>>>> different script , but  it is not working.
>>>>>>>>>>>>>> I didn't write the add_var and add_constraint explicitly
>>>>>>>>>>>>>> since the add_userfcn callback function already contains those.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Can you tell me what I am missing?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Regards,
>>>>>>>>>>>>>> Jubeyer
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>
>

Reply via email to