Show
Ignore:
Timestamp:
04/07/09 00:42:38 (15 years ago)
Author:
bhilburn
Message:

Style fixes for the most part. Perhaps one or two memory leaks. Added a
bunch of TODOs.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • vtcross/trunk/src/cognitive_engines/CognitiveEngine.cpp

    r230 r231  
    2222#include "vtcross/cbr.h" 
    2323 
     24// TODO this is really bad; need to move to a proper cbr.h 
    2425#include "cbr.c" 
    2526 
     
    2829 
    2930 
    30  
    3131static cbr myCBR; 
     32 
    3233 
    3334CognitiveEngine::CognitiveEngine() 
     
    4142CognitiveEngine::~CognitiveEngine() 
    4243{ 
    43         cbr_free(myCBR); 
     44    cbr_free(myCBR); 
    4445    delete [] pList; 
    4546    delete [] oList; 
     
    4950 
    5051 
    51 CognitiveEngine::CognitiveEngine(const char* serverName, const char* serverPort, \ 
     52CognitiveEngine::CognitiveEngine(const char *serverName, const char *serverPort, \ 
    5253        const bool SML) 
    5354{ 
     
    7273 
    7374void 
    74 CognitiveEngine::ConnectToRemoteComponent(const char* serverName, \ 
    75         const char* serverPort, const bool SML) 
     75CognitiveEngine::ConnectToRemoteComponent(const char *serverName, \ 
     76        const char *serverPort, const bool SML) 
    7677{ 
    7778    commandSocketFD = ClientSocket(serverName, serverPort); 
     
    9899{  
    99100   LOG("Cognitive Engine:: Receiving feedback.\n"); 
    100          
    101         uint32_t numberColumns =  
    102                 radioInfo->numParameters + 
    103                 radioInfo->numUtilities; 
    104  
    105         uint32_t obsColumns = radioInfo->numObservables + 1; 
    106  
    107         float valList[numberColumns]; 
    108         float obsVals[numberColumns]; 
     101     
     102    uint32_t numberColumns =  
     103        radioInfo->numParameters + 
     104        radioInfo->numUtilities; 
     105 
     106    uint32_t obsColumns = radioInfo->numObservables + 1; 
     107 
     108    float valList[numberColumns]; 
     109    float obsVals[numberColumns]; 
    109110    char *nameList[numberColumns]; 
    110111    char *obsList[obsColumns]; 
     
    112113    size_t columnObsIndex = 0; 
    113114    for (size_t i = 0; i < radioInfo->numObservables; i++){ 
    114                 obsList[columnObsIndex] = (char*)observables[i].name.c_str(); 
     115        obsList[columnObsIndex] = (char*)observables[i].name.c_str(); 
    115116        columnObsIndex++; 
    116117    }   
     
    119120    size_t columnIndex = 0; 
    120121    for (size_t i = 0; i < radioInfo->numParameters; i++){ 
    121                 nameList[columnIndex] = (char*)parameters[i].name.c_str(); 
     122        nameList[columnIndex] = (char*)parameters[i].name.c_str(); 
    122123        columnIndex++; 
    123124    }    
    124125    for (size_t i = 0; i < radioInfo->numUtilities; i++){ 
    125                 nameList[columnIndex] = (char*)uList[i].name.c_str(); 
     126        nameList[columnIndex] = (char*)uList[i].name.c_str(); 
    126127        columnIndex++; 
    127128    }    
    128129 
    129         size_t obsValueIndex = 0; 
     130    size_t obsValueIndex = 0; 
    130131    for(size_t i = 0; i < radioInfo->numObservables; i++) { 
    131                 obsVals[obsValueIndex] = observables[i].value; 
    132                 obsValueIndex++; 
    133         } 
    134         // Calculate Utility 
    135         float newUtilityValue = 0; 
     132        obsVals[obsValueIndex] = observables[i].value; 
     133        obsValueIndex++; 
     134    } 
     135 
     136    /* Calculate Utility */ 
     137    float newUtilityValue = 0; 
    136138 
    137139    for(size_t i = 0; i < radioInfo->numUtilities; i++) { 
    138                 newUtilityValue = newUtilityValue + (uList[i].target - observables[i].value); 
    139         } 
    140         obsVals[obsValueIndex] = newUtilityValue; 
    141  
    142         size_t returnValueIndex = 0; 
     140        newUtilityValue = newUtilityValue + (uList[i].target - observables[i].value); 
     141    } 
     142    obsVals[obsValueIndex] = newUtilityValue; 
     143 
     144    size_t returnValueIndex = 0; 
    143145    for(size_t i = 0; i < radioInfo->numParameters; i++) { 
    144                 valList[returnValueIndex] = parameters[i].value; 
    145                 returnValueIndex++; 
    146         } 
     146        valList[returnValueIndex] = parameters[i].value; 
     147        returnValueIndex++; 
     148    } 
    147149    for(size_t i = 0; i < radioInfo->numUtilities; i++) { 
    148                 valList[returnValueIndex] = uList[i].target; 
    149                 returnValueIndex++; 
    150         } 
    151  
    152  
    153         cbr_update(myCBR, nameList, obsList, valList, obsVals,  
    154                         numberColumns, obsColumns); 
     150        valList[returnValueIndex] = uList[i].target; 
     151        returnValueIndex++; 
     152    } 
     153 
     154    cbr_update(myCBR, nameList, obsList, valList, obsVals,  
     155            numberColumns, obsColumns); 
    155156} 
    156157 
     
    177178            /* Receive Set of current Parameters */ 
    178179            memset(buffer, 0, 256); 
    179             ReadMessage(commandSocketFD,buffer); 
     180            ReadMessage(commandSocketFD, buffer); 
    180181            uint32_t numParameters = atoi(buffer); 
    181182    
     
    193194 
    194195            /* Receive Set of Observables */ 
     196            memset(buffer, 0, 256); 
     197            ReadMessage(commandSocketFD, buffer); 
     198            uint32_t numObservables = atoi(buffer); 
     199    
     200            Observable *o = new Observable[numObservables]; 
     201  
     202            for(size_t i = 0; i < numObservables; i++) { 
     203                memset(buffer, 0, 256); 
     204                ReadMessage(commandSocketFD, buffer); 
     205                o[i].name = std::string(buffer); 
     206     
     207                memset(buffer, 0, 256); 
     208                ReadMessage(commandSocketFD, buffer); 
     209                o[i].value = atof(buffer); 
     210            }   
     211 
     212            ReceiveFeedback(o,p); 
     213 
     214            delete [] o; 
     215            delete [] p; 
     216        }  
     217        else if(strcmp(buffer, "request_optimization") == 0) { 
     218             
     219            /* Receive Set of Observables */ 
     220            LOG("\nCognitive Engine:: Receiving Observable Parameters\n"); 
     221 
    195222            memset(buffer, 0, 256); 
    196223            ReadMessage(commandSocketFD,buffer); 
     
    209236            }   
    210237 
    211                         ReceiveFeedback(o,p); 
    212  
    213             delete [] o; 
    214             delete [] p; 
    215                 }  
    216                 else if(strcmp(buffer, "request_optimization") == 0) { 
    217              
    218             /* Receive Set of Observables */ 
    219                         LOG("\nCognitive Engine:: Receiving Observable Parameters\n"); 
     238            /* Receive Set of current Parameters */ 
     239            LOG("Cognitive Engine:: Receiving Current Transmission Parameters\n"); 
    220240 
    221241            memset(buffer, 0, 256); 
    222             ReadMessage(commandSocketFD,buffer); 
    223             uint32_t numObservables = atoi(buffer); 
    224     
    225             Observable *o = new Observable[numObservables]; 
    226   
    227             for(size_t i = 0; i < numObservables; i++) { 
    228                 memset(buffer, 0, 256); 
    229                 ReadMessage(commandSocketFD, buffer); 
    230                 o[i].name = std::string(buffer); 
    231      
    232                 memset(buffer, 0, 256); 
    233                 ReadMessage(commandSocketFD, buffer); 
    234                 o[i].value = atof(buffer); 
    235             }   
    236  
    237             /* Receive Set of current Parameters */ 
    238                         LOG("Cognitive Engine:: Receiving Current Transmission Parameters\n"); 
    239  
    240             memset(buffer, 0, 256); 
    241             ReadMessage(commandSocketFD,buffer); 
     242            ReadMessage(commandSocketFD, buffer); 
    242243            uint32_t numCurrentParameters = atoi(buffer); 
    243244    
     
    253254                cp[i].value = atof(buffer); 
    254255            }   
    255                         LOG("Cognitive Engine:: Processing parameters....\n"); 
     256            LOG("Cognitive Engine:: Processing parameters....\n"); 
    256257 
    257258            Parameter *solutionSet; 
    258                          
    259                         solutionSet = GetSolution(o,cp); 
     259             
     260            solutionSet = GetSolution(o,cp); 
    260261 
    261262            // TODO need to actually do something with the observables here 
    262263            
    263                         LOG("Cognitive Engine:: Sending Optimal Parameters to Application.\n"); 
    264                         char numParametersChar[10]; 
    265                         char solutionValue[50]; 
    266                         sprintf(numParametersChar,"%i",radioInfo->numParameters); 
    267                         SendMessage(commandSocketFD,numParametersChar); 
     264            LOG("Cognitive Engine:: Sending Optimal Parameters to Application.\n"); 
     265            char numParametersChar[10]; 
     266            char solutionValue[50]; 
     267            sprintf(numParametersChar, "%i", radioInfo->numParameters); 
     268            SendMessage(commandSocketFD, numParametersChar); 
    268269            for(size_t i = 0; i < radioInfo->numParameters; i++) { 
    269                 SendMessage(commandSocketFD,solutionSet[i].name.c_str()); 
     270                SendMessage(commandSocketFD, solutionSet[i].name.c_str()); 
    270271                memset(solutionValue, 0, 50); 
    271                             sprintf(solutionValue,"%f",solutionSet[i].value); 
    272                 SendMessage(commandSocketFD,solutionValue); 
    273                         } 
     272                sprintf(solutionValue, "%f", solutionSet[i].value); 
     273                SendMessage(commandSocketFD, solutionValue); 
     274            } 
    274275 
    275276            delete [] o; 
     
    430431    /* Receive Set of Utilities */ 
    431432    memset(buffer, 0, 256); 
    432     ReadMessage(commandSocketFD,buffer); 
     433    ReadMessage(commandSocketFD, buffer); 
    433434    radioInfo->numUtilities = atoi(buffer); 
    434435     
    435436    for(size_t i = 0; i < radioInfo->numUtilities; i++) { 
    436437        memset(buffer, 0, 256); 
    437         ReadMessage(commandSocketFD,buffer); 
     438        ReadMessage(commandSocketFD, buffer); 
    438439        uList[i].name = std::string(buffer); 
    439440    
    440441        memset(buffer, 0, 256); 
    441         ReadMessage(commandSocketFD,buffer); 
     442        ReadMessage(commandSocketFD, buffer); 
    442443        uList[i].units = std::string(buffer); 
    443444 
    444445        memset(buffer, 0, 256); 
    445         ReadMessage(commandSocketFD,buffer); 
     446        ReadMessage(commandSocketFD, buffer); 
    446447        uList[i].goal = std::string(buffer); 
    447448     
    448449        memset(buffer, 0, 256); 
    449         ReadMessage(commandSocketFD,buffer); 
     450        ReadMessage(commandSocketFD, buffer); 
    450451        uList[i].target = atof(buffer); 
    451452    } 
     
    484485            memset(buffer, 0, 256); 
    485486            ReadMessage(commandSocketFD,buffer); 
     487            // TODO for + if{break} = while? 
    486488            for(size_t k = 0; k < radioInfo->numUtilities; k++) { 
    487                 if(uList[k].name == std::string(buffer)){     
     489                if(uList[k].name == std::string(buffer)) {     
    488490                    pList[i].affection_list[j].u = &uList[k];    
    489491                    break; 
     
    492494 
    493495            memset(buffer, 0, 256); 
    494             ReadMessage(commandSocketFD,buffer); 
     496            ReadMessage(commandSocketFD, buffer); 
    495497            pList[i].affection_list[j].relation = std::string(buffer);    
    496498        } 
     
    499501    /* Receive Set of Observables */ 
    500502    memset(buffer, 0, 256); 
    501     ReadMessage(commandSocketFD,buffer); 
     503    ReadMessage(commandSocketFD, buffer); 
    502504    radioInfo->numObservables = atoi(buffer); 
    503505     
    504506    for(size_t i = 0; i < radioInfo->numObservables; i++) { 
    505507        memset(buffer, 0, 256); 
    506         ReadMessage(commandSocketFD,buffer); 
     508        ReadMessage(commandSocketFD, buffer); 
    507509        oList[i].name = std::string(buffer); 
    508510     
    509511        memset(buffer, 0, 256); 
    510         ReadMessage(commandSocketFD,buffer); 
     512        ReadMessage(commandSocketFD, buffer); 
    511513        oList[i].numAffects = atoi(buffer); 
    512514     
    513515        for(size_t j = 0; j < oList[i].numAffects; j++) { 
    514516            memset(buffer, 0, 256); 
    515             ReadMessage(commandSocketFD,buffer); 
     517            ReadMessage(commandSocketFD, buffer); 
     518            // TODO for + if{break} = while? 
    516519            for(size_t k = 0; k < radioInfo->numUtilities; k++) { 
    517                 if(uList[k].name == std::string(buffer)){     
     520                if(uList[k].name == std::string(buffer)){     
    518521                    oList[i].affection_list[j].u = &uList[k];    
    519522                    break; 
     
    522525  
    523526            memset(buffer, 0, 256); 
    524             ReadMessage(commandSocketFD,buffer); 
     527            ReadMessage(commandSocketFD, buffer); 
    525528            oList[i].affection_list[j].relation = std::string(buffer);    
    526529        } 
     
    529532    SendMessage(commandSocketFD, "receive_config_ack"); 
    530533 
    531         BuildCognitiveEngine(); 
     534    BuildCognitiveEngine(); 
    532535} 
    533536 
     
    541544    /* Receive number of experience entries */ 
    542545    memset(buffer, 0, 256); 
    543     ReadMessage(commandSocketFD,buffer); 
     546    ReadMessage(commandSocketFD, buffer); 
    544547    numberExp = atoi(buffer); 
    545548 
    546     LOG("Cognitive Engine:: Waiting for %i number of entries.\n",numberExp); 
     549    LOG("Cognitive Engine:: Waiting for %i number of entries.\n", numberExp); 
    547550  
    548551    SendMessage(commandSocketFD, "receive_exp_ack"); 
     
    558561    for(size_t i = 0; i < radioInfo->numUtilities; i++) { 
    559562        searchNames[i] = (char*)observables[i].name.c_str(); 
    560         } 
     563    } 
    561564 
    562565    float searchVals[radioInfo->numUtilities]; 
    563566 
    564         for(size_t i = 0; i < radioInfo->numUtilities; i++) { 
    565                 searchVals[i] = uList[i].target; 
     567    for(size_t i = 0; i < radioInfo->numUtilities; i++) { 
     568        searchVals[i] = uList[i].target; 
    566569    } 
    567570 
    568571    uint32_t numberColumns =  
    569                 radioInfo->numUtilities + 
    570                 radioInfo->numParameters + 
    571                 radioInfo->numObservables + 1; 
    572          
    573         float returnValues[numberColumns]; 
    574          
    575         int searchOps[radioInfo->numUtilities]; 
     572        radioInfo->numUtilities + 
     573        radioInfo->numParameters + 
     574        radioInfo->numObservables + 1; 
     575     
     576    float returnValues[numberColumns]; 
     577     
     578    int searchOps[radioInfo->numUtilities]; 
    576579    for(size_t i = 0; i < radioInfo->numUtilities; i++) { 
    577580 
    578581        /* If the goal is to maximum, set the search operation to 
    579                  * return values greater than the target. 
    580                  * 
    581                  * If the goal is to minimize, set the search operation to 
    582                  * return values less than the target. 
    583                  */ 
    584  
    585                 if(strcmp(uList[i].goal.c_str(),"max") == 0) { 
    586                     searchOps[i] = GT; 
    587                 } else if(strcmp(uList[i].goal.c_str(),"min") == 0) { 
    588                         searchOps[i] = LT; 
    589                 } 
    590         } 
    591  
    592         /* CBR specific call */ 
    593         uint32_t rc = cbr_search(myCBR, searchNames, searchOps, searchVals, 
    594                         radioInfo->numUtilities, returnValues); 
    595  
    596         if(rc == 0){ 
     582         * return values greater than the target. 
     583         * 
     584         * If the goal is to minimize, set the search operation to 
     585         * return values less than the target. 
     586         */ 
     587        if(strcmp(uList[i].goal.c_str(), "max") == 0) { 
     588            searchOps[i] = GT; 
     589        } else if(strcmp(uList[i].goal.c_str(), "min") == 0) { 
     590            searchOps[i] = LT; 
     591        } 
     592    } 
     593 
     594    /* CBR specific call */ 
     595    uint32_t rc = cbr_search(myCBR, searchNames, searchOps, searchVals, 
     596            radioInfo->numUtilities, returnValues); 
     597 
     598    if(rc == 0){ 
    597599        /* Adapt the returned parameters to meet the objective */ 
    598              
    599600        WARNING("Cognitive Engine:: Found\n"); 
    600601 
    601                 // Should do a random adaptation..  
    602                 if(returnValues[numberColumns-1] < 0) { 
    603                         returnValues[2] = returnValues[2] - 15; 
    604                         returnValues[3] = returnValues[3] - 2; 
     602        /* Should do a random adaptation.. */ 
     603        if(returnValues[numberColumns-1] < 0) { 
     604            returnValues[2] = returnValues[2] - 15; 
     605            returnValues[3] = returnValues[3] - 2; 
    605606        } else { 
    606                         returnValues[2] = returnValues[2] + 15; 
    607                         returnValues[3] = returnValues[3] + 2; 
    608                 } 
    609     } else if(rc == 31337){ 
     607            returnValues[2] = returnValues[2] + 15; 
     608            returnValues[3] = returnValues[3] + 2; 
     609        } 
     610    } else if(rc == 31337) { 
    610611        WARNING("Cognitive Engine:: Not Found.\n"); 
    611                 /* No rows in the CBR, pick default parameters */ 
    612                 // Currently this is hard coded and implementation specific! 
    613             returnValues[2] = currentParameters[0].value + 5; 
    614             returnValues[3] = currentParameters[1].value + 10; 
     612        /* No rows in the CBR, pick default parameters */ 
     613        /* Currently this is hard coded and implementation specific! */ 
     614        returnValues[2] = currentParameters[0].value + 5; 
     615        returnValues[3] = currentParameters[1].value + 10; 
    615616         
    616         } else { 
     617    } else { 
    617618        WARNING("Cognitive Engine:: Search return an invalid value.\n"); 
    618         } 
    619  
    620         size_t returnValueIndex = 0; 
     619    } 
     620 
     621    size_t returnValueIndex = 0; 
    621622    for(size_t i = 0; i < radioInfo->numUtilities; i++) { 
    622                 uList[i].value = returnValues[returnValueIndex]; 
    623                 returnValueIndex++; 
    624         } 
     623        uList[i].value = returnValues[returnValueIndex]; 
     624        returnValueIndex++; 
     625    } 
    625626    for(size_t i = 0; i < radioInfo->numParameters; i++) { 
    626                 pList[i].value = returnValues[returnValueIndex]; 
    627                 returnValueIndex++; 
    628         } 
     627        pList[i].value = returnValues[returnValueIndex]; 
     628        returnValueIndex++; 
     629    } 
    629630    for(size_t i = 0; i < radioInfo->numObservables; i++) { 
    630                 oList[i].value = returnValues[returnValueIndex]; 
    631                 returnValueIndex++; 
    632         } 
     631        oList[i].value = returnValues[returnValueIndex]; 
     632        returnValueIndex++; 
     633    } 
    633634    returnValues[returnValueIndex] = 0; 
    634635 
    635636    char *allNames[numberColumns]; 
    636         size_t allNameIndex = 0; 
     637    size_t allNameIndex = 0; 
    637638    for(size_t i = 0; i < radioInfo->numUtilities; i++) { 
    638639        allNames[allNameIndex] = (char*)uList[i].name.c_str(); 
    639                 returnValues[allNameIndex] = uList[i].target; 
    640                 allNameIndex++; 
    641         } 
     640        returnValues[allNameIndex] = uList[i].target; 
     641        allNameIndex++; 
     642    } 
    642643    for(size_t i = 0; i < radioInfo->numParameters; i++) { 
    643644        allNames[allNameIndex] = (char*)pList[i].name.c_str(); 
    644                 allNameIndex++; 
    645         } 
     645        allNameIndex++; 
     646    } 
    646647    for(size_t i = 0; i < radioInfo->numObservables; i++) { 
    647648        allNames[allNameIndex] = (char*)oList[i].name.c_str(); 
    648                 returnValues[allNameIndex] = 0; 
    649                 allNameIndex++; 
    650         } 
     649        returnValues[allNameIndex] = 0; 
     650        allNameIndex++; 
     651    } 
    651652    allNames[allNameIndex] = "utility"; 
    652653 
    653         // Add row to CBR.  
    654         cbr_add_row(myCBR, allNames, returnValues, returnValueIndex+1); 
    655  
    656         return pList; 
    657  
     654    // Add row to CBR.  
     655    cbr_add_row(myCBR, allNames, returnValues, returnValueIndex+1); 
     656 
     657    return pList; 
    658658} 
    659659 
    660660 
    661661Parameter*  
    662 CognitiveEngine::GetSolution(Observable *observables, Parameter *currentParameters, std::string service) 
    663 { 
    664     LOG("Cognitive Engine:: Generating solution for %s service.\n",service.c_str()); 
     662CognitiveEngine::GetSolution(Observable *observables, \ 
     663        Parameter *currentParameters, std::string service) 
     664{ 
     665    LOG("Cognitive Engine:: Generating solution for %s service.\n", service.c_str()); 
    665666 
    666667    return pList; 
     
    679680CognitiveEngine::BuildCognitiveEngine() 
    680681{ 
    681         char filename[] = {"ex1"}; 
    682         char tablename[] = {"data"}; 
     682    char filename[] = {"ex1"}; 
     683    char tablename[] = {"data"}; 
    683684 
    684685    uint32_t numberColumns =  
    685                 radioInfo->numUtilities + 
    686                 radioInfo->numParameters + 
    687                 radioInfo->numObservables + 1; 
     686        radioInfo->numUtilities + 
     687        radioInfo->numParameters + 
     688        radioInfo->numObservables + 1; 
    688689 
    689690    char *cols[numberColumns]; 
     
    691692    size_t columnIndex = 0; 
    692693    for (size_t i = 0; i < radioInfo->numUtilities; i++){ 
    693                 cols[columnIndex] = (char*)uList[i].name.c_str(); 
     694        cols[columnIndex] = (char*)uList[i].name.c_str(); 
    694695        columnIndex++; 
    695696    }    
    696697    for (size_t i = 0; i < radioInfo->numParameters; i++){ 
    697                 cols[columnIndex] = (char*)pList[i].name.c_str(); 
     698        cols[columnIndex] = (char*)pList[i].name.c_str(); 
    698699        columnIndex++; 
    699700    }    
    700701    for (size_t i = 0; i < radioInfo->numObservables; i++){ 
    701                 cols[columnIndex] = (char*)oList[i].name.c_str(); 
     702        cols[columnIndex] = (char*)oList[i].name.c_str(); 
    702703        columnIndex++; 
    703704    }