Skip to content

Commit

Permalink
Fixed error with distribute subsidies optimization.
Browse files Browse the repository at this point in the history
Added new data files with firm configurations.
  • Loading branch information
omelyanchikd committed Oct 2, 2016
1 parent a55855f commit 26040ad
Show file tree
Hide file tree
Showing 7 changed files with 57 additions and 17 deletions.
25 changes: 16 additions & 9 deletions ace.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

from create_firms import create_firms
from match import match
from distribute_funds import distribute_funding

import pandas
import random
Expand All @@ -27,7 +28,7 @@
firm_configurations = ["firm_info_1.csv", "firm_info_1000_10_10.csv", "firm_info_5000_5000_5000.csv", "firm_info_10000_1000_100.csv",
"firm_info_10_10_10.csv", "firm_info_100_100_100.csv", "firm_info_10000_1000_100_10.csv", "firm_info_200000.csv"]

regressions = ['loglinear','bayes', 'linear']
regressions = ['bayes', 'linear']
regression_types = ["average", "total"]

distribute_subsidies = [True, False]
Expand All @@ -36,27 +37,33 @@

with open("output.csv", "w", newline='') as output_file:
writer = csv.DictWriter(output_file, delimiter=';',
fieldnames=["seed", "firm_configuration", "regression", "regression_type", "distribute_subsidies",
fieldnames=["seed", "firm_configuration", "regression_type", "regression", "distribute_subsidies",
"disturb_result", "disturb_coefficients", "step", "mape", "r2_score"])
writer.writeheader()
output_file.close()

for seed in range(1000):
for firm_config in firm_configurations:
for firm_config in firm_configurations:
for seed in range(1000):
random.seed(seed)
firm_info = create_firms(pandas.read_csv(firm_config, sep = ";", decimal = ","), history['employees'][0])
firms = copy.deepcopy(firm_info)
match_info = []
for step in range(steps):
if step != 0:
firms = match(firms, history['employees'][step] - history['employees'][step - 1])
match_info.append(firms)
for regression in regressions:
for regression_type in regression_types:
for distribute_subsidy in distribute_subsidies:
for distribute_subsidy in distribute_subsidies:
if distribute_subsidy:
random.seed(seed)
distribute_subsidies_info = []
for step in range(steps):
distribute_subsidies_info.append(distribute_funding(history, history['budget'][step], len(firm_info)))
for regression in regressions:
for regression_type in regression_types:
for disturb_result in disturb_results:
for disturb_coefficient in disturb_coefficients:
Scenario("poland.csv", firm_info, match_info, firm_config, regression_type, distribute_subsidy, disturb_result,
disturb_coefficient, regression, seed).run(steps)
Scenario("poland.csv", firm_info, match_info, distribute_subsidies_info, firm_config, regression_type,
distribute_subsidy, disturb_result, disturb_coefficient, regression, seed).run(steps)

#scenario = Scenario("poland.csv", "firm_info_1000_10_10.csv", seed = 1)

Expand Down
15 changes: 15 additions & 0 deletions distribute_funds.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import random

def distribute_funding(history, subsidies, firm_number):
distributed_subsidies = []
subsidies_mean = history['subsidies'].mean()
subsidies_sd = history['subsidies'].std()
for i in range(firm_number):
new_subsidy = random.normalvariate(subsidies_mean, subsidies_sd)
new_subsidy = new_subsidy if new_subsidy > 0 else 0
distributed_subsidies.append(new_subsidy)
total = sum(distributed_subsidies)
total = total if total != 0 else 1
for i in range(firm_number):
distributed_subsidies[i] = distributed_subsidies[i] * subsidies / total
return distributed_subsidies
5 changes: 5 additions & 0 deletions firm_info_10000_1000_100_10.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
number;workers;sd
10000;5;1
1000;25;10
100;110;20
10;1000;300
4 changes: 4 additions & 0 deletions firm_info_1000_10_10.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
number;workers;sd
1000;25;10
10;110;20
10;1000;300
4 changes: 4 additions & 0 deletions firm_info_200000.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
number;workers;sd
169162;25;10
6156;110;20
1510;1000;300
15 changes: 9 additions & 6 deletions scenario.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,9 @@
import csv

class Scenario():
def __init__(self, history, firm_info, match_info, firm_config, regression_type = "total", distribute_subsidies = False, disturb_result = False,
disturb_coefficients = False, regression = "bayes", seed = 1, output_file = "output.csv",):
def __init__(self, history, firm_info, match_info, distribute_subsidies_info, firm_config, regression_type = "total",
distribute_subsidies = False, disturb_result = False, disturb_coefficients = False, regression = "bayes",
seed = 1, output_file = "output.csv",):
random.seed(seed)
self.seed = seed
self.history = pandas.read_csv(history, sep = ";", decimal = ",")
Expand All @@ -24,11 +25,13 @@ def __init__(self, history, firm_info, match_info, firm_config, regression_type
self.regression = regression
self.distribute_subsidies = distribute_subsidies
if self.regression_type == 'average':
self.model = World(self.history['employees'][0], self.firm_info, self.history[['workers', 'subsidies', 'sales']],
distribute_subsidies, disturb_result, disturb_coefficients, regression, regression_type, match_info)
self.model = World(self.history['employees'][0], firm_info, self.history[['workers', 'subsidies', 'sales']],
distribute_subsidies, disturb_result, disturb_coefficients, regression, regression_type, match_info,
distribute_subsidies_info)
else:
self.model = World(self.history['employees'][0], self.firm_info, self.history[['employees', 'budget', 'revenues']],
distribute_subsidies, disturb_result, disturb_coefficients, regression, regression_type, match_info)
self.model = World(self.history['employees'][0], firm_info, self.history[['employees', 'budget', 'revenues']],
distribute_subsidies, disturb_result, disturb_coefficients, regression, regression_type, match_info,
distribute_subsidies_info)

self.benchmark = self.history['revenues']
self.workers_history = self.history['employees']
Expand Down
6 changes: 4 additions & 2 deletions world.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def other__init__(self, employees, firm_info, history, distribute_subsidies, dis
self.t = 0

def __init__(self, employees, firm_info, history, distribute_subsidies, disturb_result, disturb_coefficients,
regression, regression_type, match_info):
regression, regression_type, match_info, distribute_subsidies_info):

self.distribute_subsidies = distribute_subsidies
self.disturb_result = disturb_result
Expand Down Expand Up @@ -69,6 +69,7 @@ def __init__(self, employees, firm_info, history, distribute_subsidies, disturb_
self.workers = []
self.t = 0
self.match_info = match_info
self.distribute_subsidies_info = distribute_subsidies_info

def set_parameters(self):
for firm in self.firms:
Expand Down Expand Up @@ -114,7 +115,8 @@ def step(self, subsidies, employees):
sold = 0
workers = 0
if self.distribute_subsidies:
distributed_subsidies = self.distribute_funding(subsidies)
#distributed_subsidies = self.distribute_funding(subsidies)
distributed_subsidies = self.distribute_subsidies_info[self.t]
else:
distributed_subsidies = [subsidies/len(self.firms)] * len(self.firms)
for i, firm in enumerate(self.firms):
Expand Down

0 comments on commit 26040ad

Please sign in to comment.