///|
fn main {
let output = try {
let f = @belief.frame(["accept", "reject"])
let inputs = [
@belief.source("classifier-a", @belief.simple_support(f, 1, 0.8)),
@belief.source("classifier-b", @belief.simple_support(f, 1, 0.7)),
@belief.source("classifier-c", @belief.simple_support(f, 2, 0.4)),
]
let result = @belief.pipeline(inputs, Yager)
let decision = result
.mass()
.decide(
["accept", "reject"],
[[1.0, -2.0], [-0.2, 0.8]],
@belief.decision_policy(),
)
let sensitivity = @belief.leave_one_out(inputs, Yager)
Json::object({
"workflow": Json::string("ensemble-decision"),
"action": Json::string(decision.label),
"accepted": Json::boolean(decision.accepted),
"reason": Json::string(decision.reason),
"expected_utility": Json::number(decision.expected_score),
"omitted": Json::array(
sensitivity.map(item => Json::string(item.omitted)),
),
"winner_changes": Json::array(
sensitivity.map(item => Json::boolean(item.winner_changed)),
),
})
} catch {
_ => abort("ensemble example failed")
}
println(output.stringify())
}