Beispiel #1
0
    def __init__(self, config):
        self.identifier = config.identifier
        self.num_simulations = int(config.static_parameters['num_simulations'])

        self.model_config = Config()
        model_config_file_name = config.get_static_parameters()['model_config_file_name']
        self.model_config.read_xml_config_file(model_config_file_name)

        self.results = []
        self.output_file_name = config.static_parameters['output_file_name']
    def transaction__purge_accounts(self, args):
        import os
        from sample_agent import Agent
        from sample_config import Config
        from sample_transaction import Transaction

        text = "This test checks transaction.purge_accounts \n"
        self.print_info(text)
        #
        # INITIALIZATION
        #
        environment_directory = str(args[0])
        identifier = str(args[1])
        log_directory = str(args[2])

        # Configure logging parameters so we get output while the program runs
        logging.basicConfig(format='%(asctime)s %(message)s',
                            datefmt='%m/%d/%Y %H:%M:%S',
                            filename=log_directory + identifier + ".log",
                            level=logging.INFO)
        logging.info(
            'START logging for test transaction__purge_accounts in run: %s',
            environment_directory + identifier + ".xml")

        # Construct a config
        config = Config()

        agent_one = Agent("agent_one", {"test": "parameters"},
                          {"test": "variables"})
        agent_two = Agent("agent_two", {"test": "parameters"},
                          {"test": "variables"})

        config.agents = []
        config.agents.append(agent_one)
        config.agents.append(agent_two)

        #
        # TESTING
        #

        print("Before purging the accounts")
        transaction = Transaction()
        transaction.this_transaction("type", "asset", "agent_one", "agent_two",
                                     0, 2, 3, 4)
        transaction.add_transaction(config)
        transaction = Transaction()
        transaction.this_transaction("type", "asset", "agent_one", "agent_two",
                                     1, 2, 3, 4)
        transaction.add_transaction(config)
        print(config.get_agent_by_id("agent_one"))
        print(config.get_agent_by_id("agent_two"))
        print("After clearing one bank's accounts")
        transaction.purge_accounts(config)
        print(config.get_agent_by_id("agent_one"))
        print(config.get_agent_by_id("agent_two"))
Beispiel #3
0
class Runner(BaseRunner):

    identifier = ""
    num_simulations = 0

    def get_identifier(self):
        return self.identifier

    def set_identifier(self, _value):
        super(Runner, self).set_identifier(_value)

    def get_num_simulations(self):
        return self.model_parameters

    def set_num_simulations(self, _value):
        super(Runner, self).set_num_simulations(_value)

    def __init__(self, config):
        self.identifier = config.identifier
        self.num_simulations = int(config.static_parameters['num_simulations'])

        self.model_config = Config()
        model_config_file_name = config.get_static_parameters(
        )['model_config_file_name']
        self.model_config.read_xml_config_file(model_config_file_name)

        self.results = []
        self.output_file_name = config.static_parameters['output_file_name']

    def write_results(self, model):
        out_text = ""
        # loop over all results
        for result in self.results:  # each result is a list (of lists) itself
            for entry in result:
                out_text += str(entry) + ";"
            out_text += "\n"

        out_file_name = self.output_file_name
        out_file = open(out_file_name, 'w')
        out_file.write(out_text)
        out_file.close()

    def do_run(self):
        for i in range(0, self.num_simulations):

            model = Model(self.model_config)
            model.initialize_agents()
            result = model.do_update()

            self.results.append(result)
            self.write_results(model)
