/
main.py
68 lines (54 loc) · 2.3 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
from simulation_configuration import SimulationConfiguration
from simulation import Simulation
from classroom import Classroom
from friend_graph import FriendGraph
from person import create_person
from rule_configuration import RuleConfiguration, RandomFloatRuleParameter, RandomIntRuleParameter
from rules import FrontOfClassRule, FarFromStrangersRule, CloseToEntranceRule, NextToFriendsRule
from util import Position
NUM_PEOPLE = 150
NUM_FRIENDSHIPS = 100
CLASS_WIDTH = 33
CLASS_HEIGHT = 20
ENTRANCE_POSITIONS = [Position(0, 9), Position(32, 9), Position(16, 19)]
FRONT_OF_CLASS_WEIGHT_LOWER = 0.1
FRONT_OF_CLASS_WEIGHT_UPPER = 1
FAR_FROM_STRANGERS_WEIGHT_LOWER = 0.5
FAR_FROM_STRANGERS_WEIGHT_UPPER = 1.5
FAR_FROM_STRANGERS_NEIGHBOURHOOD_LOWER = 2
FAR_FROM_STRANGERS_NEIGHBOURHOOD_UPPER = 4
CLOSE_TO_ENTRANCE_WEIGHT_LOWER = 0.1
CLOSE_TO_ENTRANCE_WEIGHT_UPPER = 0.5
NEXT_TO_FRIENDS_WEIGHT_LOWER = 1
NEXT_TO_FRIENDS_WEIGHT_UPPER = 3
if __name__ == '__main__':
classroom = Classroom(CLASS_WIDTH, CLASS_HEIGHT, entrance_positions=ENTRANCE_POSITIONS)
images = []
rule_configurations = [
RuleConfiguration(
FrontOfClassRule,
[RandomFloatRuleParameter("weight", FRONT_OF_CLASS_WEIGHT_LOWER, FRONT_OF_CLASS_WEIGHT_UPPER)]
),
RuleConfiguration(
FarFromStrangersRule,
[RandomFloatRuleParameter(
"weight",
FAR_FROM_STRANGERS_WEIGHT_LOWER, FAR_FROM_STRANGERS_WEIGHT_UPPER),
RandomIntRuleParameter("neighbourhood", FAR_FROM_STRANGERS_NEIGHBOURHOOD_LOWER, FAR_FROM_STRANGERS_NEIGHBOURHOOD_UPPER)]
),
RuleConfiguration(
CloseToEntranceRule,
[RandomFloatRuleParameter("weight", CLOSE_TO_ENTRANCE_WEIGHT_LOWER, CLOSE_TO_ENTRANCE_WEIGHT_UPPER)]
),
RuleConfiguration(
NextToFriendsRule,
[RandomFloatRuleParameter("weight", NEXT_TO_FRIENDS_WEIGHT_LOWER, NEXT_TO_FRIENDS_WEIGHT_UPPER)]
)
]
people = []
for i in range(NUM_PEOPLE):
people.append(create_person(rule_configurations))
friend_graph = FriendGraph([person.id for person in people])
friend_graph.randomize_friendships(NUM_FRIENDSHIPS)
simulation = Simulation(SimulationConfiguration(classroom, friend_graph, people))
simulation.run_simulation()