Main Page   Class Hierarchy   Compound List   File List   Contact   Download   Symbolic Constraints   Examples  

cp_knapsack.h

00001 #ifndef KNAPSACK_H
00002 #define KNAPSACK_H
00003 
00004 #include <scil/scil.h>
00005 #include <set>
00006 #include <vector>
00007 
00008 namespace SCIL {
00009 
00010 class LCI : public cons_obj {
00011 
00012    public:
00013 
00014       std::vector<int> coeff_array ;
00015       int  rhs ;
00016       std::map<int,var>&  item_index_map ;
00017   
00018       LCI(std::vector<int> coeff,int r, std::map<int,var>&  map);
00019       ~LCI();
00020 
00021       /*  
00022          virtual  double coeff(var_obj* v);
00023        */
00024   
00025       virtual void non_zero_entries(row& r);
00026 
00027 };
00028 
00029 class CP_KNAPSACK : public sym_constraint {
00030 
00031    private:
00032 
00033       cons_obj* KC ;
00034       std::map<int,var> item_index_map; 
00035       double violation_tolerance ;
00036       bool lifted_in_C2 ;
00037       bool lifted_in_F ;
00038       int index ; 
00039       int rightsum ;
00041       int gammasum ;
00042       int Ti ;
00043       int number_variables ;                    
00044       int r ;
00045       int previous_lift_index ; 
00046       int righthandside ;
00047       bool no_sep ;
00048       std::list<int> negative_coeff_indices ;  
00049       std::vector<int>  liftcoeffs ;
00050       std::vector<int>  coeffs ;                
00051 
00052       std::map<int,double>  fractional_point ; 
00053       std::vector<int> sort_array ;             
00054       std::vector<int> liftsequence_on_R ;      
00055       std::vector<int> liftsequence_on_C2 ;     
00056       std::vector<int>* W1 ;
00057       std::vector<int>* W2 ;
00058       std::set<int> F ;
00059       std::set<int> R ;
00060       std::set<int> C1 ;
00061       std::set<int> C2 ;
00062       std::set<int> to_lift_in_F ;
00063       std::set<int> to_lift_in_C2 ;
00064       std::set<int> to_lift_in_R ;
00065       std::set<int> N ;
00066 
00070       int find_largest_index(std::vector<int> vec, int val);
00071 
00072    public:
00073  
00075       CP_KNAPSACK(cons_obj* KCt, double tolerance=0.001);
00076  
00079       void init(subproblem& S);  
00080  
00081 
00085       void update_Ti(int x);
00086 
00091       void update_gammasum(int x);
00092 
00096       int init_righthandsum();
00097 
00104       int update_righthandsum(int x);
00105 
00106 
00109       bool compute_cover();
00110 
00111       void lift_on_F( std::vector<int>* W );
00112   
00113       void lift_on_C2 ( std::vector<int>* W );
00114   
00115       void lift_on_R ( std::vector<int>* W );
00116   
00117       void compute_first_row();
00118   
00119       void compute_next_row();
00120   
00121       void setup_values(subproblem& S);
00122 
00125       status standard_separation(subproblem& S);
00126 
00129       void info();
00130 };
00131 
00132 }
00133 
00134 #endif
Generated on Mon Mar 28 22:03:47 2011 for SCIL by  doxygen 1.6.3