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

cons_obj.cc

00001 #include<scil/cons_obj.h>
00002 #include<scil/var_obj.h>
00003 #include<scil/row.h>
00004 #include<scil/subproblem.h>
00005 
00006 cons_obj::cons_obj (cons_sense s, double rhs__)
00007 {
00008   sense_ = s;
00009   rhs_ = rhs__;
00010 
00011   //init();
00012 };
00013 
00014 cons_obj::cons_obj ()
00015 {
00016   sense_ = Equal;
00017   rhs_ = 0;
00018 
00019   //init();
00020 }
00021 
00022 bool
00023 cons_obj::violated (subproblem & S)
00024 {
00025   row
00026     r;
00027   row_entry
00028     t;
00029   double
00030     x = 0;
00031   non_zero_entries(r);
00032   forall (t, r)
00033   {
00034     x += t.coeff * S.value (t.Var);
00035   };
00036 
00037   if (sense () == Equal)
00038     return fabs (x - rhs ()) > 0.001;
00039   if (sense () == Less)
00040     return x - rhs () > 0.001;
00041   return x - rhs () < -0.001;
00042 }
00043 
00044 void
00045 cons_obj::init ()
00046 {
00047   row r;
00048   non_zero_entries(r);
00049 
00050   non_zeros=r.size();
00051   rows=new int[non_zeros];
00052   coeffs=new double[non_zeros];
00053 
00054   row_entry v;
00055   int i=0;
00056   forall(v, r) {
00057     rows[i]=v.Var.index();
00058     coeffs[i]=v.coeff;
00059     i++;
00060   };
00061 }
00062 
00063 void
00064 cons_obj::set_sense (cons_sense s)
00065 {
00066   /*{\Mop sets the sense of the basic constraint.} */
00067   sense_ = s;
00068 };
00069 
00070 
00071 void
00072 cons_obj::set_rhs (double r)
00073 {
00074   /*{\Mop sets the right-hand side of the basic constraint.} */
00075   rhs_ = r;
00076 };
00077 
00078 double
00079 cons_obj::rhs ()
00080 {
00081   /*{\Mop returns the right-hand-side.} */
00082   return rhs_;
00083 };
00084 
00085 
00086 cons_sense
00087 cons_obj::sense ()
00088 {
00089   /*{\Mop retunrs the sense.} */
00090   return sense_;
00091 }
00092 
00093 void
00094 cons_obj::set (var_obj * v, double d)
00095 {
00096   CM[v] = d;
00097 }
00098 
00099 double
00100 cons_obj::upper_bound() {
00101   if(sense()==Greater) return 1e+30;
00102   return rhs();
00103 }
00104 
00105 double
00106 cons_obj::lower_bound() {
00107   if(sense()==Less) return -1e+30;
00108   return rhs();
00109 };

Generated on Tue Nov 16 15:18:14 2004 for SCIL by doxygen1.2.16