dogs 1.3.0

Discrete Optimization Global Search framework. Implements various search algorithms that can be found in combinatorial optimization or heuristic search.
Documentation
module BestKnownStats

function generate_best_known_stats(instances_csv, solver_variants, solver_variant_and_instance, output_filename)
    res = "solver,nb_instances,nb_better_bk,nb_strictly_better_bk,nb_proved_optimal\n"
    for s in solver_variants
        nb_better_bk = 0
        nb_strictly_better_bk = 0
        nb_proved_optimal = 0
        nb_instances = 0
        for inst in instances_csv
            nb_instances += 1
            bk_primal = inst.bk_primal
            inst_solver_id = "$(s["name"])$(s["solver_params_compact"])_$(inst.name)"
            stats = solver_variant_and_instance[inst_solver_id]["stats"]
            best_primal = nothing
            is_optimal = false
            if "best_primal" in keys(stats)
                best_primal = stats["best_primal"]
                is_optimal = stats["is_optimal"]
            elseif "primal_list" in keys(stats)
                best_primal = min(stats["primal_list"]...)
            else
                println(RED_FG("'best_primal' nor 'primal_list' is found"))
                res *= ",?,?,?"
            end
            # update stats
            if is_optimal
                nb_proved_optimal += 1
            end
            if best_primal < bk_primal
                nb_strictly_better_bk += 1
            end
            if best_primal <= bk_primal
                nb_better_bk += 1
            end
        end
        res *= "$(s["id"]),$(nb_instances),$(nb_better_bk),$(nb_strictly_better_bk),$(nb_proved_optimal)\n"
    end
    f = open(output_filename, "w")
    write(f, res)
    close(f)
end

end # module