Esempio n. 1
0
    def test_no_flexibility_limits(self):
        p_max = 10
        for p_plus in [None, p_max]:
            spec = np.array([
                2, 1, 1, None, p_max, 1, 2, -3, p_plus, None, 1, -1, None,
                None, None
            ])
            gen = Generator(spec, self.bus_ids, self.baseMVA)
            self.assertEqual(gen.tau_1, 0)
            self.assertEqual(gen.tau_2, 0)

        q_max = 5
        for q_plus in [None, q_max]:
            spec = np.array([
                2, 1, 1, None, 10, 1, q_max, -3, 5, None, q_plus, -1, None,
                None, None
            ])
            gen = Generator(spec, self.bus_ids, self.baseMVA)
            self.assertEqual(gen.tau_1, 0)

        q_min = -3
        for q_minus in [None, q_min]:
            spec = np.array([
                2, 1, 1, None, 10, 1, 2, q_min, 5, None, 1, q_minus, None,
                None, None
            ])
            gen = Generator(spec, self.bus_ids, self.baseMVA)
            self.assertEqual(gen.tau_2, 0)
Esempio n. 2
0
    def test_default_q_values(self):
        # q_max = None
        spec = np.array([
            2, 1, 1, None, 10, 1, None, 1, None, None, None, None, None, None,
            None
        ])
        gen = Generator(spec, self.bus_ids, self.baseMVA)
        self.assertEqual(gen.q_max, np.inf)

        # q_min = None
        spec = np.array([
            2, 1, 1, None, 10, 1, 10, None, None, None, None, None, None, None,
            None
        ])
        gen = Generator(spec, self.bus_ids, self.baseMVA)
        self.assertEqual(gen.q_min, -np.inf)
Esempio n. 3
0
 def test_infeasible_q_bounds(self):
     spec = np.array([
         2, 1, 1, None, 10, 1, 1, 2, None, None, None, None, None, None,
         None
     ])
     with self.assertRaises(GenSpecError):
         Generator(spec, self.bus_ids, self.baseMVA)
Esempio n. 4
0
 def test_negative_p_min(self):
     spec = np.array([
         2, 1, 1, None, 10, -1, 10, -10, None, None, None, None, None, None,
         None
     ])
     with self.assertRaises(GenSpecError):
         Generator(spec, self.bus_ids, self.baseMVA)
Esempio n. 5
0
    def test_simple_gen(self):
        spec = np.array(
            [2, 1, 1, None, 10, 1, 10, -10, 5, None, 5, -5, None, None, None])
        gen = Generator(spec, self.bus_ids, self.baseMVA)

        self.assertEqual(gen.dev_id, spec[0])
        self.assertEqual(gen.bus_id, spec[1])
        self.assertEqual(gen.type, spec[2])
        self.assertIsNone(gen.qp_ratio)
        self.assertEqual(gen.p_max, spec[4] / self.baseMVA)
        self.assertEqual(gen.p_min, spec[5] / self.baseMVA)
        self.assertEqual(gen.q_max, spec[6] / self.baseMVA)
        self.assertEqual(gen.q_min, spec[7] / self.baseMVA)
        self.assertEqual(gen.p_plus, spec[8] / self.baseMVA)
        self.assertEqual(gen.p_minus, None)
        self.assertEqual(gen.q_plus, spec[10] / self.baseMVA)
        self.assertEqual(gen.q_minus, spec[11] / self.baseMVA)
        self.assertIsNone(gen.soc_max)
        self.assertIsNone(gen.soc_min)
        self.assertIsNone(gen.eff)
        self.assertFalse(gen.is_slack)

        tau_1 = (spec[10] - spec[6]) / (spec[4] - spec[8])
        tau_2 = (spec[11] - spec[7]) / (spec[4] - spec[8])
        self.assertAlmostEqual(gen.tau_1, tau_1, places=5)
        self.assertAlmostEqual(gen.tau_2, tau_2, places=5)
        self.assertIsNone(gen.tau_3)
        self.assertIsNone(gen.tau_4)

        rho_1 = (spec[6] - tau_1 * spec[8]) / self.baseMVA
        rho_2 = (spec[7] - tau_2 * spec[8]) / self.baseMVA
        self.assertAlmostEqual(gen.rho_1, rho_1, places=5)
        self.assertAlmostEqual(gen.rho_2, rho_2, places=5)
        self.assertIsNone(gen.rho_3)
        self.assertIsNone(gen.rho_4)
Esempio n. 6
0
    def test_q_minus(self):
        # q_minus < q_min and q_minus > q_max
        for q_minus in [0.5, 11]:
            spec = np.array([
                2, 1, 1, None, 10, 1, 10, 1, None, None, None, q_minus, None,
                None, None
            ])
            with self.assertRaises(GenSpecError):
                Generator(spec, self.bus_ids, self.baseMVA)

        # q_minus = None
        spec = np.array([
            2, 1, 1, None, 10, 1, 15, 1, None, None, None, None, None, None,
            None
        ])
        gen = Generator(spec, self.bus_ids, self.baseMVA)
        self.assertEqual(gen.q_minus, spec[7] / self.baseMVA)
