Changeset 230
- Timestamp:
- 04/03/09 13:05:41 (15 years ago)
- Location:
- vtcross/trunk/src
- Files:
-
- 7 modified
Legend:
- Unmodified
- Added
- Removed
-
vtcross/trunk/src/cognitive_engines/CognitiveEngine.cpp
r228 r230 12 12 #include <cstring> 13 13 #include <stdint.h> 14 #include <math.h> 14 15 15 16 #include "vtcross/common.h" … … 94 95 95 96 void 97 CognitiveEngine::ReceiveFeedback(Observable *observables, Parameter *parameters) 98 { 99 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]; 109 char *nameList[numberColumns]; 110 char *obsList[obsColumns]; 111 112 size_t columnObsIndex = 0; 113 for (size_t i = 0; i < radioInfo->numObservables; i++){ 114 obsList[columnObsIndex] = (char*)observables[i].name.c_str(); 115 columnObsIndex++; 116 } 117 obsList[columnObsIndex] = "utility"; 118 119 size_t columnIndex = 0; 120 for (size_t i = 0; i < radioInfo->numParameters; i++){ 121 nameList[columnIndex] = (char*)parameters[i].name.c_str(); 122 columnIndex++; 123 } 124 for (size_t i = 0; i < radioInfo->numUtilities; i++){ 125 nameList[columnIndex] = (char*)uList[i].name.c_str(); 126 columnIndex++; 127 } 128 129 size_t obsValueIndex = 0; 130 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; 136 137 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; 143 for(size_t i = 0; i < radioInfo->numParameters; i++) { 144 valList[returnValueIndex] = parameters[i].value; 145 returnValueIndex++; 146 } 147 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); 155 } 156 157 158 void 96 159 CognitiveEngine::WaitForSignal() 97 160 { … … 110 173 // MUCH faster since instead of donig string compares we can simply 111 174 // switch on the integer value... 112 if(strcmp(buffer, " request_optimization") == 0) {175 if(strcmp(buffer, "update_performance") == 0) { 113 176 177 /* Receive Set of current Parameters */ 178 memset(buffer, 0, 256); 179 ReadMessage(commandSocketFD,buffer); 180 uint32_t numParameters = atoi(buffer); 181 182 Parameter *p = new Parameter[numParameters]; 183 184 for(size_t i = 0; i < numParameters; i++) { 185 memset(buffer, 0, 256); 186 ReadMessage(commandSocketFD, buffer); 187 p[i].name = std::string(buffer); 188 189 memset(buffer, 0, 256); 190 ReadMessage(commandSocketFD, buffer); 191 p[i].value = atof(buffer); 192 } 193 114 194 /* Receive Set of Observables */ 115 LOG("Cognitive Engine:: Receiving Observable Parameters\n");116 117 195 memset(buffer, 0, 256); 118 196 ReadMessage(commandSocketFD,buffer); … … 131 209 } 132 210 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"); 220 221 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 133 237 /* Receive Set of current Parameters */ 134 238 LOG("Cognitive Engine:: Receiving Current Transmission Parameters\n"); … … 156 260 157 261 // TODO need to actually do something with the observables here 158 262 159 263 LOG("Cognitive Engine:: Sending Optimal Parameters to Application.\n"); 160 264 char numParametersChar[10]; … … 453 557 454 558 for(size_t i = 0; i < radioInfo->numUtilities; i++) { 455 searchNames[i] = (char*) uList[i].name.c_str();559 searchNames[i] = (char*)observables[i].name.c_str(); 456 560 } 457 561 … … 492 596 if(rc == 0){ 493 597 /* Adapt the returned parameters to meet the objective */ 494 598 599 WARNING("Cognitive Engine:: Found\n"); 600 601 // Should do a random adaptation.. 602 if(returnValues[numberColumns-1] < 0) { 603 returnValues[2] = returnValues[2] - 15; 604 returnValues[3] = returnValues[3] - 2; 605 } else { 606 returnValues[2] = returnValues[2] + 15; 607 returnValues[3] = returnValues[3] + 2; 608 } 495 609 } else if(rc == 31337){ 610 WARNING("Cognitive Engine:: Not Found.\n"); 496 611 /* No rows in the CBR, pick default parameters */ 497 612 // Currently this is hard coded and implementation specific! 498 //returnValues[2] = currentParameters[0].value + 5;499 //returnValues[3] = currentParameters[1].value + 10;613 returnValues[2] = currentParameters[0].value + 5; 614 returnValues[3] = currentParameters[1].value + 10; 500 615 501 616 } else { … … 516 631 returnValueIndex++; 517 632 } 633 returnValues[returnValueIndex] = 0; 634 635 char *allNames[numberColumns]; 636 size_t allNameIndex = 0; 637 for(size_t i = 0; i < radioInfo->numUtilities; i++) { 638 allNames[allNameIndex] = (char*)uList[i].name.c_str(); 639 returnValues[allNameIndex] = uList[i].target; 640 allNameIndex++; 641 } 642 for(size_t i = 0; i < radioInfo->numParameters; i++) { 643 allNames[allNameIndex] = (char*)pList[i].name.c_str(); 644 allNameIndex++; 645 } 646 for(size_t i = 0; i < radioInfo->numObservables; i++) { 647 allNames[allNameIndex] = (char*)oList[i].name.c_str(); 648 returnValues[allNameIndex] = 0; 649 allNameIndex++; 650 } 651 allNames[allNameIndex] = "utility"; 518 652 519 653 // Add row to CBR. 654 cbr_add_row(myCBR, allNames, returnValues, returnValueIndex+1); 520 655 521 656 return pList; … … 535 670 void 536 671 CognitiveEngine::ReceiveFeedback(Observable *observables, Parameter *parameters, \ 537 Utility *utilities) 538 { 539 LOG("Cognitive Engine:: Receiving feedback.\n"); 540 } 541 542 543 void 544 CognitiveEngine::ReceiveFeedback(Observable *observables, Parameter *parameters, \ 545 Utility *utilities, std::string service) 672 std::string service) 546 673 { 547 674 LOG("Cognitive Engine:: Receiving feedback.\n"); -
vtcross/trunk/src/cognitive_engines/cbr.c
r228 r230 222 222 } 223 223 224 printf("search command: %s\n", _cbr->command);224 //printf("search command: %s\n", _cbr->command); 225 225 226 226 //ExecuteCommand(_cbr); … … 235 235 } 236 236 237 238 // update a row 239 int cbr_update(cbr _cbr, char *_where[], char*_set[], float *_wherevals, float *_setvals, 240 unsigned int _wherelen, unsigned int _setlen) 241 { 242 unsigned int i; 243 244 // generate command 245 //printf("%s\n", _cbr->command); 246 strcpy(_cbr->command, "UPDATE "); 247 strcat(_cbr->command, _cbr->tablename); 248 249 strcat(_cbr->command, " SET "); 250 for (i=0; i<_setlen; i++) { 251 strcat(_cbr->command, _set[i]); 252 strcat(_cbr->command, " = "); 253 sprintf(_cbr->command, "%s%f", _cbr->command, _setvals[i]); 254 strcat(_cbr->command, " "); 255 if (i != _setlen-1) // not last entry 256 strcat(_cbr->command, ", "); 257 } 258 strcat(_cbr->command, " WHERE "); 259 260 for (i=0; i<_wherelen; i++) { 261 strcat(_cbr->command, _where[i]); 262 strcat(_cbr->command, " = "); 263 sprintf(_cbr->command, "%s%f", _cbr->command, _wherevals[i]); 264 strcat(_cbr->command, " "); 265 if (i != _wherelen-1) // not last entry 266 strcat(_cbr->command, "AND "); 267 } 268 strcat(_cbr->command, ";"); 269 270 //printf("search command: %s\n", _cbr->command); 271 // execute add command 272 ExecuteCommand(_cbr); 273 274 return 0; 275 } 237 276 238 277 // cbr add a row … … 264 303 strcat(_cbr->command, ");"); 265 304 305 //printf("search command: %s\n", _cbr->command); 266 306 // execute add command 267 307 ExecuteCommand(_cbr); -
vtcross/trunk/src/include/vtcross/components.h
r228 r230 272 272 */ 273 273 void ReceiveFeedback(Observable *observables,\ 274 Parameter *parameters , Utility *utilities);274 Parameter *parameters); 275 275 void ReceiveFeedback(Observable *observables, \ 276 Parameter *parameters, Utility *utilities,std::string service);276 Parameter *parameters, std::string service); 277 277 278 278 … … 352 352 bool SendRadioConfiguration(int32_t socketFD); 353 353 bool SendRadioExperience(int32_t socketFD); 354 354 355 bool UpdateParameterPerformance(int32_t socketFD); 356 355 357 bool SML_present; 356 358 bool PE_present; -
vtcross/trunk/src/include/vtcross/libvtcross.h
r228 r230 86 86 * radio's performance? 87 87 */ 88 bool UpdateParameterPerformance(Parameter *radioParameters, \ 89 Observable *radioObservables, Utility *radioUtilies); 90 88 bool UpdateParameterPerformance(Parameter *p, uint32_t numParameters, Observable *o, \ 89 uint32_t numObservables); 91 90 92 91 /* Deactivate/Activate/Disconnect a component by id. … … 107 106 */ 108 107 uint32_t GetNumParameters(); 108 uint32_t GetNumObservables(); 109 uint32_t GetNumUtilities(); 109 110 110 111 -
vtcross/trunk/src/libvtcross/libvtcross.cpp
r229 r230 25 25 26 26 return socket; 27 } 28 29 uint32_t 30 GetNumObservables() 31 { 32 uint32_t socketfd, numObservables; 33 char buffer[256]; 34 35 socketfd = ConnectToRemoteComponent(); 36 SendMessage(socketfd,"get_number_observables"); 37 38 memset(buffer, 0, 256); 39 ReadMessage(socketfd, buffer); 40 numObservables = atoi(buffer); 41 42 return numObservables; 43 } 44 45 uint32_t 46 GetNumUtilities() 47 { 48 uint32_t socketfd, numUtilities; 49 char buffer[256]; 50 51 socketfd = ConnectToRemoteComponent(); 52 SendMessage(socketfd,"get_number_utilities"); 53 54 memset(buffer, 0, 256); 55 ReadMessage(socketfd, buffer); 56 numUtilities = atoi(buffer); 57 58 return numUtilities; 27 59 } 28 60 … … 106 138 } 107 139 140 bool 141 UpdateParameterPerformance(Parameter *p, uint32_t numParameters, Observable *o, 142 uint32_t numObservables) 143 { 144 char counter[55]; 145 char var[50]; 146 147 uint32_t socketFD = ConnectToRemoteComponent(); 148 SendMessage(socketFD, "update_performance"); 149 150 // Send Parameters 151 memset(counter, 0, 55); 152 sprintf(counter, "%i", numParameters); 153 SendMessage(socketFD, counter); 154 155 for(size_t i = 0; i < numParameters; i++) { 156 SendMessage(socketFD,p[i].name.c_str()); 157 sprintf(var,"%f",p[i].value); 158 SendMessage(socketFD,var); 159 } 160 161 // Send Observables 162 sprintf(counter, "%i", numObservables); 163 SendMessage(socketFD, counter); 164 for(size_t i = 0; i < numObservables; i++) { 165 SendMessage(socketFD, o[i].name.c_str()); 166 sprintf(var, "%f", o[i].value); 167 SendMessage(socketFD, var); 168 } 169 } -
vtcross/trunk/src/libvtcross/libvtcross_demo.cpp
r228 r230 23 23 main(int32_t argc, char *argv[]) 24 24 { 25 Observable *o = new Observable[1]; 25 26 for(size_t i = 0; i < 10; i++) { 27 Observable *o = new Observable[2]; 26 28 Parameter *currentParameters = new Parameter[2]; 27 29 Parameter * p; 28 30 29 31 uint32_t numParameters; 32 uint32_t numObservables; 33 uint32_t numUtilities; 30 34 31 o[0].name = "PER"; 32 o[0].value = 12.00; 35 o[0].name = "throughput"; 36 o[0].value = 150.00; 37 o[1].name = "PER"; 38 o[1].value = 12.00; 33 39 34 currentParameters[0].name = "tx_power"; 35 currentParameters[0].value = 10.0; 36 currentParameters[1].name = "bandwidth"; 37 currentParameters[1].value = 300.0; 40 if(i == 0) { 41 currentParameters[0].name = "bandwidth"; 42 currentParameters[0].value = 300.0; 43 currentParameters[1].name = "tx_power"; 44 currentParameters[1].value = 10.0; 38 45 39 p = GetOptimalParameters(o,1,currentParameters,2); 46 } else { 47 currentParameters[0].value = p[0].value; 48 currentParameters[1].value = p[1].value; 49 } 50 p = GetOptimalParameters(o,2,currentParameters,2); 40 51 numParameters = GetNumParameters(); 52 numObservables = GetNumObservables(); 53 numUtilities = GetNumUtilities(); 41 54 42 55 printf("Application:: Received the following parameters.\n"); … … 48 61 // Try them out! Do they work? 49 62 50 Utility *resultingUtility = new Utility[2]; 51 52 // UpdateParameterPerformance(p,o,resultingUtility); 63 o[0].value = 0.5*p[0].value + .1*p[1].value; 64 o[1].value = 15-p[1].value; 65 66 UpdateParameterPerformance(p,numParameters,o,numObservables); 53 67 54 68 55 69 delete [] p; 56 70 delete [] o; 57 71 } 58 72 return 0; 59 73 } -
vtcross/trunk/src/shell/CognitiveRadioShell.cpp
r229 r230 552 552 } 553 553 554 554 bool 555 CognitiveRadioShell::UpdateParameterPerformance(int32_t socketFD) 556 { 557 char counter[55]; 558 uint32_t numObservables,numParameters; 559 char var[50]; 560 char buffer[256]; 561 562 /* Receive Set of Parameters */ 563 memset(buffer, 0, 256); 564 ReadMessage(commandSocketFD,buffer); 565 numParameters = atoi(buffer); 566 567 Parameter *p = new Parameter[numParameters]; 568 569 for (size_t i = 0; i < numParameters; i++){ 570 memset(buffer, 0, 256); 571 ReadMessage(commandSocketFD,buffer); 572 p[i].name = std::string(buffer); 573 memset(buffer, 0, 256); 574 ReadMessage(commandSocketFD,buffer); 575 p[i].value = atof(buffer); 576 } 577 578 /* Receive Set of Observables */ 579 memset(buffer, 0, 256); 580 ReadMessage(commandSocketFD, buffer); 581 numObservables = atoi(buffer); 582 583 Observable *o = new Observable[numObservables]; 584 585 for(size_t i = 0; i < numObservables; i++) { 586 memset(buffer, 0, 256); 587 ReadMessage(commandSocketFD, buffer); 588 o[i].name = std::string(buffer); 589 590 memset(buffer, 0, 256); 591 ReadMessage(commandSocketFD, buffer); 592 o[i].value = atof(buffer); 593 } 594 595 596 SendMessage(ceSocketFD, "update_performance"); 597 598 // Send Parameters 599 memset(counter, 0, 55); 600 sprintf(counter, "%i", numParameters); 601 SendMessage(ceSocketFD, counter); 602 603 for(size_t i = 0; i < numParameters; i++) { 604 SendMessage(ceSocketFD,p[i].name.c_str()); 605 sprintf(var,"%f",p[i].value); 606 SendMessage(ceSocketFD,var); 607 } 608 609 // Send Observables 610 sprintf(counter, "%i", numObservables); 611 SendMessage(ceSocketFD, counter); 612 for(size_t i = 0; i < numObservables; i++) { 613 SendMessage(ceSocketFD, o[i].name.c_str()); 614 sprintf(var, "%f", o[i].value); 615 SendMessage(ceSocketFD, var); 616 } 617 618 return 1; 619 } 555 620 void 556 621 CognitiveRadioShell::HandleMessage(int32_t socketFD) … … 572 637 } else if(strcmp(buffer, "deregister_sml") == 0) { 573 638 DeregisterSML(socketFD); 639 } else if(strcmp(buffer, "update_performance") == 0) { 640 UpdateParameterPerformance(socketFD); 641 } else if(strcmp(buffer,"get_number_utilities") == 0) { 642 char numUtilities[20]; 643 sprintf(numUtilities,"%i",radio_info->numUtilities); 644 SendMessage(commandSocketFD,numUtilities); 645 } else if(strcmp(buffer,"get_number_observables") == 0) { 646 char numObservables[20]; 647 sprintf(numObservables,"%i",radio_info->numObservables); 648 SendMessage(commandSocketFD,numObservables); 574 649 } else if(strcmp(buffer,"get_number_parameters") == 0) { 575 650 char numParameters[20];