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] View of /trunk/gadget/stochasticdata.cc
[mareframe] / trunk / gadget / stochasticdata.cc Repository:
ViewVC logotype

View of /trunk/gadget/stochasticdata.cc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2 - (download) (annotate)
Wed Apr 29 12:55:30 2015 UTC (9 years, 1 month ago) by ulcessvp
File size: 5361 byte(s)
Gadget actualizado con los cambios de pow y matrix. Actualizado tambien a la ultima version de gadget(git)
#include "stochasticdata.h"
#include "readfunc.h"
#include "errorhandler.h"
#include "gadget.h"
#include "global.h"



StochasticData::StochasticData(const char* const filename) {
  netrun = 0;
  readInfo = new InitialInputFile(filename);
  readInfo->readFromFile();
  if (readInfo->isRepeatedValues()) {
    if (readInfo->numSwitches() > 0)
      readInfo->getSwitches(switches);
    readInfo->getValues(values);

  } else
    readInfo->getVectors(switches, values, lowerbound, upperbound, optimise);

  if ((switches.Size() > 0) && (switches.Size() != values.Size()))
    handle.logMessage(LOGFAIL, "Error in stochasticdata - failed to read values");
}

StochasticData::StochasticData(const char* const filename, int p) {
  //netrun = 1;
  netrun = p;
  //readInfo = NULL;
  // Prufa Hér
  readInfo = new InitialInputFile(filename);
  readInfo->readFromFile();
  if (readInfo->isRepeatedValues()) {
    if (readInfo->numSwitches() > 0)
      readInfo->getSwitches(switches);
    readInfo->getValues(values);

  } else
    readInfo->getVectors(switches, values, lowerbound, upperbound, optimise);

  if ((switches.Size() > 0) && (switches.Size() != values.Size()))
    handle.logMessage(LOGFAIL, "Error in stochasticdata - failed to read values");
  // Klárast hér.
#ifdef GADGET_NETWORK
  slave = new SlaveCommunication();
  getdata = 0;
  dataFromMaster = NULL;
  this->readFromNetwork();
#endif
}


StochasticData::StochasticData() {
  netrun = 1;
  readInfo = NULL;
#ifdef GADGET_NETWORK
  slave = new SlaveCommunication();
  getdata = 0;
  dataFromMaster = NULL;
  this->readFromNetwork();
#endif
}

StochasticData::~StochasticData() {
  if (netrun) {
#ifdef GADGET_NETWORK
    if (dataFromMaster != NULL)
      delete[] dataFromMaster;
	// Breytti hér
	//-----------------------------------------------------------------------------------------
    if (!getdata)
      slave->stopNetCommunication();
    delete slave;
#endif
  } else
    delete readInfo;
}

void StochasticData::readNextLine() {
  if ((netrun) || (!readInfo->isRepeatedValues()))
    return;
  readInfo->readNextLine();
  values.Reset();
  readInfo->getValues(values);
}

int StochasticData::getOptFlag(int i) const {
  if (netrun)
    return 0;
  return optimise[i];
}

int StochasticData::isOptGiven() const {
  if (netrun)
    return 0;
  return (optimise.Size() > 0);
}

#ifdef GADGET_NETWORK
void StochasticData::readFromNetwork() {
  int i, numParam;

  //Receive first data from master
  numParam = slave->startNetCommunication();
  if (numParam > 0) {
    //successfully started netcommunication
    dataFromMaster = new double[numParam];
    if (values.Size() == 0) {
      values.resize(numParam, 0.0);
      lowerbound.resize(numParam, 0.0);
      upperbound.resize(numParam, 0.0);
    }
    //try to receive switches from master
    getdata = slave->receiveFromMaster();
    if (getdata) {
      if (slave->receivedString()) {
        for (i = 0; i < numParam; i++) {
          Parameter sw(slave->getString(i));
          switches.resize(sw);
        }
      } else
        getdata = 0;
    }
    //try to receive lowerbounds from master
    getdata = slave->receiveFromMaster();
    if (getdata) {
      if (slave->receivedBounds()) {
        slave->getBound(dataFromMaster);
        for (i = 0; i < numParam; i++)
          lowerbound[i] = dataFromMaster[i];
      } else
        getdata = 0;
    }
    //try to receive upperbounds from master
    getdata = slave->receiveFromMaster();
    if (getdata) {
      if (slave->receivedBounds()) {
        slave->getBound(dataFromMaster);
        for (i = 0; i < numParam; i++)
          upperbound[i] = dataFromMaster[i];
      } else
        getdata = 0;
    }
    //try to receive vector value from master
    getdata = slave->receiveFromMaster();
    if (getdata) {
      if (slave->receivedVector()) {
        slave->getVector(dataFromMaster);
        for (i = 0; i < values.Size(); i++)
          values[i] = dataFromMaster[i];
      } else
        getdata = 0;
    }
  } else
    getdata = 0;

  if (getdata) {
    if (switches.Size() != values.Size())
      handle.logMessage(LOGFAIL, "Error in stochasticdata - failed to read values");

    for (i = 0; i < values.Size(); i++) {
      if ((lowerbound[i] > values[i]) || (upperbound[i] < values[i]))
        handle.logMessage(LOGFAIL, "Error in stochasticdata - initial value outside bounds for parameter", switches[i].getName());
      if (upperbound[i] < lowerbound[i])
        handle.logMessage(LOGFAIL, "Error in stochasticdata - upper bound lower than lower bound for parameter", switches[i].getName());
      if ((lowerbound[i] < 0.0) && (upperbound[i] > 0.0))
        handle.logMessage(LOGWARN, "Warning in stochasticdata - bounds span zero for parameter", switches[i].getName());
    }
  }
}

void StochasticData::readNextLineFromNetwork() {
  int i;
  getdata = slave->receiveFromMaster();
  if (getdata) {
    if (slave->receivedVector()) {
      slave->getVector(dataFromMaster);
      for (i = 0; i < values.Size(); i++)
        values[i] = dataFromMaster[i];
    } else
      getdata = 0;
  }
}

void StochasticData::sendDataToNetwork(double score) {
  int info = slave->sendToMaster(score);
  if (info < 0) {
    slave->stopNetCommunication();
    handle.logMessage(LOGFAIL, "Error in stochasticdata - failed to send data to PVM master");
  }
}
#endif

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

Powered By FusionForge