/
distributed_seating.py
49 lines (41 loc) · 1.56 KB
/
distributed_seating.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
import argparse
from excel_format import read_excel
from statekeeper import StateKeeper
from evaluators import HillClimber
from server import SeatingMaster
from client import SeatingSlave
from seating import SquareStateEvaluator, start_seating, TablePositionAgnosticClosnessEvaluator, dump
from text_format import read_text
def main(start=None, addr=None, port=None, slave=None):
if slave:
client = SeatingSlave(addr, port)
client.run()
else:
if start:
if start.endswith('.xls') or start.endswith('.xlsx'):
state = read_excel(open(start).read())
elif start.endswith('.txt'):
state = read_text(open(start).read())
else:
raise Exception("Don't know how to open %s" % start)
else:
state = start_seating()
print dump(state)
state.shuffle()
state_evaluator = SquareStateEvaluator(TablePositionAgnosticClosnessEvaluator())
server = SeatingMaster(
StateKeeper(
HillClimber(state_evaluator),
state=state),
(addr, 5000),
state_evaluator
)
server.run()
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--start', type=str)
parser.add_argument('--port', type=int, default=5000)
parser.add_argument('--addr', type=str, default="127.0.0.1")
parser.add_argument('--slave', action='store_true')
args = parser.parse_args()
main(addr=args.addr, port=args.port, slave=args.slave, start=args.start)