Generated on Thu Jan 20 2022 00:00:00 for Gecode by doxygen 1.9.1
script.cpp
Go to the documentation of this file.
1 /* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2 /*
3  * Main authors:
4  * Christian Schulte <schulte@gecode.org>
5  *
6  * Copyright:
7  * Christian Schulte, 2004
8  *
9  * This file is part of Gecode, the generic constraint
10  * development environment:
11  * http://www.gecode.org
12  *
13  *
14  * Permission is hereby granted, free of charge, to any person obtaining
15  * a copy of this software and associated documentation files (the
16  * "Software"), to deal in the Software without restriction, including
17  * without limitation the rights to use, copy, modify, merge, publish,
18  * distribute, sublicense, and/or sell copies of the Software, and to
19  * permit persons to whom the Software is furnished to do so, subject to
20  * the following conditions:
21  *
22  * The above copyright notice and this permission notice shall be
23  * included in all copies or substantial portions of the Software.
24  *
25  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
29  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
30  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
31  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32  *
33  */
34 
35 #include <gecode/driver.hh>
36 
37 #include <cmath>
38 
39 namespace Gecode { namespace Driver {
40 
41  void
42  stop(Support::Timer& timer, std::ostream& os) {
43  double t = timer.stop();
44  unsigned int sec = static_cast<unsigned int>(floor(t / 1000.0));
45  unsigned int o_msec = static_cast<unsigned int>
46  (t - 1000.0*static_cast<double>(sec));
47  unsigned int min = sec / 60;
48  unsigned int o_sec = sec - 60 * min;
49  unsigned int hour = min / 60;
50  unsigned int o_min = min - 60 * hour;
51  unsigned int day = hour / 24;
52  unsigned int o_hour = hour - 24 * day;
53  if (day)
54  os << day << " days, ";
55  if (o_hour)
56  os << o_hour << ":";
57  if (o_hour || o_min) {
58  if (o_hour) {
59  os.width(2); os.fill('0');
60  }
61  os << o_min << ":";
62  os.width(2); os.fill('0');
63  }
64  os << o_sec << ".";
65  os.width(3); os.fill('0');
66  os << o_msec
67  << " ("
68  << std::showpoint << std::fixed
69  << std::setprecision(3) << t << " ms)";
70  }
71 
72 
73  double
74  am(double t[], unsigned int n) {
75  if (n < 1)
76  return 0.0;
77  double s = 0;
78  for (unsigned int i=0; i<n; i++)
79  s += t[i];
80  return s / n;
81  }
82 
83  double
84  dev(double t[], unsigned int n) {
85  if (n < 2)
86  return 0.0;
87  double m = am(t,n);
88  double s = 0.0;
89  for (unsigned int i=0; i<n; i++) {
90  double d = t[i]-m;
91  s += d*d;
92  }
93  return ::sqrt(s / (n-1)) / m;
94  }
95 
96  bool CombinedStop::sigint;
97 
98 }}
99 
100 // STATISTICS: driver-any
NodeType t
Type of node.
Definition: bool-expr.cpp:230
int n
Number of negative literals for node type.
Definition: bool-expr.cpp:234
double stop(void)
Get time since start of timer.
Definition: timer.hpp:76
double dev(double t[], unsigned int n)
Compute deviation of n elements in t.
Definition: script.cpp:84
void stop(Support::Timer &timer, std::ostream &os)
Get time since start of timer and print user friendly time information.
Definition: script.cpp:42
double am(double t[], unsigned int n)
Compute arithmetic mean of n elements in t.
Definition: script.cpp:74
const FloatNum min
Smallest allowed float value.
Definition: float.hh:846
Gecode::IntArgs i({1, 2, 3, 4})
Gecode::IntSet d(v, 7)