00001
00002
00003
00004
00005
00006
00007
00008 #ifndef OPTIMIZER_H_
00009 #define OPTIMIZER_H_
00010
00011 #include "SatValue.h"
00012 #include <map>
00013 using namespace std;
00014
00015 class CNode;
00016 class Term;
00017
00018 class Optimizer {
00019
00020 private:
00021 CNode* c;
00022 Term* cost_fn;
00023 long int upper_bound;
00024 int opt_cost;
00025 map<Term*, SatValue> assignments;
00026 bool min;
00027 int num_iterations;
00028
00029 int num_solves;
00030 int ticks;
00031
00032
00033
00034 public:
00035
00036
00037
00038
00039
00040
00041
00042 Optimizer(CNode* c, Term* cost_fn, bool min, long int bound,
00043 int num_iterations = -1);
00044
00045
00046
00047
00048
00049
00050 long int get_optimal_cost();
00051
00052 const map<Term*, SatValue>& get_assignment();
00053 ~Optimizer();
00054
00055 string get_stats();
00056
00057 private:
00058 void maximize();
00059 };
00060
00061 #endif