コード例 #1
0
    def test_close_to_pois(self):
        """Check that 1 new / 0 old chargers scenario is close to centroid of POIs"""

        w, h = (15, 15)
        num_poi, num_cs, num_new_cs = (3, 0, 1)

        _, pois, charging_stations, potential_new_cs_nodes = demo.set_up_scenario(
            w, h, num_poi, num_cs)

        pois = [(0, 0), (6, 14), (14, 0)]
        centroid = np.array(pois).mean(axis=0).round().tolist()

        bqm = demo.build_bqm(potential_new_cs_nodes, num_poi, pois, num_cs,
                             charging_stations, num_new_cs)

        # random.seed(1)
        sampler = neal.SimulatedAnnealingSampler()
        new_charging_nodes = demo.run_bqm_and_collect_solutions(
            bqm, sampler, potential_new_cs_nodes, seed=42)

        new_cs_x = new_charging_nodes[0][0]
        new_cs_y = new_charging_nodes[0][1]

        self.assertLess(new_cs_x - centroid[0], 5)
        self.assertLess(new_cs_y - centroid[1], 5)
コード例 #2
0
    def test_solution_quality(self):
        """Run demo.py with no POIs or existing chargers to locate two new chargers"""

        w, h = (15, 15)
        num_poi, num_cs, num_new_cs = (0, 0, 2)

        _, pois, charging_stations, potential_new_cs_nodes = demo.set_up_scenario(
            w, h, num_poi, num_cs)

        bqm = demo.build_bqm(potential_new_cs_nodes, num_poi, pois, num_cs,
                             charging_stations, num_new_cs)

        # random.seed(1)
        sampler = neal.SimulatedAnnealingSampler()
        new_charging_nodes = demo.run_bqm_and_collect_solutions(
            bqm, sampler, potential_new_cs_nodes, seed=1)

        new_cs_dist = 0
        for i in range(num_new_cs):
            for j in range(i + 1, num_new_cs):
                new_cs_dist += abs(new_charging_nodes[i][0] -
                                   new_charging_nodes[j][0]) + abs(
                                       new_charging_nodes[i][1] -
                                       new_charging_nodes[j][1])

        self.assertGreater(new_cs_dist, 10)
コード例 #3
0
    def test_num_new_cs(self):
        """Check that correct number of new charging locations are found in a random scenario"""

        w, h = (random.randint(10, 20), random.randint(10, 20))
        num_poi, num_cs, num_new_cs = (random.randint(1,
                                                      4), random.randint(1, 4),
                                       random.randint(1, 4))

        G, pois, charging_stations, potential_new_cs_nodes = demo.set_up_scenario(
            w, h, num_poi, num_cs)

        bqm = demo.build_bqm(potential_new_cs_nodes, num_poi, pois, num_cs,
                             charging_stations, num_new_cs)

        sampler = neal.SimulatedAnnealingSampler()
        new_charging_nodes = demo.run_bqm_and_collect_solutions(
            bqm, sampler, potential_new_cs_nodes)

        self.assertEqual(num_new_cs, len(new_charging_nodes))
コード例 #4
0
    return bqm_np


if __name__ == '__main__':

    # Collect user inputs
    args = demo.read_in_args()

    # Build large grid graph for city
    G, pois, charging_stations, potential_new_cs_nodes = demo.set_up_scenario(
        args.width, args.height, args.poi, args.chargers)

    # Build BQM
    bqm = build_bqm(potential_new_cs_nodes, args.poi, pois, args.chargers,
                    charging_stations, args.new_chargers)

    # Run BQM on HSS
    sampler = LeapHybridSampler()
    print("\nRunning scenario on", sampler.solver.id, "solver...")

    new_charging_nodes = demo.run_bqm_and_collect_solutions(
        bqm, sampler, potential_new_cs_nodes)

    # Print results to commnand-line for user
    demo.printout_solution_to_cmdline(pois, args.poi, charging_stations,
                                      args.chargers, new_charging_nodes,
                                      args.new_chargers)

    # Create scenario output image
    demo.save_output_image(G, pois, charging_stations, new_charging_nodes)