Beispiel #4
0
class Runner(BaseRunner):

    identifier = ""
    num_simulations = 0

    def get_identifier(self):
        return self.identifier

    def set_identifier(self, _value):
        super(Runner, self).set_identifier(_value)

    def get_num_simulations(self):
        return self.model_parameters

    def set_num_simulations(self, _value):
        super(Runner, self).set_num_simulations(_value)

    def __init__(self, config):
        self.identifier = config.identifier
        self.num_simulations = int(config.static_parameters['num_simulations'])

        self.model_config = Config()
        model_config_file_name = config.get_static_parameters()['model_config_file_name']
        self.model_config.read_xml_config_file(model_config_file_name)

        self.results = []
        self.output_file_name = config.static_parameters['output_file_name']

    def write_results(self, model):
        out_text = ""
        # loop over all results
        for result in self.results:  # each result is a list (of lists) itself
            for entry in result:
                out_text += str(entry) + ";"
            out_text += "\n"

        out_file_name = self.output_file_name
        out_file = open(out_file_name, 'w')
        out_file.write(out_text)
        out_file.close()

    def do_run(self):
        for i in range(0, self.num_simulations):

            model = Model(self.model_config)
            model.initialize_agents()
            result = model.do_update()

            self.results.append(result)
            self.write_results(model)
    def transaction__write_transaction(self, args):
        import os
        from sample_agent import Agent
        from sample_config import Config
        from sample_transaction import Transaction

        text = "This test checks transaction.write_transaction \n"
        self.print_info(text)
        #
        # INITIALIZATION
        #
        environment_directory = str(args[0])
        identifier = str(args[1])
        log_directory = str(args[2])

        # Configure logging parameters so we get output while the program runs
        logging.basicConfig(format='%(asctime)s %(message)s',
                            datefmt='%m/%d/%Y %H:%M:%S',
                            filename=log_directory + identifier + ".log",
                            level=logging.INFO)
        logging.info(
            'START logging for test transaction__write_transaction in run: %s',
            environment_directory + identifier + ".xml")

        # Construct a config
        config = Config()

        agent_one = Agent("agent_one", {"test": "parameters"},
                          {"test": "variables"})
        agent_two = Agent("agent_two", {"test": "parameters"},
                          {"test": "variables"})

        config.agents = []
        config.agents.append(agent_one)
        config.agents.append(agent_two)

        #
        # TESTING
        #

        print("Creating a transaction")
        transaction = Transaction()
        print("Assigning values")
        transaction.this_transaction("type", "asset", "agent_one", "agent_two",
                                     1, 2, 3, 4)
        print("Adding the transaction to the books")
        transaction.add_transaction(config)
        print("Printing transaction:")
        print(transaction.write_transaction())
    def transaction__purge_accounts(self, args):
        import os
        from sample_agent import Agent
        from sample_config import Config
        from sample_transaction import Transaction

        text = "This test checks transaction.purge_accounts \n"
        self.print_info(text)
        #
        # INITIALIZATION
        #
        environment_directory = str(args[0])
        identifier = str(args[1])
        log_directory = str(args[2])

        # Configure logging parameters so we get output while the program runs
        logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %H:%M:%S',
                            filename=log_directory + identifier + ".log", level=logging.INFO)
        logging.info('START logging for test transaction__purge_accounts in run: %s',
                     environment_directory + identifier + ".xml")

        # Construct a config
        config = Config()

        agent_one = Agent("agent_one", {"test": "parameters"}, {"test": "variables"})
        agent_two = Agent("agent_two", {"test": "parameters"}, {"test": "variables"})

        config.agents = []
        config.agents.append(agent_one)
        config.agents.append(agent_two)

        #
        # TESTING
        #

        print("Before purging the accounts")
        transaction = Transaction()
        transaction.this_transaction("type", "asset", "agent_one", "agent_two", 0,  2,  3, 4)
        transaction.add_transaction(config)
        transaction = Transaction()
        transaction.this_transaction("type", "asset", "agent_one", "agent_two", 1,  2,  3, 4)
        transaction.add_transaction(config)
        print(config.get_agent_by_id("agent_one"))
        print(config.get_agent_by_id("agent_two"))
        print("After clearing one bank's accounts")
        transaction.purge_accounts(config)
        print(config.get_agent_by_id("agent_one"))
        print(config.get_agent_by_id("agent_two"))
