DCOPF Verification#
Prepared by Jinning Wang.
Conclusion#
For test cases, DCOPF results from AMS are identical to that from MATPOWER.
import datetime
import numpy as np
import pandas as pd
import ams
print("Last run time:", datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
print(f'ams: {ams.__version__}')
Last run time: 2024-01-16 16:03:19
ams: 0.8.0.post6+g32850c1
Using built-in MATPOWER cases as inputs.
cases = [
ams.get_case('matpower/case14.m'),
ams.get_case('matpower/case39.m'),
ams.get_case('matpower/case118.m'),
ams.get_case('npcc/npcc.m'),
ams.get_case('wecc/wecc.m'),
ams.get_case('matpower/case300.m'),]
case_names = [case.split('/')[-1].split('.')[0] for case in cases]
ams_obj = np.zeros(len(cases))
for i, case in enumerate(cases):
sp = ams.load(case, setup=True)
sp.DCOPF.init()
sp.DCOPF.solve(solver='ECOS')
ams_obj[i] = sp.DCOPF.obj.v
Following MATPOWER results are obtained using MATPOWER 8.0b1 and Matlab R2023b.
mp_obj = np.array([7642.59177699, 41263.94078588,
125947.8814179, 705667.88555058,
348228.35589771, 706292.32424361])
res = pd.DataFrame({'AMS': ams_obj, 'MATPOWER': mp_obj},
index=case_names)
res
| AMS | MATPOWER | |
|---|---|---|
| case14 | 7642.591752 | 7642.591777 |
| case39 | 41263.940187 | 41263.940786 |
| case118 | 125947.881253 | 125947.881418 |
| npcc | 705667.885550 | 705667.885551 |
| wecc | 348228.355895 | 348228.355898 |
| case300 | 706292.326604 | 706292.324244 |