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