Beispiel #7
0
    def agent__get_transactions_from_file(self, args):
        import os
        from sample_agent import Agent
        from sample_config import Config  # needed for the bankDirectory

        text = "This test checks agent.get_transactions_from_file \n"
        self.print_info(text)
        #
        # INITIALIZATION
        #
        environment_directory = str(args[0])
        identifier = str(args[1])
        log_directory = str(args[2])

        # Configure logging parameters so we get output while the program runs
        logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %H:%M:%S',
                            filename=log_directory + identifier + ".log", level=logging.INFO)
        logging.info('START logging for test agent__clear_accounts in run: %s',
                     environment_directory + identifier + ".xml")

        # Construct firm filename
        config = Config()
        list_env = os.listdir(environment_directory)
        config.read_xml_config_file(environment_directory + list_env[0])
        # get the firm_directory from the environment
        firm_directory = config.firm_directory
        # and loop over all firms in the directory
        listing = os.listdir(firm_directory)
        firmFilename = firm_directory + listing[0]

        # generate an agent
        agent = Agent("baseagent id", {"test": "parameters"}, {"test": "variables"})
        agent.identifier = "firm_test_config_id"
        config.agents = []
        config.agents.append(agent)
        #config.agent.get_parameters_from_file(firmFilename, config)

        #
        # TESTING
        #

        config.agents[0].accounts = []
        print("Printing agent:\n")
        print(config.agents[0])
        print("Reading transactions from the config file.\n")
        print("Printing agent: \n")
        config.agents[0].get_transactions_from_file(firm_directory + listing[0], config)
        print(config.agents[0])
Beispiel #8
0
    def agent__get_parameters_from_file(self, args):
        import os
        from sample_agent import Agent
        from sample_config import Config  # needed for the bankDirectory

        text = "This test checks agent.get_parameters_from_file \n"
        self.print_info(text)
        #
        # INITIALIZATION
        #
        environment_directory = str(args[0])
        identifier = str(args[1])
        log_directory = str(args[2])

        # Configure logging parameters so we get output while the program runs
        logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %H:%M:%S',
                            filename=log_directory + identifier + ".log", level=logging.INFO)
        logging.info('START logging for test agent__get_parameters_from_file in run: %s',
                     environment_directory + identifier + ".xml")

        # Construct firm filename
        config = Config()
        list_env = os.listdir(environment_directory)
        config.read_xml_config_file(environment_directory + list_env[0])
        # get the firm_directory from the environment
        firm_directory = config.firm_directory
        # and loop over all firms in the directory
        listing = os.listdir(firm_directory)
        firmFilename = firm_directory + listing[0]

        # generate an agent
        agent = Agent("baseagent id", {"test": "parameters"}, {"test": "variables"})
        agent.identifier = "test_agent"
        config.agents.append(agent)
        agent.get_parameters_from_file(firmFilename, config)

        #
        # TESTING
        #

        # test whether the parameters are read properly
        text = "Identifier has been read as follows: \n"
        text = text + "Identifier: "
        text = text + agent.identifier
        text = text + "\n"
        text = text + "Productivity: "
        text = text + str(agent.parameters["productivity"])
        print(text)
    def transaction__init(self, args):
        import os
        from sample_agent import Agent
        from sample_config import Config
        from sample_transaction import Transaction

        text = "This test checks transaction.init \n"
        self.print_info(text)
        #
        # INITIALIZATION
        #
        environment_directory = str(args[0])
        identifier = str(args[1])
        log_directory = str(args[2])

        # Configure logging parameters so we get output while the program runs
        logging.basicConfig(format='%(asctime)s %(message)s',
                            datefmt='%m/%d/%Y %H:%M:%S',
                            filename=log_directory + identifier + ".log",
                            level=logging.INFO)
        logging.info('START logging for test transaction__init in run: %s',
                     environment_directory + identifier + ".xml")

        # Construct a config
        config = Config()

        #
        # TESTING
        #

        print("Creating a transaction \n")
        transaction = Transaction()
        print("Transaction ID: ")
        print(transaction.identifier)
    def transaction__write_transaction(self, args):
        import os
        from sample_agent import Agent
        from sample_config import Config
        from sample_transaction import Transaction

        text = "This test checks transaction.write_transaction \n"
        self.print_info(text)
        #
        # INITIALIZATION
        #
        environment_directory = str(args[0])
        identifier = str(args[1])
        log_directory = str(args[2])

        # Configure logging parameters so we get output while the program runs
        logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %H:%M:%S',
                            filename=log_directory + identifier + ".log", level=logging.INFO)
        logging.info('START logging for test transaction__write_transaction in run: %s',
                     environment_directory + identifier + ".xml")

        # Construct a config
        config = Config()

        agent_one = Agent("agent_one", {"test": "parameters"}, {"test": "variables"})
        agent_two = Agent("agent_two", {"test": "parameters"}, {"test": "variables"})

        config.agents = []
        config.agents.append(agent_one)
        config.agents.append(agent_two)

        #
        # TESTING
        #

        print("Creating a transaction")
        transaction = Transaction()
        print("Assigning values")
        transaction.this_transaction("type", "asset", "agent_one", "agent_two", 1,  2,  3, 4)
        print("Adding the transaction to the books")
        transaction.add_transaction(config)
        print("Printing transaction:")
        print(transaction.write_transaction())
