using System; using System.Text; using Microsoft.SolverFoundation.Services; namespace Microsoft.SolverFoundation.Plugin.Z3 { /// /// Combining objective functions /// public enum OptimizationKind { Lexicographic, BoundingBox, ParetoOptimal }; /// /// Algorithm for solving cardinality constraints /// public enum CardinalityAlgorithm { FuMalik, CoreMaxSAT } /// /// Algorithm for solving pseudo-boolean constraints /// public enum PseudoBooleanAlgorithm { WeightedMaxSAT, IterativeWeightedMaxSAT, BisectionWeightedMaxSAT, WeightedPartialMaxSAT2 } /// /// Strategy for solving arithmetic optimization /// public enum ArithmeticStrategy { Basic, Farkas } public abstract class Z3BaseDirective : Directive { protected OptimizationKind _optKind; protected CardinalityAlgorithm _cardAlgorithm; protected PseudoBooleanAlgorithm _pboAlgorithm; protected ArithmeticStrategy _arithStrategy; protected string _smt2LogFile; public Z3BaseDirective() { Arithmetic = Arithmetic.Exact; } public OptimizationKind OptKind { get { return _optKind; } set { _optKind = value; } } public CardinalityAlgorithm CardinalityAlgorithm { get { return _cardAlgorithm; } set { _cardAlgorithm = value; } } public PseudoBooleanAlgorithm PseudoBooleanAlgorithm { get { return _pboAlgorithm; } set { _pboAlgorithm = value; } } public ArithmeticStrategy ArithmeticStrategy { get { return _arithStrategy; } set { _arithStrategy = value; } } public string SMT2LogFile { get { return _smt2LogFile; } set { _smt2LogFile = value; } } public override string ToString() { var sb = new StringBuilder(); sb.Append(this.GetType().Name); sb.Append("("); sb.AppendFormat("OptKind: {0}, ", _optKind); sb.AppendFormat("SMT2LogFile: {0}", _smt2LogFile); sb.Append(")"); return sb.ToString(); } } }