forked from anubhav-gres/VAL-4.2.08
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFuncExp.cpp
More file actions
142 lines (117 loc) · 3.88 KB
/
Copy pathFuncExp.cpp
File metadata and controls
142 lines (117 loc) · 3.88 KB
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
/************************************************************************
* Copyright 2008, Strathclyde Planning Group,
* Department of Computer and Information Sciences,
* University of Strathclyde, Glasgow, UK
* http://planning.cis.strath.ac.uk/
*
* Maria Fox, Richard Howey and Derek Long - VAL
* Stephen Cresswell - PDDL Parser
*
* This file is part of VAL, the PDDL validator.
*
* VAL is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* VAL is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with VAL. If not, see <http://www.gnu.org/licenses/>.
*
************************************************************************/
/*-----------------------------------------------------------------------------
VAL - The Automatic Plan Validator for PDDL+
$Date: 2009-02-05 10:50:14 $
$Revision: 1.2 $
Maria Fox, Richard Howey and Derek Long - PDDL+ and VAL
Stephen Cresswell - PDDL Parser
maria.fox@cis.strath.ac.uk
derek.long@cis.strath.ac.uk
stephen.cresswell@cis.strath.ac.uk
richard.howey@cis.strath.ac.uk
By releasing this code we imply no warranty as to its reliability
and its use is entirely at your own risk.
Strathclyde Planning Group
http://planning.cis.strath.ac.uk
----------------------------------------------------------------------------*/
#include "FuncExp.h"
#include "State.h"
#include "random.h"
#include "main.h"
#include "RobustAnalyse.h"
//#define map std::map
namespace VAL {
double
FuncExp::evaluate(const State * s) const
{
double ans = s->evaluateFE(this);
if(JudderPNEs && hasChangedCtsly)
{
ans += RobustPNEJudder*(1-2*getRandomNumberUniform()); //if not robustness testing this change will not be activated
};
return ans;
};
string FuncExp::getParameter(int paraNo) const
{
int parameterNo = 1;
for(parameter_symbol_list::const_iterator i = fe->getArgs()->begin();
i != fe->getArgs()->end();++i)
{
if(paraNo == parameterNo)
{
if(dynamic_cast<const var_symbol *>(*i))
{
return bindings.find(dynamic_cast<const var_symbol *>(*i))->second->getName();
}
else
{
return (*i)->getName();
};
};
++parameterNo;
};
return "";
};
bool FuncExp::checkConstantsMatch(const parameter_symbol_list* psl) const
{
const_symbol * aConst;
parameter_symbol_list::const_iterator ps = psl->begin(); //from event
for(parameter_symbol_list::const_iterator i = fe->getArgs()->begin(); //from func
i != fe->getArgs()->end();++i)
{
if(dynamic_cast<const const_symbol*>(*ps))
{
if(const var_symbol * aVariable = dynamic_cast<const var_symbol *>(*i))
{
aConst = const_cast<const_symbol*>(bindings.find(aVariable)->second);
}
else
{
aConst = const_cast<const_symbol*>(dynamic_cast<const const_symbol*>(*i));
};
if(*ps != aConst) return false;
};
++ps;
};
return true;
};
ostream & operator <<(ostream & o,const FuncExp & fe)
{
fe.write(o);
return o;
};
void FuncExp::setChangedCtsly()
{
hasChangedCtsly = true;
};
Environment FuncExpFactory::nullEnv;
FuncExpFactory::~FuncExpFactory()
{
for(map<string,const FuncExp*>::const_iterator i = funcexps.begin();i != funcexps.end();++i)
delete const_cast<FuncExp*>(i->second);
};
};