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