Validation 02 - Single Generator, Two Bus


In [67]:
%matplotlib inline

In [68]:
import psst

In [69]:
from psst.case import read_matpower
from psst.network import create_network

Validation of case 1


In [70]:
case = read_matpower('./cases/case2.m')

In [71]:
create_network(case).draw()



In [72]:
case


Out[72]:
<psst.case.PSSTCase(name=case5, Generators=1, Buses=2, Branches=1)>

In [91]:
case.bus


Out[91]:
TYPE PD QD GS BS AREA VM VA BASEKV ZONE VMAX VMIN
Bus1 3 0 131.47 0 0 1 1 0 230 1 1.1 0.9
Bus2 2 400 0.00 0 0 1 1 0 230 1 1.1 0.9

In [90]:
case.branch


Out[90]:
F_BUS T_BUS BR_R BR_X BR_B RATE_A RATE_B RATE_C TAP SHIFT BR_STATUS ANGMIN ANGMAX
0 Bus1 Bus2 0.00281 0.0281 0.00712 800 800 800 0 0 1 -360 360

In [73]:
case.gen


Out[73]:
GEN_BUS PG QG QMAX QMIN VG MBASE GEN_STATUS PMAX PMIN PC1 PC2 QC1MIN QC1MAX QC2MIN QC2MAX RAMP_AGC RAMP_10 RAMP_30 RAMP_Q APF
GenCo0 Bus1 500 0 30 -30 1 100 1 500 0 0 0 0 0 0 0 0 0 0 0 0

In [74]:
case.gencost


Out[74]:
MODEL STARTUP SHUTDOWN NCOST COST_1 COST_0
GenCo0 1 0 0 2 14 0

In [75]:
case.load


Out[75]:
Bus1 Bus2
0 0.0 400.0

In [76]:
from psst.model import build_model

In [77]:
model = build_model(case)

In [78]:
model


Out[78]:
<psst.model.PSSTModel(status=None)>

In [79]:
model.solve(solver='cbc', verbose=True)


Welcome to the CBC MILP Solver 
Version: 2.9.6 
Build Date: May 27 2016 

command line - /usr/local/bin/cbc -mipgap 0.01 -printingOptions all -import /var/folders/wk/lcf0vgd90bx0vq1873tn04knk_djr3/T/tmpnfzthS.pyomo.lp -import -stat=1 -solve -solu /var/folders/wk/lcf0vgd90bx0vq1873tn04knk_djr3/T/tmpnfzthS.pyomo.soln (default strategy 1)
No match for mipgap - ? for list of commands
No match for 0.01 - ? for list of commands
Option for printingOptions changed from normal to all
Current default (if $ as parameter) for import is /var/folders/wk/lcf0vgd90bx0vq1873tn04knk_djr3/T/tmpnfzthS.pyomo.lp
Presolve 5 (-31) rows, 10 (-21) columns and 15 (-59) elements
Statistics for presolved model
Original problem has 1 integers (1 of which binary)


Problem has 5 rows, 10 columns (7 with objective) and 15 elements
There are 7 singletons with objective 
Column breakdown:
8 of type 0.0->inf, 1 of type 0.0->up, 0 of type lo->inf, 
1 of type lo->up, 0 of type free, 0 of type fixed, 
0 of type -inf->0.0, 0 of type -inf->up, 0 of type 0.0->1.0 
Row breakdown:
1 of type E 0.0, 0 of type E 1.0, 0 of type E -1.0, 
2 of type E other, 0 of type G 0.0, 0 of type G 1.0, 
0 of type G other, 1 of type L 0.0, 0 of type L 1.0, 
1 of type L other, 0 of type Range 0.0->1.0, 0 of type Range other, 
0 of type Free 
Continuous objective value is 5600 - 0.00 seconds
Cgl0004I processed model has 5 rows, 10 columns (0 integer (0 of which binary)) and 14 elements
Cbc3007W No integer variables - nothing to do
Cuts at root node changed objective from 5600 to -1.79769e+308
Probing was tried 0 times and created 0 cuts of which 0 were active after adding rounds of cuts (0.000 seconds)
Gomory was tried 0 times and created 0 cuts of which 0 were active after adding rounds of cuts (0.000 seconds)
Knapsack was tried 0 times and created 0 cuts of which 0 were active after adding rounds of cuts (0.000 seconds)
Clique was tried 0 times and created 0 cuts of which 0 were active after adding rounds of cuts (0.000 seconds)
MixedIntegerRounding2 was tried 0 times and created 0 cuts of which 0 were active after adding rounds of cuts (0.000 seconds)
FlowCover was tried 0 times and created 0 cuts of which 0 were active after adding rounds of cuts (0.000 seconds)
TwoMirCuts was tried 0 times and created 0 cuts of which 0 were active after adding rounds of cuts (0.000 seconds)

Result - Optimal solution found

Objective value:                5600.00000000
Enumerated nodes:               0
Total iterations:               0
Time (CPU seconds):             0.00
Time (Wallclock seconds):       0.00

Total time (CPU seconds):       0.00   (Wallclock seconds):       0.01

Input data


In [80]:
import pandas as pd

In [81]:
pd.DataFrame(case.gen['PMAX'])


Out[81]:
PMAX
GenCo0 500

In [82]:
case.load


Out[82]:
Bus1 Bus2
0 0.0 400.0

Model Results


In [83]:
model.results.unit_commitment


Out[83]:
GenCo0
0 1

In [84]:
model.results.power_generated


Out[84]:
GenCo0
0 400

In [85]:
model.results.production_cost


Out[85]:
5600

In [86]:
model.results.line_power


Out[86]:
0
0 400

In [87]:
model.results.lmp


Out[87]:
Bus1 Bus2
0 14 14

In [88]:
from psst.plot import line_power

In [89]:
line_power(case, model.results, hour=0)


Out[89]:
<matplotlib.axes._subplots.AxesSubplot at 0x111c2f0d0>

In [ ]:


In [ ]: