Пример #1
0
def test_step():
    havven_model = model.HavvenModel(20)
    assert (havven_model.manager.time == 1)
    havven_model.step()
    assert (havven_model.manager.time == 2)

    time_delta = 100
    for _ in range(time_delta):
        havven_model.step()
    assert (havven_model.manager.time == time_delta + 2)
Пример #2
0
def test_fiat_value():
    havven_model = model.HavvenModel(10)
    assert (isinstance(havven_model.fiat_value(), Dec))
    assert (havven_model.fiat_value() == Dec(0))
    assert (havven_model.fiat_value(Dec(1), Dec(1), Dec(1)) > Dec(0))
    assert (havven_model.fiat_value(havvens=Dec(0), nomins=Dec(0),
                                    fiat=Dec(1)) == Dec(1))
    assert (havven_model.fiat_value(havvens=Dec(1)) <
            havven_model.fiat_value(havvens=Dec(2)))
    assert (havven_model.fiat_value(nomins=Dec(1)) <
            havven_model.fiat_value(nomins=Dec(2)))
    assert (havven_model.fiat_value(fiat=Dec(1)) <
            havven_model.fiat_value(fiat=Dec(2)))
def make_model_without_agents(continuous_order_matching=True):
    """TODO: make this more generalised"""
    settings = settingsloader.load_settings()
    model_settings = settings['Model']
    model_settings['agent_fractions'] = settings['AgentFractions']
    model_settings['num_agents'] = 0
    model_settings['continuous_order_matching'] = continuous_order_matching
    settings['Agents']['agent_minimum'] = 0
    havven_model = model.HavvenModel(model_settings, settings['Fees'],
                                     settings['Agents'], settings['Havven'])
    for item in havven_model.schedule.agents:
        havven_model.schedule.remove(item)
    havven_model.agent_manager.agents = {"others": []}
    return havven_model
Пример #4
0
def test_endowment():
    havven_model = model.HavvenModel(10)
    agent = havven_model.schedule.agents[0]
    agent_pre_cur = agent.havvens
    havven_pre_cur = havven_model.manager.havvens

    havven_model.endow_havvens(agent, Dec(0))
    havven_model.endow_havvens(agent, Dec(-10))
    assert (agent.havvens == agent_pre_cur)
    assert (havven_model.manager.havvens == havven_pre_cur)

    endowment = Dec(100)
    havven_model.endow_havvens(agent, endowment)
    assert (agent.havvens == agent_pre_cur + endowment)
    assert (havven_model.manager.havvens == havven_pre_cur - endowment)
Пример #5
0
def test_fee_distribution_period():
    havven_model = model.HavvenModel(20)
    assert (havven_model.fee_manager.fees_distributed == Dec(0))
    assert (havven_model.manager.nomins == Dec(0))

    for _ in range(havven_model.fee_manager.fee_period - 1):
        havven_model.step()

    prenomins = havven_model.manager.nomins
    predistrib = havven_model.fee_manager.fees_distributed
    assert (prenomins > Dec(0))
    assert (predistrib == Dec(0))

    havven_model.step()

    postnomins = havven_model.manager.nomins
    postdistrib = havven_model.fee_manager.fees_distributed
    assert (postnomins == Dec(0))
    assert (prenomins <= postdistrib)
    assert (havven_model.manager.nomins == Dec(0))
Пример #6
0
def generate_new_caches(data):
    """
    generate a new dataset for each dataset that doesn't already exist in data

    overwrites the defined default settings for every run

    generate visualisation results for every step up to max_steps, and save it to 'result'

    store the result in the format:
      data["name"] = {"data": result, "settings": settings, "max_steps": max_steps}
    """
    from core.server import get_vis_elements

    for n, item in enumerate(run_settings):
        if item["name"] in data and len(
                data[item['name']]['data']) == item['max_steps']:
            print("already have:", item['name'])
            continue
        print("\nGenerating", item["name"])
        result = []
        settings = settingsloader.get_defaults()

        for section in item["settings"]:
            for setting in item['settings'][section]:
                settings[section][setting] = item["settings"][section][setting]

        model_settings = settings['Model']
        model_settings['agent_fractions'] = settings['AgentFractions']

        havven_model = model.HavvenModel(model_settings, settings['Fees'],
                                         settings['Agents'],
                                         settings['Havven'])
        vis_elements = get_vis_elements()

        # # The following is for running the loop without tqdm
        # # as when profiling the model tqdm shows up as ~17% runtime
        # for i in range(item["max_steps"]):
        #     if not i % 100:
        #         print(f"{n+1}/{len(run_settings)} [{'='*(i//100)}{'-'*(item['max_steps']//100 - i//100)}" +
        #               f"] {i}/{item['max_steps']}")

        for i in tqdm.tqdm(range(item["max_steps"])):
            havven_model.step()
            step_data = []
            for element in vis_elements:
                if i == 0:
                    if hasattr(element, "sent_data"):
                        element.sent_data = False
                        element_data = element.render(havven_model)
                    else:
                        element_data = element.render(havven_model)
                else:
                    element_data = element.render(havven_model)
                step_data.append(element_data)

            result.append(step_data)
        data[item["name"]] = {
            "data": result,
            "settings": settings,
            "max_steps": item["max_steps"],
            "description": item["description"]
        }
    return data