I wasn’t able to run the case due to missing MMloadbuses() file. Is it true
that you are now simply trying to understand why the 10-period variable load
profile converges while the 11-period version is infeasible? Assuming ramp
rates are adequate, I suspect that the final period is infeasible, even as a
stand-alone DC OPF. While the load may still be between the sum of PMIN and the
sum of PMAX, that does not mean that it is feasible. The network that connects
the loads and generators may not allow the precise pattern of flows required to
meet that balance. It could be network constraints (which you could confirm by
setting RATE_A in the branch matrix to zero) or it might simply be that
Kirchhoff’s laws do not allow the needed degrees of freedom.
If it’s simple to set up period 11 as a single DC OPF, I suggest you try that.
You could even use the very latest MATPOWER from GitHub and turn on soft limits
to see which limits have to be violated in order to find a solution. You might
also try increasing the load in the last period until you do see convergence
and then gradually decreasing it while watching how the dispatches change. That
might give you some insight into which constraints conflict.
Ray
> On Oct 9, 2018, at 12:47 PM, Michal Polecki <[email protected]>
> wrote:
>
> Dear Professor,
>
> first of all thank you for your help.
>
> I modify profiles.values in the main file just because it is more clear to
> me. I believe it doesnt matter in what way we change the load profile matrix.
>
> To present my problem I attach fragment of my results with changed load
> profile. I have prepared 4 different UC problems.
>
>
> -----------------------------------------------------------------
> Assumtions:
> Generators 1-13 must work
> Pmin of generators 1-13 is 0.9Pmax
> -----> sum(mpc.gen([1:13],PMAX)) = 4450
> -----> sum(mpc.gen([1:13],PMIN)) = 4005
> -----> min(mpc.gen(14:end),PMIN) = 43.7
> -----> no wind farms (to simplify)
> -----------------------------------------------------------------
>
>
> ______________________________________________________________________________________________
> Case no. 1 Xl = 4050/4242 (flat load profile equal 4050)
> nt = 11;
>
> ms.Pg =
> 495.0000 495.0000 495.0000 495.0000 495.0000 495.0000 495.0000
> 495.0000 495.0000 495.0000 495.0000
> 166.5000 166.5000 166.5000 166.5000 166.5000 166.5000 166.5000
> 166.5000 166.5000 166.5000 166.5000
> 288.0000 288.0000 288.0000 288.0000 288.0000 288.0000 288.0000
> 288.0000 288.0000 288.0000 288.0000
> 372.6000 372.6000 372.6000 372.6000 372.6000 372.6000 372.6000
> 372.6000 372.6000 372.6000 372.6000
> 96.3000 96.3000 96.3000 96.3000 96.3000 96.3000 96.3000
> 96.3000 96.3000 96.3000 96.3000
> 107.1000 107.1000 107.1000 107.1000 107.1000 107.1000 107.1000
> 107.1000 107.1000 107.1000 107.1000
> 273.6000 273.6000 273.6000 273.6000 273.6000 273.6000 273.6000
> 273.6000 273.6000 273.6000 273.6000
> 133.2000 133.2000 133.2000 133.2000 133.2000 133.2000 133.2000
> 133.2000 133.2000 133.2000 133.2000
> 229.5000 229.5000 229.5000 229.5000 229.5000 229.5000 229.5000
> 229.5000 229.5000 229.5000 229.5000
> 234.0000 234.0000 234.0000 234.0000 234.0000 234.0000 234.0000
> 234.0000 234.0000 234.0000 234.0000
> 441.9000 441.9000 441.9000 441.9000 441.9000 441.9000 441.9000
> 441.9000 441.9000 441.9000 441.9000
> 442.8000 442.8000 442.8000 442.8000 442.8000 442.8000 442.8000
> 442.8000 442.8000 442.8000 442.8000
> 724.6800 724.6800 724.6800 724.6800 724.6800 724.6800 724.6800
> 724.6800 724.6800 724.6800 724.6800
> 0 0 0 0 0 0 0
> 0 0 0 0
> 44.8200 44.8200 44.8200 44.8200 44.8200 44.8200 44.8200
> 44.8200 44.8200 44.8200 44.8200
> 0 0 0 0 0 0 0
> 0 0 0 0
> 0 0 0 0 0 0 0
> 0 0 0 0
> 0 0 0 0 0 0 0
> 0 0 0 0
> 0 0 0 0 0 0 0
> 0 0 0 0
> ______________________________________________________________________________________________
> Case no. 2 Xl = 4550/4242 (flat load profile equal 4550)
> nt = 11;
>
> ms.Pg =
> 495.0000 495.0000 495.0000 495.0000 495.0000 495.0000 495.0000
> 495.0000 495.0000 495.0000 495.0000
> 166.5000 166.5000 166.5000 166.5000 166.5000 166.5000 166.5000
> 166.5000 166.5000 166.5000 166.5000
> 288.0000 288.0000 288.0000 288.0000 288.0000 288.0000 288.0000
> 288.0000 288.0000 288.0000 288.0000
> 372.6000 372.6000 372.6000 372.6000 372.6000 372.6000 372.6000
> 372.6000 372.6000 372.6000 372.6000
> 96.3000 96.3000 96.3000 96.3000 96.3000 96.3000 96.3000
> 96.3000 96.3000 96.3000 96.3000
> 107.1000 107.1000 107.1000 107.1000 107.1000 107.1000 107.1000
> 107.1000 107.1000 107.1000 107.1000
> 273.6000 273.6000 273.6000 273.6000 273.6000 273.6000 273.6000
> 273.6000 273.6000 273.6000 273.6000
> 133.2000 133.2000 133.2000 133.2000 133.2000 133.2000 133.2000
> 133.2000 133.2000 133.2000 133.2000
> 229.5000 229.5000 229.5000 229.5000 229.5000 229.5000 229.5000
> 229.5000 229.5000 229.5000 229.5000
> 234.0000 234.0000 234.0000 234.0000 234.0000 234.0000 234.0000
> 234.0000 234.0000 234.0000 234.0000
> 441.9000 441.9000 441.9000 441.9000 441.9000 441.9000 441.9000
> 441.9000 441.9000 441.9000 441.9000
> 442.8000 442.8000 442.8000 442.8000 442.8000 442.8000 442.8000
> 442.8000 442.8000 442.8000 442.8000
> 724.6800 724.6800 724.6800 724.6800 724.6800 724.6800 724.6800
> 724.6800 724.6800 724.6800 724.6800
> 0 0 0 0 0 0 0
> 0 0 0 0
> 0 0 0 0 0 0 0
> 0 0 0 0
> 438.4222 438.4221 438.4221 438.4221 438.4221 438.4221 438.4221
> 438.4221 438.4221 438.4221 438.4221
> 0 0 0 0 0 0 0
> 0 0 0 0
> 0 0 0 0 0 0 0
> 0 0 0 0
> 106.3978 106.3979 106.3979 106.3979 106.3979 106.3979 106.3979
> 106.3979 106.3979 106.3979 106.3979
>
>
>
> ______________________________________________________________________________________________
> Case no. 3 Xl = 4550/4242 (variable profile with Pmax = 4550)
> nt = 10;
> ms.Pg =
> 515.2955 531.7955 548.2955 531.7955 515.2955 498.7955 495.0000
> 495.0000 495.0000 495.0000
> 175.9670 181.0074 185.0000 180.9662 176.0235 174.6296 170.9017
> 167.1316 168.5251 166.5000
> 317.6509 320.0000 320.0000 320.0000 317.8575 308.6551 299.0551
> 289.4551 290.4058 288.0000
> 400.9407 413.3607 414.0000 413.3827 400.9627 396.0318 385.2871
> 374.4205 378.4369 372.6000
> 107.0000 107.0000 107.0000 107.0000 106.5686 103.3586 100.1486
> 96.9386 96.3000 96.3000
> 119.0000 119.0000 119.0000 119.0000 118.5202 114.9502 111.3802
> 107.8102 107.1000 107.1000
> 301.7684 304.0000 304.0000 304.0000 301.9647 293.2223 284.1023
> 274.9823 275.8855 273.6000
> 140.7736 144.8059 148.0000 144.7730 140.8188 139.7036 136.7214
> 133.7053 134.8201 133.2000
> 253.1281 255.0000 255.0000 255.0000 253.2927 245.9595 238.3095
> 230.6595 231.4171 229.5000
> 258.0914 260.0000 260.0000 260.0000 258.2592 250.7823 242.9823
> 235.1823 235.9547 234.0000
> 475.5118 490.2418 491.0000 490.2678 475.5378 469.6898 456.9467
> 444.0591 448.8225 441.9000
> 476.4802 491.2402 492.0000 491.2663 476.5063 470.6464 457.8774
> 444.9635 449.7366 442.8000
> 754.3925 778.5485 802.7045 778.5485 754.3925 730.2365 724.6800
> 724.6800 724.6800 724.6800
> 0 0 0 0 0 0 0
> 0 0 0
> 104.0000 104.0000 104.0000 104.0000 104.0000 103.3388 96.6078
> 81.0120 62.9160 44.8200
> 0 0 0 0 0 0 0
> 0 0 0
> 0 0 0 0 0 0 0
> 0 0 0
> 0 0 0 0 0 0 0
> 0 0 0
> 0 0 0 0 0 0 0
> 0 0 0
>
> ______________________________________________________________________________________________
> Case no. 4 Xl = 4550/4242 (variable profile with Pmax = 4550)
> nt = 11;
>
> MOST: MIQP solver 'GUROBI' failed with exit flag = -4
> You can query the workspace to debug.
> When finished, type the word "return" to continue.
> ______________________________________________________________________________________________
>
> The last case is something I dont understand. However Pload(11) = 4039.9 the
> UC is cannot be converged. If the generator 15 is shutdown it is would
> possible to get the UC calculated.I assume this is because Gurobi is not
> taking startups nad shutdowns into account at all. I attach m-files and 3
> figures for you if you could check it. Thank you very much.
>
> Best Regards,
> Michal Polecki
>
>
> On 10/08/18 15:28, Ray Zimmerman <[email protected]> wrote:
>>
>> There is nothing here that is necessarily an error, though it’s not clear to
>> me why you are modifying the load profile after loading it with
>> getprofiles(), as opposed to modifying the profile file itself, though I’m
>> sure there could be valid reasons to do it that way, depending on the
>> context.
>>
>>
>> But I still think answering my other question is critical for tracking down
>> what is going on. Namely, have you confirmed that the load profile is not
>> being applied? Is the generation schedule in the result completely flat?
>>
>> Ray
>>
>>
>>> On Sep 29, 2018, at 2:22 AM, Michal Polecki <[email protected]
>>> <mailto:[email protected]>> wrote:
>>>
>>> Dear Profesor,
>>>
>>> I can share it. It is quite complicated though. I'll send you 4 files
>>> necessary for obtaining the load profile.
>>>
>>> To use the files in Matpower I wrote a code like this:
>>>
>>> loadbuses = MMloadbuses(mpc);
>>> profiles = getprofiles('MM_ex_load_profile_118bus');
>>> profiles.rows = loadbuses;
>>> profiles.values(:,1,:) = MMloads_profiles(mpc,nt);
>>>
>>>
>>> Can you spot any mistakes?
>>>
>>> Best Regards,
>>> Michał Połecki
>>>
>>>
>>> On 09/28/18 16:02, Ray Zimmerman <[email protected]
>>> <mailto:[email protected]>> wrote:
>>>>
>>>> I’m afraid I can’t guess without seeing the details of what you are doing.
>>>> But, have you confirmed that the load profile is not being applied? Is the
>>>> generation schedule in the result completely flat?
>>>>
>>>>
>>>> If so, can you share the load profile file you are using? It should look
>>>> something like ex_load_profile.m.
>>>>
>>>> Ray
>>>>
>>>>
>>>>
>>>>> On Sep 26, 2018, at 2:48 PM, Michal Polecki <[email protected]
>>>>> <>> wrote:
>>>>>
>>>>> Dear Profesor,
>>>>>
>>>>> first of all thank you for your time. To tell the story short: I want to
>>>>> perform ecomonic wind power curtailment.
>>>>>
>>>>> Yes, I meant length of the planning hotizon (usually called nt).
>>>>> I model wind as deterministic.
>>>>> Yes, the wind is included in the commitment (this is the purpose of the
>>>>> whole analysis. As I wrote, my goal is to observe the economic
>>>>> curatilment of wind farms)
>>>>> I started from zero costs of start-ups and shutdowns. What is unexpected
>>>>> about the results is the fact that program gives me fixed UC. You have
>>>>> already written in the other e-mail that:
>>>>>
>>>>> "My question was whether you checked the MOST results for the cases that
>>>>> run but do not include any startup or shutdown of units to confirm that
>>>>> the total generation is tracking the load profile you are attempting to
>>>>> specify. If there is an error somewhere in the inputs that prevents the
>>>>> load profile being applied as expected, it would result in a fixed
>>>>> commitment schedule like this"
>>>>>
>>>>> I don't know what could be "an error somewhere in the inputs that
>>>>> prevents the load profile being applied as expected". I think you have
>>>>> precisely described my problem, but I dont know where the error could
>>>>> appear. Could you suggest me anything?
>>>>>
>>>>> Best Regards,
>>>>> Michał Połecki
>>>>>
>>>>> On 09/17/18 19:04, Ray Zimmerman <[email protected] <>> wrote:
>>>>>>
>>>>>> I don’t think we have enough details of the case you are running and
>>>>>> what you find unexpected about the results and why.
>>>>>>
>>>>>>
>>>>>> What do you mean by “longest possible number of terms”? Do you mean the
>>>>>> maximum length of the planning horizon?
>>>>>> Are you modeling the wind as stochastic or deterministic?
>>>>>> Are you including wind in the commitment? I would recommend setting them
>>>>>> as must-run with PMIN = 0.
>>>>>>
>>>>>> Ray
>>>>>>
>>>>>>> On Sep 13, 2018, at 10:09 AM, Michal Polecki
>>>>>>> <[email protected] <>> wrote:
>>>>>>>
>>>>>>> Dear All,
>>>>>>>
>>>>>>> I've wrote a script which is checking longest possible number of terms
>>>>>>> in most. In my case it was 152 terms (for 118 bus case with 13 wind
>>>>>>> farms). As I previously written it is not clear to me why the Gurobi is
>>>>>>> chosing the solution in which there is no Startup and shutdown. In case
>>>>>>> Pmin of convetional generation greater than Pload it is curtailing wind
>>>>>>> generation (which gencost is zero). I've attached plut_uc of the result
>>>>>>> file.
>>>>>>>
>>>>>>> This is options I have.
>>>>>>>
>>>>>>> mpopt = mpoption('verbose', verbose);
>>>>>>> mpopt = mpoption(mpopt, 'out.gen', 1);
>>>>>>> mpopt = mpoption(mpopt, 'model', 'AC');
>>>>>>> mpopt = mpoption(mpopt, 'most.skip_prices',1);
>>>>>>> mpopt = mpoption(mpopt, 'most.solver', 'gurobi');
>>>>>>> mpopt = mpoption(mpopt, 'most.uc.run', '1');
>>>>>>> mpopt = mpoption(mpopt, 'gurobi.method', -1); %% automatic
>>>>>>> % mpopt = mpoption(mpopt, 'gurobi.method', 0); %% primal simplex
>>>>>>> % mpopt = mpoption(mpopt, 'gurobi.method', 1); %% dual simplex
>>>>>>> % mpopt = mpoption(mpopt, 'gurobi.method', 2); %% barrier
>>>>>>> mpopt = mpoption(mpopt, 'gurobi.threads', 2);
>>>>>>> mpopt = mpoption(mpopt, 'gurobi.opts.MIPGap', 0);
>>>>>>> mpopt = mpoption(mpopt, 'gurobi.opts.MIPGapAbs', 0);
>>>>>>>
>>>>>>> Best Regards,
>>>>>>> Michał Połecki
>>>>>>>
>>>>>>> On 09/10/18 21:15, Michal Polecki <[email protected] <>>
>>>>>>> wrote:
>>>>>>>>
>>>>>>>> Thank you for your answer.
>>>>>>>>
>>>>>>>> 1) I have already checked if the load can be covered by generation and
>>>>>>>> if the ramps of generators are suffcient. I'll do it one more time,
>>>>>>>> thank you.
>>>>>>>>
>>>>>>>> 2) Gurobi gives exitflag -4.
>>>>>>>>
>>>>>>>> Best Regards,
>>>>>>>> Michał Połecki
>>>>>>>>
>>>>>>>> On 09/10/18 16:20, Ray Zimmerman <[email protected] <>> wrote:
>>>>>>>>>
>>>>>>>>> Did you check that the load profile is working correctly? Is the
>>>>>>>>> total generation dispatch following the load profile you expected?
>>>>>>>>>
>>>>>>>>> Also, what do you mean “it is impossible for MATPOWER to calculate”
>>>>>>>>> for the 24 hour horizons? Does Gurobi run forever, find that the
>>>>>>>>> problem is infeasible, or what?
>>>>>>>>>
>>>>>>>>> Ray
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> > On Sep 10, 2018, at 8:24 AM, Michal Polecki
>>>>>>>>> > <[email protected] <>> wrote:
>>>>>>>>> >
>>>>>>>>> > Dear Creators and Users of Matpower,
>>>>>>>>> >
>>>>>>>>> > I have a problem with Unit Commiment problem. I've studied all
>>>>>>>>> > examples attached to Matpower and also I've created some more cases
>>>>>>>>> > before going to my large problem. It seemed to give me correct
>>>>>>>>> > results. I'm using Gurobi.
>>>>>>>>> > Now I'm trying to run 118 bus case with 13 additional wind farms.
>>>>>>>>> > What I have observed is, that MATPOWER is sticking to the first
>>>>>>>>> > plan of work (no startups or shutdowns though cost of it is 0).
>>>>>>>>> > What is more is some cases it is impossible for MATPOWER to
>>>>>>>>> > calculate long period e.i nt = 24. I have written simple script to
>>>>>>>>> > cut this long period into 4 6-hour periods. Then Matpower was able
>>>>>>>>> > to calculate each of them. Plot_UC of each 6-hour period is
>>>>>>>>> > attached.
>>>>>>>>> >
>>>>>>>>> > Do you have an idea what could be problem?
>>>>>>>>> >
>>>>>>>>> >
>>>>>>>>> > nt = 6;
>>>>>>>>> > mpc = loadcase('MMcase118v5');
>>>>>>>>> > Pg = mpc.gen(:,PG);
>>>>>>>>> >
>>>>>>>>> > for i = 1:4
>>>>>>>>> > result = MM_118bus_UC(nt,Xwind,Xload,cw,cl,Pg);
>>>>>>>>> > if result.results.f>0
>>>>>>>>> > res(j) = result;
>>>>>>>>> > Pg = result.results.Pc([1:19],nt);
>>>>>>>>> > cw = cw+nt;
>>>>>>>>> > cl = cl+nt;
>>>>>>>>> > j= j+1;
>>>>>>>>> > else
>>>>>>>>> > break
>>>>>>>>> > end
>>>>>>>>> > end
>>>>>>>>> >
>>>>>>>>> > Michał Połecki
>>>>>>>>> >
>>>>>>>>> > --
>>>>>>>>> > Michał Połecki <P1.jpg><P2.jpg><P3.jpg><P4.jpg>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>> --
>>>>>>>> Michał Połecki
>>>>>>> --
>>>>>>> Michał Połecki <152_periods.jpg>
>>>>>>
>>>>> --
>>>>> Michał Połecki
>>>>
>>> --
>>> Michał Połecki
>>> <MMloads_profiles.m><MMloadbuses.m><MMobc_system_godz.mat><MM_ex_load_profile_118bus.m>
>>
> --
> Michał Połecki <Matpower_flat_UC.7z>