Beispiel #11
0
#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-

"""
Sample

Author: Pawel Fiedor ([email protected])
        Co-Pierre Georg ([email protected])

Date of last update: 20-11-2015 (Cape Town)

"""
if __name__ == '__main__':
    import sys
    from sample_config import Config
    from sample_runner import Runner

    args = sys.argv

    if len(args) != 2:
        print "Usage: ./sample runner_config_file_path.xml"
        sys.exit()

    config = Config()
    config.read_xml_config_file(str(args[1]))
    runner = Runner(config)
    runner.do_run()
Beispiel #12
0
    def agent__purge_accounts(self, args):
        import os
        from sample_agent import Agent
        from sample_config import Config  # needed for the bankDirectory

        text = "This test checks agent.purge_accounts \n"
        text = text + "  Checking if after the purge_accounts the total amount    \n"
        text = text + "  of transactions in the firm stays the same.  \n"
        self.print_info(text)
        #
        # INITIALIZATION
        #
        environment_directory = str(args[0])
        identifier = str(args[1])
        log_directory = str(args[2])

        # Configure logging parameters so we get output while the program runs
        logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %H:%M:%S',
                            filename=log_directory + identifier + ".log", level=logging.INFO)
        logging.info('START logging for test agent__purge_accounts in run: %s',
                     environment_directory + identifier + ".xml")

        # Construct firm filename
        config = Config()
        list_env = os.listdir(environment_directory)
        config.read_xml_config_file(environment_directory + list_env[0])
        # get the firm_directory from the environment
        firm_directory = config.firm_directory
        # and loop over all firms in the directory
        listing = os.listdir(firm_directory)
        firmFilename = firm_directory + listing[0]

        # generate an agent
        agent = Agent("baseagent id", {"test": "parameters"}, {"test": "variables"})
        agent.identifier = "test_agent"
        config.agents = []
        config.agents.append(agent)
        agent.get_parameters_from_file(firmFilename, config)

        #
        # TESTING
        #

        account = 0.0
        tranx = 0

        for transaction in agent.accounts:
            account = account + transaction.amount
            tranx = tranx + 1

        print(tranx)
        print(account)

        from sample_transaction import Transaction
        transaction = Transaction()
        transaction.this_transaction("deposits", "", agent.identifier,
                                     agent.identifier, 0.0,  0.09,  0, -1)
        # environment.firms[0] is only for testing purposes DO NOT USE IN PRODUCTION
        transaction.add_transaction(config)
        # environment.households[0:1][0] is only for testing purposes DO NOT USE IN PRODUCTION
        # what it does is is takes the first household in environment, but if there are no
        # households (which happens in testing) it doesn't break down

        account = 0.0
        tranx = 0

        for transaction in agent.accounts:
            account = account + transaction.amount
            tranx = tranx + 1

        print(tranx)
        print(account)

        agent.accounts[0].purge_accounts(config)

        account = 0.0
        tranx = 0

        for transaction in agent.accounts:
            account = account + transaction.amount
            tranx = tranx + 1

        print(tranx)
        print(account)
