Log In | Get Help   
Home My Page Projects Code Snippets Project Openings Mareframe
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files
[mareframe] Annotation of /trunk/gadget/stochasticdata.cc
[mareframe] / trunk / gadget / stochasticdata.cc Repository:
ViewVC logotype

Annotation of /trunk/gadget/stochasticdata.cc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2 - (view) (download)

1 : agomez 1 #include "stochasticdata.h"
2 :     #include "readfunc.h"
3 :     #include "errorhandler.h"
4 :     #include "gadget.h"
5 :     #include "global.h"
6 :    
7 : ulcessvp 2
8 :    
9 : agomez 1 StochasticData::StochasticData(const char* const filename) {
10 :     netrun = 0;
11 :     readInfo = new InitialInputFile(filename);
12 :     readInfo->readFromFile();
13 :     if (readInfo->isRepeatedValues()) {
14 :     if (readInfo->numSwitches() > 0)
15 :     readInfo->getSwitches(switches);
16 :     readInfo->getValues(values);
17 :    
18 :     } else
19 :     readInfo->getVectors(switches, values, lowerbound, upperbound, optimise);
20 :    
21 :     if ((switches.Size() > 0) && (switches.Size() != values.Size()))
22 :     handle.logMessage(LOGFAIL, "Error in stochasticdata - failed to read values");
23 :     }
24 :    
25 :     StochasticData::StochasticData(const char* const filename, int p) {
26 :     //netrun = 1;
27 :     netrun = p;
28 :     //readInfo = NULL;
29 :     // Prufa Hér
30 :     readInfo = new InitialInputFile(filename);
31 :     readInfo->readFromFile();
32 :     if (readInfo->isRepeatedValues()) {
33 :     if (readInfo->numSwitches() > 0)
34 :     readInfo->getSwitches(switches);
35 :     readInfo->getValues(values);
36 :    
37 :     } else
38 :     readInfo->getVectors(switches, values, lowerbound, upperbound, optimise);
39 :    
40 :     if ((switches.Size() > 0) && (switches.Size() != values.Size()))
41 :     handle.logMessage(LOGFAIL, "Error in stochasticdata - failed to read values");
42 :     // Klárast hér.
43 :     #ifdef GADGET_NETWORK
44 :     slave = new SlaveCommunication();
45 :     getdata = 0;
46 :     dataFromMaster = NULL;
47 :     this->readFromNetwork();
48 :     #endif
49 :     }
50 :    
51 : ulcessvp 2
52 :     StochasticData::StochasticData() {
53 :     netrun = 1;
54 :     readInfo = NULL;
55 :     #ifdef GADGET_NETWORK
56 :     slave = new SlaveCommunication();
57 :     getdata = 0;
58 :     dataFromMaster = NULL;
59 :     this->readFromNetwork();
60 :     #endif
61 :     }
62 :    
63 : agomez 1 StochasticData::~StochasticData() {
64 :     if (netrun) {
65 :     #ifdef GADGET_NETWORK
66 :     if (dataFromMaster != NULL)
67 :     delete[] dataFromMaster;
68 :     // Breytti hér
69 :     //-----------------------------------------------------------------------------------------
70 :     if (!getdata)
71 :     slave->stopNetCommunication();
72 :     delete slave;
73 :     #endif
74 :     } else
75 :     delete readInfo;
76 :     }
77 :    
78 :     void StochasticData::readNextLine() {
79 :     if ((netrun) || (!readInfo->isRepeatedValues()))
80 :     return;
81 :     readInfo->readNextLine();
82 :     values.Reset();
83 :     readInfo->getValues(values);
84 :     }
85 :    
86 :     int StochasticData::getOptFlag(int i) const {
87 :     if (netrun)
88 :     return 0;
89 :     return optimise[i];
90 :     }
91 :    
92 :     int StochasticData::isOptGiven() const {
93 :     if (netrun)
94 :     return 0;
95 :     return (optimise.Size() > 0);
96 :     }
97 :    
98 :     #ifdef GADGET_NETWORK
99 :     void StochasticData::readFromNetwork() {
100 :     int i, numParam;
101 :    
102 :     //Receive first data from master
103 :     numParam = slave->startNetCommunication();
104 :     if (numParam > 0) {
105 :     //successfully started netcommunication
106 :     dataFromMaster = new double[numParam];
107 :     if (values.Size() == 0) {
108 :     values.resize(numParam, 0.0);
109 :     lowerbound.resize(numParam, 0.0);
110 :     upperbound.resize(numParam, 0.0);
111 :     }
112 :     //try to receive switches from master
113 :     getdata = slave->receiveFromMaster();
114 :     if (getdata) {
115 :     if (slave->receivedString()) {
116 :     for (i = 0; i < numParam; i++) {
117 :     Parameter sw(slave->getString(i));
118 :     switches.resize(sw);
119 :     }
120 :     } else
121 :     getdata = 0;
122 :     }
123 :     //try to receive lowerbounds from master
124 :     getdata = slave->receiveFromMaster();
125 :     if (getdata) {
126 :     if (slave->receivedBounds()) {
127 :     slave->getBound(dataFromMaster);
128 :     for (i = 0; i < numParam; i++)
129 :     lowerbound[i] = dataFromMaster[i];
130 :     } else
131 :     getdata = 0;
132 :     }
133 :     //try to receive upperbounds from master
134 :     getdata = slave->receiveFromMaster();
135 :     if (getdata) {
136 :     if (slave->receivedBounds()) {
137 :     slave->getBound(dataFromMaster);
138 :     for (i = 0; i < numParam; i++)
139 :     upperbound[i] = dataFromMaster[i];
140 :     } else
141 :     getdata = 0;
142 :     }
143 :     //try to receive vector value from master
144 :     getdata = slave->receiveFromMaster();
145 :     if (getdata) {
146 :     if (slave->receivedVector()) {
147 :     slave->getVector(dataFromMaster);
148 :     for (i = 0; i < values.Size(); i++)
149 :     values[i] = dataFromMaster[i];
150 :     } else
151 :     getdata = 0;
152 :     }
153 :     } else
154 :     getdata = 0;
155 :    
156 :     if (getdata) {
157 :     if (switches.Size() != values.Size())
158 :     handle.logMessage(LOGFAIL, "Error in stochasticdata - failed to read values");
159 :    
160 :     for (i = 0; i < values.Size(); i++) {
161 :     if ((lowerbound[i] > values[i]) || (upperbound[i] < values[i]))
162 :     handle.logMessage(LOGFAIL, "Error in stochasticdata - initial value outside bounds for parameter", switches[i].getName());
163 :     if (upperbound[i] < lowerbound[i])
164 :     handle.logMessage(LOGFAIL, "Error in stochasticdata - upper bound lower than lower bound for parameter", switches[i].getName());
165 :     if ((lowerbound[i] < 0.0) && (upperbound[i] > 0.0))
166 :     handle.logMessage(LOGWARN, "Warning in stochasticdata - bounds span zero for parameter", switches[i].getName());
167 :     }
168 :     }
169 :     }
170 :    
171 :     void StochasticData::readNextLineFromNetwork() {
172 :     int i;
173 :     getdata = slave->receiveFromMaster();
174 :     if (getdata) {
175 :     if (slave->receivedVector()) {
176 :     slave->getVector(dataFromMaster);
177 :     for (i = 0; i < values.Size(); i++)
178 :     values[i] = dataFromMaster[i];
179 :     } else
180 :     getdata = 0;
181 :     }
182 :     }
183 :    
184 :     void StochasticData::sendDataToNetwork(double score) {
185 :     int info = slave->sendToMaster(score);
186 :     if (info < 0) {
187 :     slave->stopNetCommunication();
188 :     handle.logMessage(LOGFAIL, "Error in stochasticdata - failed to send data to PVM master");
189 :     }
190 :     }
191 :     #endif

root@forge.cesga.es
ViewVC Help
Powered by ViewVC 1.0.0  

Powered By FusionForge