Example #1
0
def test_terminate_producers():
    sim = Simulator(dict(), None)
    manager = Manager(sim)
    p1 = Producer.start("P1", manager)
    p2 = Producer.start("P2", manager)
    manager.register_producer(p1, "P1")
    manager.register_producer(p2, "P2")

    manager.terminate_producers()
    assert manager.producers == {}
Example #2
0
def test_cancel():
    sim = Simulator(dict(), None)
    manager = Manager(sim)
    producer = Producer("producer_id", manager)
    job = Job(est=0, lst=0, id="job_id", load_profile=pd.Series())
    consumer = Consumer.start(producers=[producer], job=job, manager=manager)
    schedule_object = dict(consumer=consumer, job=job)

    producer.schedule.append(schedule_object)
    assert (schedule_object in producer.schedule)
    producer.cancel(schedule_object)
    assert producer.schedule == []
    consumer.stop()
Example #3
0
def test_fulfill_contract():
    sim = Simulator(dict(), None)
    manager = Manager(sim)
    producer = Producer("producer_id", manager)

    job = Job(est=0, lst=0, id="job_id", load_profile=pd.Series())
    consumer = Consumer.start(producers=[producer], job=job, manager=manager)
    schedule_object = dict(consumer=consumer, job=job)
    producer.schedule.append(schedule_object)
    contract = producer.create_contract(job)
    consumer.stop()

    assert producer.schedule == [schedule_object]
    producer.fulfill_contract(contract)
    assert producer.schedule == []
Example #4
0
def test_optimize_fifty_fifty_negative():
    sim = Simulator(dict(), None)
    man = Manager(sim)
    producer = Producer("id", man)
    producer.optimizer = Optimizer(producer, options=dict(algo="fifty_fifty"))
    producer.prediction = pd.Series(index=[0, 1], data=[0.0, 0.0])
    for i in range(10):
        job = dict(consumer=None, job=Job("id" + str(i), 0, 0, pd.Series(index=[0, 1], data=[0.0, 1.0])))
        producer.schedule.append(job)
        schedule_time, should_keep = producer.optimizer.optimize()
        if not should_keep[-1]:
            producer.schedule.pop()

    num_accepted = len(producer.schedule)
    assert 0 == num_accepted
Example #5
0
def test_register_producer():
    # Make a manager with no neighbourhood (not needed for testing)
    sim = Simulator(dict(), None)
    manager = Manager(sim)
    producer = Producer("id", manager)
    manager.register_producer("id", producer)
    assert producer in manager.producers
Example #6
0
def test_create_contract():
    sim = Simulator(dict(), None)
    manager = Manager(sim)
    producer = Producer("producer_id", manager)
    job = Job(est=0, lst=0, id="job_id", load_profile=pd.Series())
    expected = dict(id='producer_id;job_id;0',
                    time=0,
                    time_of_agreement=0,
                    load_profile=pd.Series(),
                    job_id='job_id',
                    producer_id='producer_id')
    actual = producer.create_contract(job)

    assert expected['id'] == actual['id']
    assert expected['time'] == actual['time']
    assert expected['time_of_agreement'] == actual['time_of_agreement']
    assert expected['job_id'] == actual['job_id']
    assert expected['producer_id'] == actual['producer_id']
Example #7
0
def test_optimize_basinhopping():
    sim = Simulator(dict(), None)
    man = Manager(sim)
    producer = Producer("id", man)
    job0 = dict(consumer=None, job=Job("id", 0, 500, pd.Series(index=[0, 60, 120], data=[0.0, 5.0, 10.0])))
    job1 = dict(consumer=None, job=Job("id", 0, 500, pd.Series(index=[0, 60, 120], data=[0.0, 5.0, 10.0])))
    job2 = dict(consumer=None, job=Job("id", 0, 500, pd.Series(index=[0, 60, 120], data=[0.0, 5.0, 10.0])))
    job3 = dict(consumer=None, job=Job("id", 0, 500, pd.Series(index=[0, 60, 120], data=[0.0, 5.0, 10.0])))
    job4 = dict(consumer=None, job=Job("id", 0, 500, pd.Series(index=[0, 60, 120], data=[0.0, 5.0, 10.0])))

    producer.optimizer = Optimizer(producer, options=dict(algo="SLSQP", pen=1.0, tol=1.0, eps=0.01))
    producer.schedule = [job0, job1, job2, job3, job4]
    producer.prediction = pd.Series(index=[0, 300, 600], data=[0.0, 25.0, 50.0])
    schedule_time, should_keep = producer.optimizer.optimize()
    schedule = set([int(utils.round_to_nearest_60(x)) for x in schedule_time])

    # Assert that we have at least one scheduled time.
    assert len(schedule) >= 1
Example #8
0
def test_request_job_integration():
    simulator = MockSimulator()
    manager = Manager(simulator, options=dict(algo="SLSQP"))
    Producer(id="p1", manager=manager)
    manager.new_producer("p1")
    prediction = pd.Series(index=[0, 3600, 7200], data=[0.0, 10.0, 20.0])
    manager.send_new_prediction(prediction, manager.producers["p1"])
    job = Job("j1", 0, 0, pd.Series(index=[0, 1800, 3600],
                                    data=[0.0, 2.5, 5.0]))

    manager.new_job(job)

    consumer = manager.consumers[0]
    consumer._actor.request_producer()
    manager.producers["p1"].stop()

    assert manager.producer_rankings["p1"] == 9
Example #9
0
def test_update_power_profile():
    sim = Simulator(dict(), None)
    manager = Manager(sim)
    producer = Producer("producer_id", manager)

    p1 = pd.Series(index=[0, 3600, 7200, 10800], data=[0.0, 1.0, 2.0, 3.0])
    p2 = pd.Series(index=[7200, 10800, 14400, 18000],
                   data=[5.0, 6.0, 7.0, 8.0])

    expected1 = p1
    expected2 = pd.Series(index=[0, 3600, 7200, 10800, 14400, 18000],
                          data=[0.0, 1.0, 6.0, 7.0, 8.0, 9.0])

    assert producer.prediction is None
    producer.update_power_profile(p1)
    assert producer.prediction.equals(expected1)
    producer.update_power_profile(p2)
    assert producer.prediction.equals(expected2)