Beispiel #13
0
    def agent__get_account_num_transactions(self, args):
        import os
        from sample_agent import Agent
        from sample_config import Config  # needed for the bankDirectory

        text = "This test checks agent.get_account_num_transactions \n"
        text = text + "  The purpose of this method is to count the numbers of transaction for   \n"
        text = text + "  accounts firms hold. Our standard frm has 3 transactions by default. \n"
        text = text + "  But we double count as we have only one agent, so you should see 6. \n"
        self.print_info(text)
        #
        # INITIALIZATION
        #
        environment_directory = str(args[0])
        identifier = str(args[1])
        log_directory = str(args[2])

        # Configure logging parameters so we get output while the program runs
        logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %H:%M:%S',
                            filename=log_directory + identifier + ".log", level=logging.INFO)
        logging.info('START logging for test agent__get_account_num_transactions in run: %s',
                     environment_directory + identifier + ".xml")

        # Construct firm filename
        config = Config()
        list_env = os.listdir(environment_directory)
        config.read_xml_config_file(environment_directory + list_env[0])
        # get the firm_directory from the environment
        firm_directory = config.firm_directory
        # and loop over all firms in the directory
        listing = os.listdir(firm_directory)
        firmFilename = firm_directory + listing[0]

        # generate an agent
        agent = Agent("baseagent id", {"test": "parameters"}, {"test": "variables"})
        agent.identifier = "test_agent"
        config.agents = []
        config.agents.append(agent)
        agent.get_parameters_from_file(firmFilename, config)

        from sample_transaction import Transaction
        amount = 150.0
        transaction = Transaction()
        transaction.this_transaction("loans", "", agent.identifier, agent.identifier,
                                     amount,  0.0,  0, -1)
        # environment.firms[0] is only for testing purposes DO NOT USE IN PRODUCTION
        transaction.add_transaction(config)
        amount = 150.0
        transaction = Transaction()
        transaction.this_transaction("cash", "", agent.identifier, agent.identifier,
                                     amount,  0.0,  0, -1)
        # environment.firms[0] is only for testing purposes DO NOT USE IN PRODUCTION
        transaction.add_transaction(config)
        amount = 200.0
        transaction = Transaction()
        transaction.this_transaction("goods", "", agent.identifier, agent.identifier,
                                     amount,  0.0,  0, -1)
        # environment.firms[0] is only for testing purposes DO NOT USE IN PRODUCTION
        transaction.add_transaction(config)
        #
        # TESTING
        #

        num_transactions = 0.0          # counting all types in account together
        print(agent)
        # and checking if the number of transaction
        # is increasing by one
        for type in ["loans",  "cash",  "goods"]:
                        if type == "loans":
                                num_transactions = num_transactions + agent.get_account_num_transactions(type)
                                print("L = " + str(num_transactions))
                        if type == "cash":
                                num_transactions = num_transactions + agent.get_account_num_transactions(type)
                                print("L+M = " + str(num_transactions))
                        if type == "goods":
                                num_transactions = num_transactions + agent.get_account_num_transactions(type)
                                print("L+M+G = " + str(num_transactions))
