Show
Ignore:
Timestamp:
05/17/10 03:14:03 (14 years ago)
Author:
nikhil
Message:
 
Location:
vtcross/branches/nikhil/crossmodel1
Files:
1 modified
1 copied

Legend:

Unmodified
Added
Removed
  • vtcross/branches/nikhil/crossmodel1/src/cognitive_engines/CBR_CE/CBR_CE.cpp

    r545 r554  
    2020 
    2121#include "CBR_CE.h" 
    22  
     22#include <iostream> 
    2323 
    2424using namespace std; 
     
    3333 
    3434 
    35 void  
    36 CBR_CE::RegisterServices() 
    37 { 
    38     LOG("Cognitive Engine:: Registering services.\n"); 
    39  
    40     SendMessage(commandSocketFD, "register_service"); 
    41     SendMessage(commandSocketFD, "test_srv"); 
    42  
    43     SendMessage(commandSocketFD, "register_service"); 
    44     SendMessage(commandSocketFD, "test_srv1"); 
    45  
    46     SendMessage(commandSocketFD, "register_service"); 
    47     SendMessage(commandSocketFD, "test_srv2"); 
    48  
    49     SendMessage(commandSocketFD, "register_service"); 
    50     SendMessage(commandSocketFD, "test_srv3"); 
    51  
    52 } 
    53  
    54  
    55 void  
    56 CBR_CE::DeregisterServices() 
    57 { 
    58     LOG("Cognitive Engine:: Deregistering services.\n"); 
    59  
    60     SendMessage(commandSocketFD, "deregister_service"); 
    61     SendMessage(commandSocketFD, "test_srv"); 
    62  
    63     SendMessage(commandSocketFD, "deregister_service"); 
    64     SendMessage(commandSocketFD, "test_srv1"); 
    65  
    66     SendMessage(commandSocketFD, "deregister_service"); 
    67     SendMessage(commandSocketFD, "test_srv2"); 
    68  
    69     SendMessage(commandSocketFD, "deregister_service"); 
    70     SendMessage(commandSocketFD, "test_srv3"); 
    71  
    72 } 
    73  
    74  
    7535Parameter*  
    76 CBR_CE::GetSolution(Observable *observables, Parameter *currentParameters) 
     36CBR_CE::GetSolution(Observable *observables, Parameter *currentParameters, Utility *utilities) 
    7737{ 
    7838    LOG("Cognitive Engine:: Generating solution.\n"); 
     
    8141 
    8242    for(size_t i = 0; i < radioInfo->numUtilities; i++) { 
    83         searchNames[i] = observables[i].name; 
     43        searchNames[i] = uList[i].name; 
    8444    } 
    8545 
     
    9050    } 
    9151 
    92     uint32_t numberColumns = radioInfo->numUtilities + radioInfo->numParameters \ 
    93                              + radioInfo->numObservables + 1; 
     52    uint32_t numberColumns = radioInfo->numParameters + radioInfo->numUtilities + radioInfo->numObservables + 1; 
    9453     
    9554    float returnValues[numberColumns]; 
     
    12988        LOG("Cognitive Engine:: Found\n"); 
    13089 
    131         /* Should do a random adaptation.. */ 
    132         if(returnValues[numberColumns-1] < 0) { 
    133             returnValues[2] = returnValues[2] - 15; 
    134             returnValues[3] = returnValues[3] - 2; 
    135         } else { 
    136             returnValues[2] = returnValues[2] + 15; 
    137             returnValues[3] = returnValues[3] + 2; 
    138         } 
    13990    } else if(rc == 31337) { 
    14091        LOG("Cognitive Engine:: Not Found.\n"); 
    14192        /* No rows in the CBR, pick default parameters */ 
    14293        /* Currently this is hard coded and implementation specific! */ 
    143         returnValues[2] = currentParameters[0].value + 5; 
    144         returnValues[3] = currentParameters[1].value + 10; 
    145          
    146     } else { 
    147         LOG("Cognitive Engine:: Search return an invalid value.\n"); 
    148     } 
     94 
     95        for (int i = 0; i < radioInfo->numParameters; i++) { 
     96            returnValues[i] = currentParameters[i].value + pList[i].step; 
     97            if (returnValues[i] > pList[i].max) { 
     98                std::cout << "SORRY CANT EXCEED MAX VALUE" << std::endl; 
     99                returnValues[i] = returnValues[i] - pList[i].step; 
     100            } 
     101            if (returnValues[i] < pList[i].min) { 
     102                std::cout << "SORRY CANT GO BELOW MIN VALUE" << std::endl; 
     103                returnValues[i] = returnValues[i] + pList[i].step ;               
     104            } 
     105        } 
     106 
     107        for (int i = 0; i < radioInfo->numUtilities; i++) 
     108            returnValues[radioInfo->numParameters + i] = uList[i].value; 
     109 
     110        for (int i = 0; i < radioInfo->numObservables; i++) 
     111            returnValues[radioInfo->numParameters + radioInfo->numUtilities + i] = oList[i].value; 
    149112 
    150113    size_t returnValueIndex = 0; 
    151114    for(size_t i = 0; i < radioInfo->numUtilities; i++) { 
     115        pList[i].value = returnValues[returnValueIndex]; 
     116        returnValueIndex++; 
     117    } 
     118    for(size_t i = 0; i < radioInfo->numParameters; i++) { 
    152119        uList[i].value = returnValues[returnValueIndex]; 
    153         returnValueIndex++; 
    154     } 
    155     for(size_t i = 0; i < radioInfo->numParameters; i++) { 
    156         pList[i].value = returnValues[returnValueIndex]; 
    157120        returnValueIndex++; 
    158121    } 
     
    165128    string allNames[numberColumns]; 
    166129    size_t allNameIndex = 0; 
    167     for(size_t i = 0; i < radioInfo->numUtilities; i++) { 
    168         allNames[allNameIndex] = uList[i].name; 
    169         returnValues[allNameIndex] = uList[i].target; 
    170         allNameIndex++; 
    171     } 
    172130    for(size_t i = 0; i < radioInfo->numParameters; i++) { 
    173131        allNames[allNameIndex] = pList[i].name; 
    174132        allNameIndex++; 
    175133    } 
     134    for(size_t i = 0; i < radioInfo->numUtilities; i++) { 
     135        allNames[allNameIndex] = uList[i].name; 
     136        allNameIndex++; 
     137    } 
    176138    for(size_t i = 0; i < radioInfo->numObservables; i++) { 
    177139        allNames[allNameIndex] = oList[i].name; 
    178         returnValues[allNameIndex] = 0; 
    179140        allNameIndex++; 
    180141    } 
    181     allNames[allNameIndex] = "utility"; 
     142    allNames[allNameIndex] = "TotalWeight"; 
    182143 
    183144    // Add row to CBR.  
    184145    myCBR->AddRow(allNames, returnValues, returnValueIndex + 1); 
    185146 
     147        } else { 
     148        LOG("Cognitive Engine:: Search return an invalid value.\n"); 
     149    } 
     150 
     151 
    186152    return pList; 
    187153} 
    188154 
    189155 
    190 Parameter*  
    191 CBR_CE::GetSolution(Observable *observables, \ 
    192         Parameter *currentParameters, std::string service) 
    193 { 
    194     LOG("Cognitive Engine:: Generating solution for %s service.\n", service.c_str()); 
    195  
    196     return pList; 
    197 } 
    198  
    199  
    200156void  
    201 CBR_CE::ReceiveFeedback(Observable *observables, Parameter *parameters) 
     157CBR_CE::ReceiveFeedback(Observable *observables, Parameter *parameters, Utility *utilities) 
    202158{  
    203159    LOG("Cognitive Engine:: Receiving feedback.\n"); 
    204160     
    205     uint32_t numberColumns = radioInfo->numParameters + radioInfo->numUtilities; 
    206  
    207     uint32_t obsColumns = radioInfo->numObservables + 1; 
    208  
    209     float valList[numberColumns]; 
    210     float obsVals[numberColumns]; 
    211     string nameList[numberColumns]; 
    212     string obsList[obsColumns]; 
    213  
    214     size_t columnObsIndex = 0; 
    215     for (size_t i = 0; i < radioInfo->numObservables; i++){ 
    216         obsList[columnObsIndex] = observables[i].name; 
    217         columnObsIndex++; 
    218     }   
    219     obsList[columnObsIndex] = "utility"; 
    220  
    221     size_t columnIndex = 0; 
    222     for (size_t i = 0; i < radioInfo->numParameters; i++){ 
    223         nameList[columnIndex] = parameters[i].name; 
    224         columnIndex++; 
    225     }    
    226     for (size_t i = 0; i < radioInfo->numUtilities; i++){ 
    227         nameList[columnIndex] = uList[i].name; 
    228         columnIndex++; 
    229     }    
    230  
    231     size_t obsValueIndex = 0; 
     161    uint32_t numberColumns = radioInfo->numParameters + radioInfo->numUtilities + radioInfo->numObservables + 1; 
     162 
     163    uint32_t whereLen = radioInfo->numParameters; 
     164    uint32_t setLen = radioInfo->numUtilities + radioInfo->numObservables; 
     165 
     166 
     167    float whereValue[whereLen]; 
     168    float setValue[setLen]; 
     169    string whereList[whereLen]; 
     170    string setList[setLen]; 
     171 
     172 
     173    for(size_t i = 0; i < radioInfo->numParameters; i++) { 
     174        whereList[i] = parameters[i].name; 
     175        whereValue[i] = parameters[i].value; 
     176    } 
     177 
     178    size_t returnValueIndex = 0; 
     179    for(size_t i = 0; i < radioInfo->numUtilities; i++) { 
     180        setList[returnValueIndex] = utilities[i].name; 
     181        setValue[returnValueIndex] = utilities[i].value;    
     182        returnValueIndex++; 
     183    } 
    232184    for(size_t i = 0; i < radioInfo->numObservables; i++) { 
    233         obsVals[obsValueIndex] = observables[i].value; 
    234         obsValueIndex++; 
    235     } 
    236  
    237     /* Calculate Utility */ 
    238     float newUtilityValue = 0; 
    239  
    240     for(size_t i = 0; i < radioInfo->numUtilities; i++) { 
    241         newUtilityValue = newUtilityValue + (uList[i].target - observables[i].value); 
    242     } 
    243     obsVals[obsValueIndex] = newUtilityValue; 
    244  
    245     size_t returnValueIndex = 0; 
    246     for(size_t i = 0; i < radioInfo->numParameters; i++) { 
    247         valList[returnValueIndex] = parameters[i].value; 
    248         returnValueIndex++; 
    249     } 
    250     for(size_t i = 0; i < radioInfo->numUtilities; i++) { 
    251         valList[returnValueIndex] = uList[i].target; 
    252         returnValueIndex++; 
    253     } 
    254 } 
    255  
    256  
    257 void  
    258 CBR_CE::ReceiveFeedback(Observable *observables, Parameter *parameters, \ 
    259     std::string service) 
    260 { 
    261     LOG("Cognitive Engine:: Receiving feedback.\n"); 
     185        setList[returnValueIndex] = observables[i].name; 
     186        setValue[returnValueIndex] = observables[i].value; 
     187        returnValueIndex++; 
     188    } 
     189 
     190 
     191myCBR->Update(whereList,setList,whereValue,setValue,whereLen,setLen); 
     192 
    262193} 
    263194 
     
    267198{ 
    268199    string filename = "ex1"; 
     200    string filename2 = "ex2"; 
    269201    string tablename = "data"; 
    270202 
    271     uint32_t numberColumns = radioInfo->numUtilities + radioInfo->numParameters \ 
     203    uint32_t numberColumns = radioInfo->numParameters + radioInfo->numUtilities \ 
    272204                             + radioInfo->numObservables + 1; 
    273205 
     206    uint32_t numberParameters = radioInfo->numParameters; 
     207    uint32_t numberUtilities = radioInfo->numUtilities; 
     208 
    274209    string cols[numberColumns]; 
     210    string Plist[numberParameters]; 
     211    string Ulist[numberUtilities]; 
     212    float Utarget[numberUtilities]; 
     213    string Ugoal[numberUtilities]; 
    275214 
    276215    size_t columnIndex = 0; 
     216    size_t Pindex = 0;              // new 
     217    size_t Uindex = 0;              // new 
     218 
     219 
     220    for (size_t i = 0; i < radioInfo->numParameters; i++){ 
     221        cols[columnIndex] = pList[i].name; 
     222        columnIndex++; 
     223        Plist[Pindex] = pList[i].name;   // new 
     224        Pindex++;                        // new 
     225    } 
    277226    for (size_t i = 0; i < radioInfo->numUtilities; i++){ 
    278227        cols[columnIndex] = uList[i].name; 
    279228        columnIndex++; 
    280     }    
    281     for (size_t i = 0; i < radioInfo->numParameters; i++){ 
    282         cols[columnIndex] = pList[i].name; 
    283         columnIndex++; 
    284     }    
    285     for (size_t i = 0; i < radioInfo->numObservables; i++){ 
     229        Ulist[Uindex] = uList[i].name;     // new 
     230        Utarget[Uindex] = uList[i].target; // new 
     231        Ugoal[Uindex] = uList[i].goal;     // new 
     232        Uindex++;                          // new 
     233 
     234    }       
     235    for (size_t i = 0; i < radioInfo->numObservables; i++){    
    286236        cols[columnIndex] = oList[i].name; 
    287         columnIndex++; 
    288     }    
    289     cols[columnIndex] = "utility"; 
     237        columnIndex++; 
     238    } 
     239    cols[columnIndex] = "TotalWeight";   
    290240 
    291241    myCBR = new CBR(filename, tablename, cols, numberColumns); 
     242 
    292243} 
    293244 
     
    296247CBR_CE::PerformUpdatePerformance() 
    297248{ 
     249 
    298250    /* Receive Set of current Parameters */ 
    299251    char buffer[256]; 
     
    314266    }  
    315267 
     268 
    316269    /* Receive Set of Observables */ 
    317270    memset(buffer, 0, 256); 
     
    329282        ReadMessage(commandSocketFD, buffer); 
    330283        o[i].value = atof(buffer); 
    331     }   
    332  
    333     ReceiveFeedback(o, p); 
     284    } 
     285 
     286 
     287    /* Receive Set of Utilities */ 
     288    memset(buffer, 0, 256); 
     289    ReadMessage(commandSocketFD, buffer); 
     290    uint32_t numUtilities = atoi(buffer); 
     291     
     292    Utility *u = new Utility[numUtilities]; 
     293 
     294    for(size_t i = 0; i < numUtilities; i++) { 
     295        memset(buffer, 0, 256); 
     296        ReadMessage(commandSocketFD, buffer); 
     297        u[i].name = std::string(buffer); 
     298         
     299        memset(buffer, 0, 256); 
     300        ReadMessage(commandSocketFD, buffer); 
     301        u[i].value = atof(buffer); 
     302    } 
     303  
     304    ReceiveFeedback(o, p, u); 
    334305 
    335306    delete [] o; 
    336307    delete [] p; 
     308    delete [] u; 
    337309} 
    338310 
    339311 
    340312void 
    341 CBR_CE::PerformRequestOptimizationService() 
    342 { 
    343    // THIS IS CURRENTLY IN DEMO MODE             
    344  
     313CBR_CE::PerformRequestOptimization() 
     314{ 
    345315    /* Receive Set of Observables */ 
    346     LOG("\nCognitive Engine:: Receiving service name\n"); 
     316    LOG("\nCognitive Engine:: Receiving Observables\n"); 
    347317 
    348318    char buffer[256]; 
    349     memset(buffer, 0, 256); 
    350     ReadMessage(commandSocketFD,buffer); 
    351     LOG("\nCognitive Engine:: Got service name, %s\n", buffer); 
    352  
    353     /* Receive Set of Observables */ 
    354     LOG("\nCognitive Engine:: Receiving Observable Parameters\n"); 
    355  
    356319    memset(buffer, 0, 256); 
    357320    ReadMessage(commandSocketFD,buffer); 
     
    387350        ReadMessage(commandSocketFD, buffer); 
    388351        cp[i].value = atof(buffer); 
    389     }   
    390     LOG("Cognitive Engine:: Processing parameters....\n"); 
    391  
    392     //Parameter *solutionSet; 
    393      
    394     //solutionSet = GetSolution(o,cp); 
    395  
    396     // TODO need to actually do something with the observables here 
    397     
    398     LOG("Cognitive Engine:: Sending Optimal Parameters to Application.\n"); 
    399     char numParametersChar[10]; 
    400     //char solutionValue[50]; 
    401     sprintf(numParametersChar, "%i", radioInfo->numParameters); 
    402     SendMessage(commandSocketFD, numParametersChar); 
    403     for(size_t i = 0; i < radioInfo->numParameters; i++) { 
    404         // TODO What's with all the commented-out code? 
    405         //SendMessage(commandSocketFD, solutionSet[i].name.c_str()); 
    406         SendMessage(commandSocketFD, "test"); 
    407         //memset(solutionValue, 0, 50); 
    408         //sprintf(solutionValue, "%f", solutionSet[i].value); 
    409         //SendMessage(commandSocketFD, solutionValue); 
    410         SendMessage(commandSocketFD, "00"); 
    411     } 
    412  
    413     delete [] o; 
    414     delete [] cp; 
    415  
    416 } 
    417  
    418  
    419 void 
    420 CBR_CE::PerformRequestOptimization() 
    421 { 
    422     /* Receive Set of Observables */ 
    423     LOG("\nCognitive Engine:: Receiving Observable Parameters\n"); 
    424  
    425     char buffer[256]; 
    426     memset(buffer, 0, 256); 
    427     ReadMessage(commandSocketFD,buffer); 
    428     uint32_t numObservables = atoi(buffer); 
    429  
    430     Observable *o = new Observable[numObservables]; 
    431  
    432     for(size_t i = 0; i < numObservables; i++) { 
    433         memset(buffer, 0, 256); 
    434         ReadMessage(commandSocketFD, buffer); 
    435         o[i].name = std::string(buffer); 
    436  
    437         memset(buffer, 0, 256); 
    438         ReadMessage(commandSocketFD, buffer); 
    439         o[i].value = atof(buffer); 
    440     }   
    441  
    442     /* Receive Set of current Parameters */ 
    443     LOG("Cognitive Engine:: Receiving Current Transmission Parameters\n"); 
     352    } 
     353 
     354    /* Receive Set of Utilities */ 
     355    LOG("Cognitive Engine:: Receiving Utilities\n"); 
    444356 
    445357    memset(buffer, 0, 256); 
    446358    ReadMessage(commandSocketFD, buffer); 
    447     uint32_t numCurrentParameters = atoi(buffer); 
    448  
    449     Parameter *cp = new Parameter[numCurrentParameters]; 
    450  
    451     for(size_t i = 0; i < numCurrentParameters; i++) { 
    452         memset(buffer, 0, 256); 
    453         ReadMessage(commandSocketFD, buffer); 
    454         cp[i].name = std::string(buffer); 
    455  
    456         memset(buffer, 0, 256); 
    457         ReadMessage(commandSocketFD, buffer); 
    458         cp[i].value = atof(buffer); 
    459     }   
     359    uint32_t numUtilities = atoi(buffer); 
     360 
     361    Utility *u = new Utility[numUtilities]; 
     362 
     363    for(size_t i = 0; i < numUtilities; i++) { 
     364        memset(buffer, 0, 256); 
     365        ReadMessage(commandSocketFD, buffer); 
     366        u[i].name = std::string(buffer); 
     367 
     368        memset(buffer, 0, 256); 
     369        ReadMessage(commandSocketFD, buffer); 
     370        u[i].value = atof(buffer); 
     371    } 
     372 
     373 
     374 
     375   
    460376    LOG("Cognitive Engine:: Processing parameters....\n"); 
    461377 
    462378    Parameter *solutionSet; 
    463379     
    464     solutionSet = GetSolution(o,cp); 
    465  
    466     // TODO need to actually do something with the observables here 
     380    solutionSet = GetSolution(o,cp,u); 
     381 
     382  
    467383    
    468384    LOG("Cognitive Engine:: Sending Optimal Parameters to Application.\n"); 
     
    480396    delete [] o; 
    481397    delete [] cp; 
    482 } 
    483  
    484  
    485 void 
    486 CBR_CE::PerformQueryComponentType() 
    487 { 
    488     SendComponentType(); 
    489 } 
    490  
    491  
    492 void 
    493 CBR_CE::PerformConnectSML() 
    494 { 
    495     /* This command implies that we are disconnecting from the shell and 
    496      * connecting to a SML component. */ 
    497     char serverName[256]; 
    498     char serverPort[256]; 
    499  
    500     // TODO is this going to end up being too slow? 
    501     memset(serverName, 0, 256); 
    502     memset(serverPort, 0, 256); 
    503  
    504     ReadMessage(commandSocketFD, serverName); 
    505     ReadMessage(commandSocketFD, serverPort); 
    506  
    507     /* Only continue if we are currently connected to a shell. */ 
    508     if(!SML_present) { 
    509         DeregisterComponent(); 
    510  
    511         shutdown(commandSocketFD, 2); 
    512         close(commandSocketFD); 
    513  
    514         ConnectToRemoteComponent(serverName, serverPort, true); 
    515     } 
    516 } 
    517  
    518  
    519 void 
    520 CBR_CE::PerformDisconnectSML() 
    521 { 
    522     /* This command implies that we are disconnecting from the SML and 
    523      * connecting to a shell component. */ 
    524     char serverName[256]; 
    525     char serverPort[256]; 
    526  
    527     // TODO is this going to end up being too slow? 
    528     memset(serverName, 0, 256); 
    529     memset(serverPort, 0, 256); 
    530  
    531     ReadMessage(commandSocketFD, serverName); 
    532     ReadMessage(commandSocketFD, serverPort); 
    533  
    534     /* We only want to do this if we are actually connected to an SML 
    535      * currently. */ 
    536     if(SML_present) { 
    537         DeregisterServices(); 
    538  
    539         shutdown(commandSocketFD, 2); 
    540         close(commandSocketFD); 
    541  
    542         ConnectToRemoteComponent(serverName, serverPort, false); 
    543     } 
     398    delete [] u; 
    544399} 
    545400