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

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

Powered By FusionForge