/
bioExprGreater.cc
71 lines (58 loc) · 1.64 KB
/
bioExprGreater.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
//-*-c++-*------------------------------------------------------------
//
// File name : bioExprGreater.cc
// @date Thu Apr 19 07:27:30 2018
// @author Michel Bierlaire
// @version Revision 1.0
//
//--------------------------------------------------------------------
#include "bioExprGreater.h"
#include <sstream>
#include "bioDebug.h"
#include "bioExceptions.h"
bioExprGreater::bioExprGreater(bioExpression* l, bioExpression* r) :
left(l), right(r) {
listOfChildren.push_back(l) ;
listOfChildren.push_back(r) ;
}
bioExprGreater::~bioExprGreater() {
}
const bioDerivatives* bioExprGreater::getValueAndDerivatives(std::vector<bioUInt> literalIds,
bioBoolean gradient,
bioBoolean hessian) {
if (gradient && theDerivatives.getSize() != literalIds.size()) {
theDerivatives.resize(literalIds.size()) ;
}
if (gradient || hessian) {
if (containsLiterals(literalIds)) {
std::stringstream str ;
str << "Expression Greater is not differentiable" << std::endl ;
throw bioExceptions(__FILE__,__LINE__,str.str()) ;
}
}
if (gradient) {
if (hessian) {
theDerivatives.setDerivativesToZero() ;
}
else {
theDerivatives.setGradientToZero() ;
}
}
if (left->getValue() > right->getValue()) {
theDerivatives.f = 1.0 ;
}
else {
theDerivatives.f = 0.0 ;
}
return &theDerivatives ;
}
bioString bioExprGreater::print(bioBoolean hp) const {
std::stringstream str ;
if (hp) {
str << ">(" << left->print(hp) << "," << right->print(hp) << ")" ;
}
else {
str << "(" << left->print(hp) << ">" << right->print(hp) << ")" ;
}
return str.str() ;
}