SemOpt  $Revision:72+[d9d7a33b5c20+]$
setutils.cpp
1 
22 #include "semopt.h"
23 
24 /*
25  * The next two functions are motivated by the following "problem" with cplex
26  * http://pic.dhe.ibm.com/infocenter/cplexzos/v12r4/index.jsp?topic=%2Fcom.ibm.cplex.zos.help%2FUsrMan%2Ftopics%2Fdiscr_optim%2Fmip%2Fusage%2F11_terminate.html
27  *
28  */
29 
30 bool
31 isNumOne(double t)
32 {
33  if (round(t) == 1)
34  return true;
35  else
36  return false;
37 }
38 
39 bool
40 isNumZero(double t)
41 {
42  if (round(t) == 0)
43  return true;
44  else
45  return false;
46 }
47 
48 bool
49 areSimilar(double t1, double t2)
50 {
51  if (round(t1) == round(t2))
52  return true;
53  else
54  return false;
55 }
56 
57 bool
58 isEmpty(dArray s)
59 {
60  for (int i = 0; i < (int)s.size(); i++)
61  {
62  if (!isNumZero(s[i]))
63  return false;
64  }
65  return true;
66 }
67 
68 bool
69 isSubset(dArray sub, dArray super)
70 {
71  if (sub.size() != super.size())
72  return false;
73  for (int i = 0; i < (int)sub.size(); i++)
74  {
75  if (isNumOne(sub[i]) && !isNumOne(super[i]))
76  return false;
77  }
78  return true;
79 }
80 
81 bool
82 isASubset(dArray sub, dMatrix s)
83 {
84  for (int i = 0; i < (int)s.size(); i++)
85  {
86  if (isSubset(sub, s[i]))
87  return true;
88  }
89  return false;
90 }
91 
92 bool
93 isASubsetStrict(dArray sub, dMatrix s)
94 {
95  for (int i = 0; i < (int)s.size(); i++)
96  {
97 
98  if (isSubset(sub, s[i]) && !isEqual(sub, s[i]))
99  return true;
100  }
101  return false;
102 }
103 
104 bool
105 isEqual(dArray s1, dArray s2)
106 {
107  for (int i = 0; i < (int)s1.size(); i++)
108  {
109  if (!areSimilar(s1[i], s2[i]))
110  return false;
111  }
112  return true;
113 }
114 
115 bool
116 isIn(dArray sub, dMatrix s)
117 {
118  for (int i = 0; i < (int)s.size(); i++)
119  if (isEqual(sub, s[i]))
120  return true;
121  return false;
122 }
123