예제 #1
0
int MDFNSS_LoadSM(void *st_p, int, int)
{
   uint8_t header[32];
   uint32_t stateversion;
   StateMem *st = (StateMem*)st_p;

   smem_read(st, header, 32);

   if(memcmp(header, "MEDNAFENSVESTATE", 16) && memcmp(header, "MDFNSVST", 8))
      return(0);

   stateversion = MDFN_de32lsb(header + 16);

   return StateAction(st, stateversion, 0);
}
예제 #2
0
double QLearner::getQValue(const State &state,
                           const Action &action)
{
    std::vector<QTable>::iterator iter;
    for(iter = QList.begin(); iter != QList.end(); ++iter)
    {
        if(state.isEqual(iter->sa.s))
            return iter->qvalue;
    }

    QTable Q_new(StateAction(state,action), 0.0);

//    Q_new.sa.s = state;
//    Q_new.sa.a = action;
//    Q_new.qvalue = 0.0;

    QList.push_back(Q_new);
    return 0.0;
}
예제 #3
0
bool QLearner::load_data(const char* filename)
{
    FILE* file = NULL;
    file = fopen(filename, "r");
    if(!file)
    {
        return false;
    }
    int QListSize;
    bool tmp = fscanf(file,"QList Data. x1,x2,action:qvalue\nElement Count: %d\n",&QListSize);
    //QList.resize(0);
    int tmpAction;
    double tmpQValue;
    State tmpState(0,0);
    for(int i = 0; i < QListSize; i++)
    {
        tmp = fscanf(file,"%d,%d,%d:%lf\n",&tmpState.x1,&tmpState.x2,&tmpAction,&tmpQValue);

        QList.push_back(QTable(StateAction(tmpState,static_cast<Action>(tmpAction)), tmpQValue));
    }
    return true;
}
예제 #4
0
int MDFNSS_SaveSM(void *st_p, int, int, const void*, const void*, const void*)
{
   uint8_t header[32];
   StateMem *st = (StateMem*)st_p;
   static const char *header_magic = "MDFNSVST";
   int neowidth = 0, neoheight = 0;

   memset(header, 0, sizeof(header));
   memcpy(header, header_magic, 8);

   MDFN_en32lsb(header + 16, MEDNAFEN_VERSION_NUMERIC);
   MDFN_en32lsb(header + 24, neowidth);
   MDFN_en32lsb(header + 28, neoheight);
   smem_write(st, header, 32);

   if(!StateAction(st, 0, 0))
      return(0);

   uint32_t sizy = st->loc;
   smem_seek(st, 16 + 4, SEEK_SET);
   smem_write32le(st, sizy);

   return(1);
}
예제 #5
0
bool CCsvParser::ParseRecord(std::vector<std::string>& record)
{
    int quote_status = CSV_ENCLOSURE_NONE;

    while(std::getline(fin, lineData))
    {
        // Parse line to record
        for (size_t i =0; i < lineData.size(); i++)
        {
            quote_status = StateAction(lineData[i], quote_status, record);
        }

        // Handle last field
        if (CSV_ENCLOSURE_ENTER != quote_status)  // Record finished
        {
            FieldHandler(record);
            return true; 
        }
        // Record Cintinued, push <CR><LF>
        fieldCache.push_back(CR_CHAR);
        fieldCache.push_back(LF_CHAR);        
    }
    return false;  // File End
}