google-research
90 строк · 2.3 Кб
1import FirstOrderLp
2import CSV
3
4include("../src/PrimalDualMethods.jl")
5include("script_parameters.jl")
6include("../src/choose_primal_weight.jl")
7
8# Parse command line arguements
9@assert length(ARGS) == 9
10
11test_problem_folder = ARGS[1]
12
13results_csv_file = ARGS[2]
14@assert length(results_csv_file) > 3
15@assert results_csv_file[end-3:end] == ".csv"
16
17method = RecoverPrimalDualMethodFromString(ARGS[3])
18
19problem_name = ARGS[4]
20
21
22restart_scheme_name_arg = ARGS[5]
23
24restart_length = parse(Int64, ARGS[6])
25
26if ARGS[7] == "yes"
27always_reset_to_average = true
28elseif ARGS[7] == "no"
29always_reset_to_average = false
30else
31error("unknown value for reset to average")
32end
33
34if restart_scheme_name_arg == "no_restarts"
35restart_scheme = NoRestarts()
36elseif restart_scheme_name_arg == "fixed_frequency"
37restart_scheme =
38FixedFrequencyRestarts(restart_length, always_reset_to_average)
39elseif restart_scheme_name_arg == "adaptive"
40restart_scheme = AdaptiveRestarts(exp(-1), always_reset_to_average)
41else
42error("unknown restart scheme")
43end
44
45iteration_limit = parse(Int64, ARGS[8])
46
47kkt_tolerance = parse(Float64, ARGS[9])
48
49
50println("OPTIONS SELECTED:")
51@show test_problem_folder
52@show results_csv_file
53@show method
54@show problem_name
55@show restart_scheme
56@show iteration_limit
57@show kkt_tolerance
58
59params = PrimalDualOptimizerParameters(
60method,
61nothing, # step_size (forces the solver to use a provably correct step size)
621.0, # primal_weight
6330, # record every
64100, # print every
65true, # verbose
66ITERATION_LIMIT_FOR_FINDING_BEST_PRIMAL_WEIGHT, # iteration limit
67NoRestarts(), # restart scheme
68nothing, # don't record information on subspace
69kkt_tolerance,
70)
71
72instance_path = joinpath(test_problem_folder, "$(problem_name).mps.gz")
73lp = FirstOrderLp.qps_reader_to_standard_form(instance_path)
74lp.variable_upper_bound .= Inf
75
76if method == ADMM
77convert_problem_to_standard_form!(lp)
78end
79
80println("FIND BEST PRIMAL WEIGHT")
81best_primal_weight =
82find_best_primal_weight(params, lp, 4.0 .^ collect(-5:5), 1.0, 1.0)
83println("best_primal_weight = $best_primal_weight")
84
85println("RUN ALGORITHM")
86params.restart_scheme = restart_scheme
87params.iteration_limit = iteration_limit
88params.primal_weight = best_primal_weight
89solver_output = optimize(params, lp)
90CSV.write(results_csv_file, solver_output.iteration_stats)
91