google-research

Форк
0
90 строк · 2.3 Кб
1
import FirstOrderLp
2
import CSV
3

4
include("../src/PrimalDualMethods.jl")
5
include("script_parameters.jl")
6
include("../src/choose_primal_weight.jl")
7

8
# Parse command line arguements
9
@assert length(ARGS) == 9
10

11
test_problem_folder = ARGS[1]
12

13
results_csv_file = ARGS[2]
14
@assert length(results_csv_file) > 3
15
@assert results_csv_file[end-3:end] == ".csv"
16

17
method = RecoverPrimalDualMethodFromString(ARGS[3])
18

19
problem_name = ARGS[4]
20

21

22
restart_scheme_name_arg = ARGS[5]
23

24
restart_length = parse(Int64, ARGS[6])
25

26
if ARGS[7] == "yes"
27
  always_reset_to_average = true
28
elseif ARGS[7] == "no"
29
  always_reset_to_average = false
30
else
31
  error("unknown value for reset to average")
32
end
33

34
if restart_scheme_name_arg == "no_restarts"
35
  restart_scheme = NoRestarts()
36
elseif restart_scheme_name_arg == "fixed_frequency"
37
  restart_scheme =
38
    FixedFrequencyRestarts(restart_length, always_reset_to_average)
39
elseif restart_scheme_name_arg == "adaptive"
40
  restart_scheme = AdaptiveRestarts(exp(-1), always_reset_to_average)
41
else
42
  error("unknown restart scheme")
43
end
44

45
iteration_limit = parse(Int64, ARGS[8])
46

47
kkt_tolerance = parse(Float64, ARGS[9])
48

49

50
println("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

59
params = PrimalDualOptimizerParameters(
60
  method,
61
  nothing, # step_size (forces the solver to use a provably correct step size)
62
  1.0, # primal_weight
63
  30, # record every
64
  100, # print every
65
  true, # verbose
66
  ITERATION_LIMIT_FOR_FINDING_BEST_PRIMAL_WEIGHT, # iteration limit
67
  NoRestarts(), # restart scheme
68
  nothing, # don't record information on subspace
69
  kkt_tolerance,
70
)
71

72
instance_path = joinpath(test_problem_folder, "$(problem_name).mps.gz")
73
lp = FirstOrderLp.qps_reader_to_standard_form(instance_path)
74
lp.variable_upper_bound .= Inf
75

76
if method == ADMM
77
  convert_problem_to_standard_form!(lp)
78
end
79

80
println("FIND BEST PRIMAL WEIGHT")
81
best_primal_weight =
82
  find_best_primal_weight(params, lp, 4.0 .^ collect(-5:5), 1.0, 1.0)
83
println("best_primal_weight = $best_primal_weight")
84

85
println("RUN ALGORITHM")
86
params.restart_scheme = restart_scheme
87
params.iteration_limit = iteration_limit
88
params.primal_weight = best_primal_weight
89
solver_output = optimize(params, lp)
90
CSV.write(results_csv_file, solver_output.iteration_stats)
91

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.