-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexample.py
69 lines (58 loc) · 1.96 KB
/
example.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
69
import sys
from mpyc.runtime import mpc
from mupol.plaintext.freighters_day_planning.problem import Problem
from mupol.plaintext.freighters_day_planning.random_problem_generator import (
RandomProblemGenerator,
)
from mupol.plaintext.freighters_day_planning.simple_solver import SimpleSolver
from mupol.mpc.input_uploader import prepare_mpc_data
from mupol.mpc.solver import MPCSolver
from mupol.mpc.utils.args_handler import MPCArgsHandler
from mupol.mpc.utils.logger import setup_logger
async def main() -> None:
args = MPCArgsHandler(sys.argv[1:]).args
logger = setup_logger(args.logger_config)
await mpc.start()
generator = RandomProblemGenerator(
args.num_freighters,
args.min_num_trucks,
args.max_num_trucks,
args.truck_capacity,
args.num_orders,
args.min_order_volume,
args.max_order_volume,
args.random_seed,
)
problem: Problem = generator.get_problem()
logger.debug("Problem instance: %s", str(problem))
plain_solver = SimpleSolver()
logger.info(
"Plain solver result with hardcoded weight: %s", plain_solver.solve(problem)
)
logger.debug("Uploading data in MPC")
await prepare_mpc_data(
problem, args.dummy_freighter_id, args.dummy_node, args.bit_length_sectypes
)
if args.test_mode == 1:
for order in problem.orders:
logger.debug(
"Order: volume %s origin %s destination %s",
await mpc.output(order.volume),
await mpc.output(order.origin),
await mpc.output(order.destination),
)
logger.debug("Running solver")
solver = MPCSolver(
problem,
args.dummy_freighter_id,
args.dummy_node,
args.truck_capacity,
args.use_priorities,
args.test_mode,
logger,
args.norm_weight,
)
await solver.solve_problem()
await mpc.shutdown()
if __name__ == "__main__":
mpc.run(main())