You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
1.7 KiB
77 lines
1.7 KiB
#!/usr/bin/env ruby
|
|
require 'yaml'
|
|
|
|
def gmean(x, shift)
|
|
sum=0.0
|
|
x.each {|v| sum += Math.log(v+shift)}
|
|
sum /= x.size
|
|
Math.exp(sum)-shift
|
|
end
|
|
|
|
def mean(x)
|
|
sum=0.0
|
|
x.each {|v| sum += v}
|
|
sum /= x.size
|
|
end
|
|
|
|
mip_values = YAML::load(File.open("mip-value.yaml"))
|
|
|
|
n = 0
|
|
|
|
times = []
|
|
mir_gaps = []
|
|
greedy_gaps = []
|
|
i=1
|
|
|
|
ARGV.each do |f|
|
|
yaml = YAML::load(File.open(f))
|
|
|
|
instance = yaml['input-filename'].gsub("instances/", "").gsub(".pre.mps.gz", "")
|
|
time_greedy = yaml['user-cpu-time'][2]
|
|
times.push(time_greedy)
|
|
|
|
mip_value = mip_values[instance]
|
|
lp_value = yaml['obj-value'][0]
|
|
mir_value = yaml['obj-value'][1]
|
|
greedy_value = yaml['obj-value'][2]
|
|
|
|
next if lp_value == mip_value
|
|
|
|
mir_gap = (mir_value - lp_value) / (mip_value - lp_value)
|
|
greedy_gap = (greedy_value - lp_value) / (mip_value - lp_value)
|
|
|
|
mir_ncuts = yaml['added-cuts'][1]
|
|
greedy_ncuts = yaml['added-cuts'][2]
|
|
|
|
mir_gaps.push(mir_gap)
|
|
greedy_gaps.push(greedy_gap)
|
|
|
|
print("%20s " % instance)
|
|
print("%14.2f " % lp_value)
|
|
print("%14.2f " % mip_value)
|
|
print("| %14.2f " % mir_value)
|
|
print("%14.2f " % greedy_value)
|
|
print("| %5.1f%% " % (mir_gap * 100))
|
|
print("%5.1f%% " % (greedy_gap * 100))
|
|
print("| %8d " % mir_ncuts)
|
|
print("%8d " % greedy_ncuts)
|
|
print("| %4d:%02d " % [yaml['user-cpu-time'][2] / 60, yaml['user-cpu-time'][2] % 60])
|
|
print("\n")
|
|
|
|
i += 1
|
|
end
|
|
|
|
greedy_gap = mean(greedy_gaps) * 100
|
|
mir_gap = mean(mir_gaps) * 100
|
|
|
|
time_greedy = gmean(times, 10)
|
|
|
|
print("\n%85s" % "")
|
|
print("%5.1f%% " % mir_gap)
|
|
print("%5.1f%% " % greedy_gap)
|
|
print("%21s %4d:%02d" % ["", time_greedy / 60, time_greedy % 60])
|
|
|
|
print("\n%92s" % "")
|
|
print("%5.1f%% " % ((greedy_gap / mir_gap - 1) * 100))
|
|
print("\n")
|