/*
* ---------------------------------------------------
* Slots
* ---------------------------------------------------
*/
void Grid::extract() {
    // sness
    if ( _collection->getNumTracks() > 0 ) {

        int index = 0;

        // !!! use itunes to generate the collection file rather then using a file
        ofstream featureFile;
        featureFile.open("margrid_train.mf", std::ios::out | std::ios::binary);
        //featureFile.open("music.mf");
        _collection->generatePlayList(featureFile, playlist_.c_str());
        extractAction("margrid_train.mf");
    } else if (trainFile_.length() > 0) {
        cout << "Grid::extract() :: trainFile_.length() > 0" << endl;
        cout << "trainFile_=" << trainFile_ << endl;
        extractAction(trainFile_);
    } else
    {
        emit errorBox("Need to load a collection of audio files first!");
    }
}
Пример #2
0
/* Handles logging for each room, simply returning if logfile is not defined */
void con_room_log(cnr room, char *nick, char *message)
{
  time_t t;
  xmlnode xml;
  jid user;
  char *output;
  char timestr[80];
  size_t timelen = 79;
  FILE *logfile;
  pool p;

  if(message == NULL || room == NULL) 
  {
    log_warn(NAME, "[%s] ERR: Aborting - NULL reference found - ", FZONE);
    return;
  }

  logfile = room->logfile;

  if(logfile == NULL) 
  {
    log_debug(NAME, "[%s] Logging not enabled for this room", FZONE);
    return;
  }

  p = pool_heap(1024);

  /* nicked from mod_time */
  t = time(NULL);
  
  if(room->logformat == LOG_XHTML)
    strftime(timestr, timelen, "<a name=\"t%H:%M:%S\" href=\"#t%H:%M:%S\">[%H:%M:%S]</a>", localtime(&t));
  else
    strftime(timestr, timelen, "[%H:%M:%S]", localtime(&t));

  if(room->logformat == LOG_XML)
  {
    xml = jutil_msgnew("groupchat", jid_full(room->id) , NULL, strescape(p, message));

    user = jid_new(xmlnode_pool(xml), jid_full(room->id));
    jid_set(user, strescape(p, nick), JID_RESOURCE);
    xmlnode_put_attrib(xml, "from", jid_full(user));

    jutil_delay(xml, NULL);

    fprintf(logfile, "%s\n", xmlnode2str(xml));

    xmlnode_free(xml);
  }
  else if(room->logformat == LOG_XHTML)
  {
    if(nick)
    {
      if(j_strncmp(message, "/me ", 4) == 0)
      {
        output = extractAction(_con_room_xhtml_strescape(p, message), p);
        fprintf(logfile, "<span class=\"time\">%s</span> * <span class=\"nick\">%s</span>%s<br />\n", timestr, strescape(p, nick), output);

      }
      else
      {
        fprintf(logfile, "<span class=\"time\">%s</span> &lt;<span class=\"nick\">%s</span>&gt; %s<br />\n", timestr, strescape(p, nick), _con_room_xhtml_strescape(p, message));
      }
    }
    else
    {
      fprintf(logfile, "<span class=\"time\">%s</span> --- %s<br />\n", timestr, message);
    }
  }
  else
  {
    if(nick)
    {
      if(j_strncmp(message, "/me ", 4) == 0)
      {
        output = extractAction(message, p);
        fprintf(logfile, "%s * %s%s\n", timestr, nick, output);
      }
      else
      {
        fprintf(logfile, "%s <%s> %s\n", timestr, nick, message);
      }
    }
    else
    {
      fprintf(logfile, "%s --- %s\n", timestr, message);
    }
  }

  fflush(logfile);
  pool_free(p);
  return;
}
void makeMultiExperimentPOMCP(
                    unsigned numExperiments, unsigned numTargets,
                    unsigned modelHorizon,   const Model  & model,            const ap::Belief & modelBelief,
                    unsigned solverHorizon,  std::vector<Solver> & solvers,   const ap::Belief & solverBelief,
                    const std::string & outputFilename, bool useTrajectory = false )
{
    static std::default_random_engine rand(AIToolbox::Impl::Seeder::getSeed());

    double totalReward = 0.0;
    std::vector<double> timestepTotalReward(modelHorizon, 0.0);
    double avgReward   = 0.0;

    std::vector<size_t> obs(numTargets), pos(numTargets);

    std::cout << numExperiments << " experiments with: Submodular POMCP! ";

    std::cout << "Initial Belief: " << printBelief(modelBelief)  << '\n';
    std::cout << "Solver  Belief: " << printBelief(solverBelief) << '\n';

    unsigned experiment = 1;
    for ( ; experiment <= numExperiments; ++experiment ) {
        // Run pomcp, but don't get actions yet
        for ( unsigned p = 0; p < numTargets; ++p ) {
            pos[p] = AIToolbox::sampleProbability(model.getS(), modelBelief, rand);
            solvers[p].sampleAction(solverBelief, std::min(solverHorizon, modelHorizon));
        }
        // Extract action
        size_t a = extractAction(solvers);

        std::vector<std::vector<size_t>> trajectories;
        if ( useTrajectory ) {
            for ( unsigned p = 0; p < numTargets; ++p ) trajectories.push_back( makeTrajectory(model, modelHorizon + 1, modelBelief) );
        }

        for ( unsigned i = 1; i <= modelHorizon; ++i ) {
            double rew = 0.0;
#ifdef VISUALIZE
            auto oldp = pos;
#endif
            // Extract observations and rewards, and update positions of targets.
            for ( unsigned p = 0; p < numTargets; ++p ) {
                rew += ( model.getTrueState(solvers[p].getGuess()) == model.getTrueState(pos[p]) );

                if ( useTrajectory ) {
                    pos[p] = trajectories[p][i];
                    std::tie(obs[p], std::ignore) = model.sampleOR( trajectories[p][i-1], a, trajectories[p][i] );
                }
                else
                    std::tie(pos[p], obs[p], std::ignore) = model.sampleSOR( pos[p], a );
            }

            totalReward              += rew;
            timestepTotalReward[i-1] += rew;
            if ( experiment == 1 )
                avgReward           = totalReward;
            else
                avgReward           = totalReward / (experiment - 1 + ((double)i)/modelHorizon);

            std::cout // << "[S = " << s << "][A = " << a << "][S1 = " << s1 << "][ O = " << o << " ][ R = " << rew << " ]"
                      << "EXPERIMENT "      << std::setw(4) << experiment
                      << ", TIMESTEP "      << std::setw(4) << i
                      << "\tTotal rew: "    << std::setw(4) << totalReward
                      << "\tAvg: "          << std::setw(4) << avgReward;
#ifdef VISUALIZE
            std::cout << '\n';
            model.visualize(oldp, a);
#else
            std::cout << '\r'               << std::flush;
#endif

            for ( unsigned p = 0; p < numTargets; ++p )
                solvers[p].sampleAction(a, obs[p], std::min(solverHorizon, modelHorizon - i));

            a = extractAction(solvers);
        }
        if ( processInterrupted ) break;
        if ( ! (experiment % 100) )
            gnuplotCumulativeSave(timestepTotalReward, outputFilename, experiment);
    }
    gnuplotCumulativeSave(timestepTotalReward, outputFilename, std::min(experiment, numExperiments));
}