Esempio n. 7
0
 def test_p_minus(self):
     for p_minus in [None, 0, -1, 1]:
         spec = np.array([
             2, 1, 1, None, 10, 1, 10, 1, None, p_minus, None, None, None,
             None, None
         ])
         gen = Generator(spec, self.bus_ids, self.baseMVA)
         self.assertIsNone(gen.p_minus)
Esempio n. 8
0
    def test_p_plus(self):
        # p_plus < p_min and p_plus > p_max
        for p_plus in [0.5, 11]:
            spec = np.array([
                2, 1, 1, None, 10, 1, 10, 1, p_plus, None, None, None, None,
                None, None
            ])
            with self.assertRaises(GenSpecError):
                Generator(spec, self.bus_ids, self.baseMVA)

        # p_plus = None
        spec = np.array([
            2, 1, 1, None, 10, 1, 10, 1, None, None, None, None, None, None,
            None
        ])
        gen = Generator(spec, self.bus_ids, self.baseMVA)
        self.assertEqual(gen.p_plus, spec[4] / self.baseMVA)
Esempio n. 9
0
    def test_slack_gen(self):
        spec = np.array([
            2, 1, 0, None, 10, 1, 10, -10, 5, None, None, None, None, None,
            None
        ])
        gen = Generator(spec, self.bus_ids, self.baseMVA)

        self.assertTrue(gen.is_slack)
Esempio n. 10
0
    def test_setting_infeasible_ppot(self):
        spec = np.array([
            2, 1, 1, None, 10, 1, 2, -3, None, None, None, None, None, None,
            None
        ])
        gen = Generator(spec, self.bus_ids, self.baseMVA)

        for p_pot in np.random.uniform(-10, 10, 50) / self.baseMVA:
            gen.p_pot = p_pot
            true = np.clip(p_pot, spec[5] / self.baseMVA,
                           spec[4] / self.baseMVA)
            self.assertAlmostEqual(gen.p_pot, float(true), places=5)
Esempio n. 11
0
    def test_map_pq_with_flex_limits(self):
        spec = np.array(
            [2, 1, 1, None, 10, 1, 2, -2, 9, None, 1, -1, None, None, None])
        gen = Generator(spec, self.bus_ids, self.baseMVA)

        points = np.array([(-1, 0.5), (5, 5), (5, -5), (12, 0), (10, 2),
                           (10, -2)]) / self.baseMVA
        mapped = np.array([(1, 0.5), (5, 2), (5, -2), (10, 0), (9.5, 1.5),
                           (9.5, -1.5)]) / self.baseMVA
        for p, m in zip(points, mapped):
            gen.map_pq(p[0], p[1])
            self.assertAlmostEqual(gen.p, m[0], places=5)
            self.assertAlmostEqual(gen.q, m[1], places=5)
Esempio n. 12
0
    def test_defaut_p_values(self):
        # p_max = None
        spec = np.array([
            2, 1, 1, None, None, 1, 10, 1, None, None, None, None, None, None,
            None
        ])
        gen = Generator(spec, self.bus_ids, self.baseMVA)
        self.assertEqual(gen.p_max, np.inf)

        # p_max = 0
        spec = np.array([
            2, 1, 1, None, 0, 0, 10, 1, None, None, None, None, None, None,
            None
        ])
        gen = Generator(spec, self.bus_ids, self.baseMVA)
        self.assertEqual(gen.p_max, 0)

        # p_min = None
        spec = np.array([
            2, 1, 1, None, 10, None, 10, 1, None, None, None, None, None, None,
            None
        ])
        gen = Generator(spec, self.bus_ids, self.baseMVA)
        self.assertEqual(gen.p_min, 0)
Esempio n. 13
0
    def test_map_pq_no_flexibility_limits(self):
        spec = np.array([
            2, 1, 1, None, 10, 1, 2, -3, None, None, None, None, None, None,
            None
        ])
        gen = Generator(spec, self.bus_ids, self.baseMVA)

        ps = np.random.uniform(-10, 10, 10) / self.baseMVA
        qs = np.random.uniform(-10, 10, 10) / self.baseMVA
        p_pots = np.random.uniform(spec[5], spec[4], 10) / self.baseMVA
        for p in ps:
            for q in qs:
                for p_pot in p_pots:
                    gen.p_pot = p_pot
                    gen.map_pq(p, q)
                    true_p = np.clip(p, spec[5] / self.baseMVA,
                                     np.minimum(spec[4] / self.baseMVA, p_pot))
                    true_q = np.clip(q, spec[7] / self.baseMVA,
                                     spec[6] / self.baseMVA)
                    self.assertAlmostEqual(gen.p, true_p, places=5)
                    self.assertAlmostEqual(gen.q, true_q, places=5)
Esempio n. 14
0
 def test_infeasible_q_plus_minus(self):
     # q_minus > q_plus
     spec = np.array(
         [2, 1, 1, None, 10, 1, 15, 1, None, None, 1, 2, None, None, None])
     with self.assertRaises(GenSpecError):
         Generator(spec, self.bus_ids, self.baseMVA)