diff --git a/Procfile b/Procfile new file mode 100644 index 0000000..6cb02d5 --- /dev/null +++ b/Procfile @@ -0,0 +1 @@ +web: python run.py -p=$PORT diff --git a/requirements.txt b/requirements.txt index b699870..1e054bf 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1 @@ -jupyter==1.0.0 -Mesa==0.7.6 +Mesa \ No newline at end of file diff --git a/run.py b/run.py index a25f3b1..517658f 100644 --- a/run.py +++ b/run.py @@ -1,3 +1,6 @@ from server import server +import os -server.launch() +port = int(os.getenv("PORT", 4200)) + +server.launch(port=port, open_browser=False) diff --git a/server.py b/server.py index 62b2313..1da7dd7 100644 --- a/server.py +++ b/server.py @@ -1,22 +1,23 @@ from mesa.visualization.ModularVisualization import ModularServer from mesa.visualization.modules import CanvasGrid, ChartModule, TextElement +from mesa.visualization.UserParam import UserSettableParameter from model import SchellingModel class HappyElement(TextElement): - ''' + """ Display a text count of how many happy agents there are. - ''' + """ def render(self, model): return "Happy agents: " + str(model.happy) def schelling_draw(agent): - ''' + """ Portrayal Method for canvas - ''' + """ if agent is None: return portrayal = {"Shape": "circle", "r": 0.5, "Filled": "true", "Layer": 0} @@ -27,11 +28,24 @@ def schelling_draw(agent): portrayal["Color"] = "Blue" return portrayal + happy_element = HappyElement() canvas_element = CanvasGrid(schelling_draw, 20, 20, 500, 500) happy_chart = ChartModule([{"Label": "happy", "Color": "Black"}]) -server = ModularServer(SchellingModel, - [canvas_element, happy_element, happy_chart], - "Schelling’s Segregation Model", - 20, 20, 0.8, 0.2, 4) +model_params = { + "height": 20, + "width": 20, + "density": UserSettableParameter("slider", "Agent density", 0.8, 0.1, 1.0, 0.1), + "minority_pc": UserSettableParameter( + "slider", "Fraction minority", 0.2, 0.00, 1.0, 0.05 + ), + "homophily": UserSettableParameter("slider", "Homophily", 3, 0, 8, 1), +} + +server = ModularServer( + SchellingModel, + [canvas_element, happy_element, happy_chart], + "Schelling", + model_params, +)