#[derive(Clone, PartialEq, Eq, Debug)]
pub enum PbEncoding {
Swc,
Gte,
Adder,
}
#[derive(Clone, PartialEq, Eq, Debug)]
pub enum CardinalEncoding {
CNetworks,
Totalizer,
MTotalizer,
}
#[derive(Clone, PartialEq, Eq, Debug)]
pub enum WeightStrategy {
None,
Normal,
Diversify,
}
#[derive(Clone, PartialEq, Eq, Debug)]
pub enum Verbosity {
None,
Some,
}
#[derive(Clone, PartialEq, Eq, Debug)]
pub enum Symmetry {
None,
Sym(i32),
}
#[derive(Clone, PartialEq, Eq, Debug)]
pub enum MergeStrategy {
Sequential,
SequentialSorted,
Binary,
}
#[derive(Clone, PartialEq, Eq, Debug)]
pub enum GraphType {
Vig,
CVig,
Res,
}
#[derive(Clone, PartialEq, Eq, Debug)]
pub struct MaxSatConfig {
pub pb_encoding: PbEncoding,
pub cardinal_encoding: CardinalEncoding,
pub weight_strategy: WeightStrategy,
pub merge_strategy: MergeStrategy,
pub graph_type: GraphType,
pub verbosity: Verbosity,
pub symmetry: Symmetry,
pub bmo: bool,
}
impl Default for MaxSatConfig {
fn default() -> Self {
Self {
pb_encoding: PbEncoding::Swc,
cardinal_encoding: CardinalEncoding::Totalizer,
weight_strategy: WeightStrategy::None,
merge_strategy: MergeStrategy::Binary,
graph_type: GraphType::Res,
symmetry: Symmetry::Sym(i32::MAX),
verbosity: Verbosity::None,
bmo: true,
}
}
}
impl MaxSatConfig {
#[must_use]
pub const fn pb(mut self, pb_encoding: PbEncoding) -> Self {
self.pb_encoding = pb_encoding;
self
}
#[must_use]
pub const fn cardinal(mut self, card_encoding: CardinalEncoding) -> Self {
self.cardinal_encoding = card_encoding;
self
}
#[must_use]
pub const fn weight(mut self, weight_strategy: WeightStrategy) -> Self {
self.weight_strategy = weight_strategy;
self
}
#[must_use]
pub const fn merge(mut self, merge_strategy: MergeStrategy) -> Self {
self.merge_strategy = merge_strategy;
self
}
#[must_use]
pub const fn graph(mut self, graph_type: GraphType) -> Self {
self.graph_type = graph_type;
self
}
#[must_use]
pub const fn symmetry(mut self, symmetry: Symmetry) -> Self {
self.symmetry = symmetry;
self
}
#[must_use]
pub const fn verbosity(mut self, verb: Verbosity) -> Self {
self.verbosity = verb;
self
}
#[must_use]
pub const fn bmo(mut self, bmo: bool) -> Self {
self.bmo = bmo;
self
}
}