Example #1
0
class Simulation:
    def __init__(self):
        self.voters = []
        self.parties = []
        self.log = Log("simulation.log")
        self.tracker = Tracker(self)
        self.display = Display(self)

    def generate_parties(self, n):
        for i in range(n):
            name = "P" + format(i, 'd')
            self.parties.append(Party(self, name, i))
            self.log.write("Created party: " + name)
            self.tracker.add_party(name)

    def generate_voters(self, n):
        for i in range(n):
            self.voters.append(Voter(self))
        self.log.write("Created {} voters".format(n, "d"))

    def get_parties(self):
        return self.parties

    def get_voters(self):
        return self.voters

    def set_tracker(self, tracker):
        self.tracker = tracker

    def run(self, number_of_steps):

        self.log.write("Starting simulation for {} loops".format(
            number_of_steps, "d"))
        for i in range(number_of_steps):

            print("\nStep {}:".format(i))

            for party in self.parties:
                party.reset_voters()

            for voter in self.voters:
                voter.update_vote()

            for party in self.parties:
                print("Party {} with the {} strategy has {} votes.".format(
                    party.name, party.strategy, party.count_voters()))
                party.update_location()

            self.display.update_plot()

            self.tracker.save_current_state()

        self.log.write("Finishing simulation")

        timestamp = datetime.now().strftime("%Y%m%d-%H%M%S")
        filename = timestamp + "_party_movement.csv"
        self.log.write("Writing CSV file: " + filename)
        self.tracker.export_to_csv(filename)