Beispiel #14
0
    def agent__get_account(self, args):
        import os
        from sample_agent import Agent
        from sample_config import Config  # needed for the bankDirectory

        text = "This test checks agent.get_account \n"
        text = text + "  The purpose of this method is to establish an account for our firm which contains  \n"
        text = text + "  all kinds of assets and liabilities. The method simply adds all kinds of assets  \n"
        text = text + "  and stores them in one volume. As our firms holds 250.0 assets \n"
        text = text + "  and 250 liabilites the total volume of our account should be 500.0 \n"
        self.print_info(text)
        #
        # INITIALIZATION
        #
        environment_directory = str(args[0])
        identifier = str(args[1])
        log_directory = str(args[2])

        # Configure logging parameters so we get output while the program runs
        logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %H:%M:%S',
                            filename=log_directory + identifier + ".log", level=logging.INFO)
        logging.info('START logging for test agent__get_account in run: %s',
                     environment_directory + identifier + ".xml")

        # Construct firm filename
        config = Config()
        list_env = os.listdir(environment_directory)
        config.read_xml_config_file(environment_directory + list_env[0])
        # get the firm_directory from the environment
        firm_directory = config.firm_directory
        # and loop over all firms in the directory
        listing = os.listdir(firm_directory)
        firmFilename = firm_directory + listing[0]

        # generate an agent
        agent = Agent("baseagent id", {"test": "parameters"}, {"test": "variables"})
        agent.identifier = "test_agent"
        config.agents = []
        config.agents.append(agent)
        agent.get_parameters_from_file(firmFilename, config)

        agent_helper = Agent("helperagent id", {"test": "parameters"}, {"test": "variables"})
        agent_helper.identifier = "helper_agent"
        config.agents.append(agent_helper)

        from sample_transaction import Transaction
        amount = 150.0
        transaction = Transaction()
        transaction.this_transaction("loans", "", agent.identifier, agent_helper.identifier,
                                     amount,  0.0,  0, -1)
        # environment.firms[0] is only for testing purposes DO NOT USE IN PRODUCTION
        transaction.add_transaction(config)
        amount = 100.0
        transaction = Transaction()
        transaction.this_transaction("cash", "", agent.identifier, agent_helper.identifier,
                                     amount,  0.0,  0, -1)
        # environment.firms[0] is only for testing purposes DO NOT USE IN PRODUCTION
        transaction.add_transaction(config)
        amount = 250.0
        transaction = Transaction()
        transaction.this_transaction("goods", "", agent.identifier, agent_helper.identifier,
                                     amount,  0.0,  0, -1)
        # environment.firms[0] is only for testing purposes DO NOT USE IN PRODUCTION
        transaction.add_transaction(config)

        #
        # TESTING
        #
        print(agent.accounts)
        account = 0.0                                           # counting all types in account together
        print(agent.__str__())                                             # and checking how much is the total
        # volume of the account
        for type in ["loans",  "cash",  "goods"]:
                        if type == "loans":
                                account = account + agent.get_account(type)
                                print("L = " + str(account))
                        if type == "cash":
                                account = account + agent.get_account(type)
                                print("L+M = " + str(account))
                        if type == "goods":
                                account = account + agent.get_account(type)
                                print("L+M+G = " + str(account))
Beispiel #15
0
    def agent__check_consistency(self, args):
        import os
        from sample_agent import Agent
        from sample_config import Config  # needed for the bankDirectory

        text = "This test checks agent.check_consistency \n"
        self.print_info(text)
        #
        # INITIALIZATION
        #
        environment_directory = str(args[0])
        identifier = str(args[1])
        log_directory = str(args[2])

        # Configure logging parameters so we get output while the program runs
        logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %H:%M:%S',
                            filename=log_directory + identifier + ".log", level=logging.INFO)
        logging.info('START logging for test agent__check_consistency in run: %s',
                     environment_directory + identifier + ".xml")

        # Construct firm filename
        config = Config()
        list_env = os.listdir(environment_directory)
        config.read_xml_config_file(environment_directory + list_env[0])
        # get the firm_directory from the environment
        firm_directory = config.firm_directory
        # and loop over all firms in the directory
        listing = os.listdir(firm_directory)
        firmFilename = firm_directory + listing[0]

        # generate an agent
        agent = Agent("baseagent id", {"test": "parameters"}, {"test": "variables"})
        agent.identifier = "test_agent"
        config.agents = []
        config.agents.append(agent)
        agent.get_parameters_from_file(firmFilename, config)

        from sample_transaction import Transaction
        amount = 150.0
        transaction = Transaction()
        transaction.this_transaction("loans", "", agent.identifier, agent.identifier,
                                     amount,  0.0,  0, -1)
        # environment.firms[0] is only for testing purposes DO NOT USE IN PRODUCTION
        transaction.add_transaction(config)
        amount = 150.0
        transaction = Transaction()
        transaction.this_transaction("cash", "", agent.identifier, agent.identifier,
                                     amount,  0.0,  0, -1)
        # environment.firms[0] is only for testing purposes DO NOT USE IN PRODUCTION
        transaction.add_transaction(config)
        amount = 200.0
        transaction = Transaction()
        transaction.this_transaction("goods", "", agent.identifier, agent.identifier,
                                     amount,  0.0,  0, -1)
        # environment.firms[0] is only for testing purposes DO NOT USE IN PRODUCTION
        transaction.add_transaction(config)
        #
        # TESTING
        #

        print(agent.check_consistency())