diff --git a/experiments/experiment.jl b/experiments/experiment.jl index 862e92523ceaad580a07951ed79607011c999614..5c0f6dc638fda252e148b284f0492cc1d40ae336 100644 --- a/experiments/experiment.jl +++ b/experiments/experiment.jl @@ -65,6 +65,8 @@ function run_experiment(exp::Experiment; save_output::Bool=true) # Save data: if save_output Serialization.serialize(joinpath(exp.output_path, "$(exp.save_name)_outcome.jls"), outcome) + Serialization.serialize(joinpath(exp.output_path, "$(exp.save_name)_bmk.jls"), bmk) + meta(outcome::ExperimentOutcome; save_output::Bool=true) end return outcome diff --git a/src/generator.jl b/src/generator.jl index bec43193364604750f1015643631878e4a947d42..b4d986c56b371649a9c7799950bdbbc7887d646e 100644 --- a/src/generator.jl +++ b/src/generator.jl @@ -1,21 +1,6 @@ using CounterfactualExplanations.Objectives using CounterfactualExplanations.Generators: GradientBasedGenerator -"Constructor for `CCEGenerator`." -function CCEGenerator(; - λ::Union{AbstractFloat,Vector{<:AbstractFloat}}=[0.1, 1.0], - κ::Real=1.0, - temp::Real=0.1, - kwargs... -) - function _set_size_penalty(ce::AbstractCounterfactualExplanation) - return ECCCo.set_size_penalty(ce; κ=κ, temp=temp) - end - _penalties = [Objectives.distance_l2, _set_size_penalty] - λ = λ isa AbstractFloat ? [0.0, λ] : λ - return GradientBasedGenerator(; penalty=_penalties, λ=λ, kwargs...) -end - "Constructor for `ECECCCoGenerator`: Energy Constrained Conformal Counterfactual Explanation Generator." function ECCCoGenerator(; λ::Union{AbstractFloat,Vector{<:AbstractFloat}}=[0.2,0.4,0.4], @@ -45,11 +30,11 @@ function ECCCoGenerator(; _set_size_penalty = (ce::AbstractCounterfactualExplanation) -> ECCCo.set_size_penalty(ce; κ=κ, temp=temp) # Energy penalty - _energy_penalty = function (ce::AbstractCounterfactualExplanation) + _energy_penalty = function(ce::AbstractCounterfactualExplanation) if use_energy_delta - return ECCCo.energy_delta(ce; n=nsamples, nmin=nmin, kwargs...) + return ECCCo.energy_delta(ce; n=nsamples, nmin=nmin) else - return ECCCo.distance_from_energy(ce; n=nsamples, nmin=nmin, kwargs...) + return ECCCo.distance_from_energy(ce; n=nsamples, nmin=nmin) end end @@ -58,18 +43,4 @@ function ECCCoGenerator(; # Generator return GradientBasedGenerator(; loss=loss_fun, penalty=_penalties, λ=λ, opt=opt, kwargs...) -end - -"Constructor for `EnergyDrivenGenerator`." -function EnergyDrivenGenerator(; λ::Union{AbstractFloat,Vector{<:AbstractFloat}}=[0.1, 1.0], kwargs...) - _penalties = [Objectives.distance_l2, ECCCo.distance_from_energy] - λ = λ isa AbstractFloat ? [0.0, λ] : λ - return GradientBasedGenerator(; penalty=_penalties, λ=λ, kwargs...) -end - -"Constructor for `TargetDrivenGenerator`." -function TargetDrivenGenerator(; λ::Union{AbstractFloat,Vector{<:AbstractFloat}}=[0.1, 1.0], kwargs...) - _penalties = [Objectives.distance_l2, ECCCo.distance_from_targets] - λ = λ isa AbstractFloat ? [0.0, λ] : λ - return GradientBasedGenerator(; penalty=_penalties, λ=λ, kwargs...) end \ No newline at end of file