Changeset 231
- Timestamp:
- 04/07/09 00:42:38 (15 years ago)
- Location:
- vtcross/trunk/src
- Files:
-
- 6 modified
Legend:
- Unmodified
- Added
- Removed
-
vtcross/trunk/src/cognitive_engines/CognitiveEngine.cpp
r230 r231 22 22 #include "vtcross/cbr.h" 23 23 24 // TODO this is really bad; need to move to a proper cbr.h 24 25 #include "cbr.c" 25 26 … … 28 29 29 30 30 31 31 static cbr myCBR; 32 32 33 33 34 CognitiveEngine::CognitiveEngine() … … 41 42 CognitiveEngine::~CognitiveEngine() 42 43 { 43 44 cbr_free(myCBR); 44 45 delete [] pList; 45 46 delete [] oList; … … 49 50 50 51 51 CognitiveEngine::CognitiveEngine(const char * serverName, const char*serverPort, \52 CognitiveEngine::CognitiveEngine(const char *serverName, const char *serverPort, \ 52 53 const bool SML) 53 54 { … … 72 73 73 74 void 74 CognitiveEngine::ConnectToRemoteComponent(const char *serverName, \75 const char *serverPort, const bool SML)75 CognitiveEngine::ConnectToRemoteComponent(const char *serverName, \ 76 const char *serverPort, const bool SML) 76 77 { 77 78 commandSocketFD = ClientSocket(serverName, serverPort); … … 98 99 { 99 100 LOG("Cognitive Engine:: Receiving feedback.\n"); 100 101 102 103 104 105 106 107 108 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]; 109 110 char *nameList[numberColumns]; 110 111 char *obsList[obsColumns]; … … 112 113 size_t columnObsIndex = 0; 113 114 for (size_t i = 0; i < radioInfo->numObservables; i++){ 114 115 obsList[columnObsIndex] = (char*)observables[i].name.c_str(); 115 116 columnObsIndex++; 116 117 } … … 119 120 size_t columnIndex = 0; 120 121 for (size_t i = 0; i < radioInfo->numParameters; i++){ 121 122 nameList[columnIndex] = (char*)parameters[i].name.c_str(); 122 123 columnIndex++; 123 124 } 124 125 for (size_t i = 0; i < radioInfo->numUtilities; i++){ 125 126 nameList[columnIndex] = (char*)uList[i].name.c_str(); 126 127 columnIndex++; 127 128 } 128 129 129 130 size_t obsValueIndex = 0; 130 131 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; 136 138 137 139 for(size_t i = 0; i < radioInfo->numUtilities; i++) { 138 139 140 141 142 140 newUtilityValue = newUtilityValue + (uList[i].target - observables[i].value); 141 } 142 obsVals[obsValueIndex] = newUtilityValue; 143 144 size_t returnValueIndex = 0; 143 145 for(size_t i = 0; i < radioInfo->numParameters; i++) { 144 145 146 146 valList[returnValueIndex] = parameters[i].value; 147 returnValueIndex++; 148 } 147 149 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); 155 156 } 156 157 … … 177 178 /* Receive Set of current Parameters */ 178 179 memset(buffer, 0, 256); 179 ReadMessage(commandSocketFD, buffer);180 ReadMessage(commandSocketFD, buffer); 180 181 uint32_t numParameters = atoi(buffer); 181 182 … … 193 194 194 195 /* 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 195 222 memset(buffer, 0, 256); 196 223 ReadMessage(commandSocketFD,buffer); … … 209 236 } 210 237 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"); 220 240 221 241 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); 242 243 uint32_t numCurrentParameters = atoi(buffer); 243 244 … … 253 254 cp[i].value = atof(buffer); 254 255 } 255 256 LOG("Cognitive Engine:: Processing parameters....\n"); 256 257 257 258 Parameter *solutionSet; 258 259 259 260 solutionSet = GetSolution(o,cp); 260 261 261 262 // TODO need to actually do something with the observables here 262 263 263 264 265 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); 268 269 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()); 270 271 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 } 274 275 275 276 delete [] o; … … 430 431 /* Receive Set of Utilities */ 431 432 memset(buffer, 0, 256); 432 ReadMessage(commandSocketFD, buffer);433 ReadMessage(commandSocketFD, buffer); 433 434 radioInfo->numUtilities = atoi(buffer); 434 435 435 436 for(size_t i = 0; i < radioInfo->numUtilities; i++) { 436 437 memset(buffer, 0, 256); 437 ReadMessage(commandSocketFD, buffer);438 ReadMessage(commandSocketFD, buffer); 438 439 uList[i].name = std::string(buffer); 439 440 440 441 memset(buffer, 0, 256); 441 ReadMessage(commandSocketFD, buffer);442 ReadMessage(commandSocketFD, buffer); 442 443 uList[i].units = std::string(buffer); 443 444 444 445 memset(buffer, 0, 256); 445 ReadMessage(commandSocketFD, buffer);446 ReadMessage(commandSocketFD, buffer); 446 447 uList[i].goal = std::string(buffer); 447 448 448 449 memset(buffer, 0, 256); 449 ReadMessage(commandSocketFD, buffer);450 ReadMessage(commandSocketFD, buffer); 450 451 uList[i].target = atof(buffer); 451 452 } … … 484 485 memset(buffer, 0, 256); 485 486 ReadMessage(commandSocketFD,buffer); 487 // TODO for + if{break} = while? 486 488 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)) { 488 490 pList[i].affection_list[j].u = &uList[k]; 489 491 break; … … 492 494 493 495 memset(buffer, 0, 256); 494 ReadMessage(commandSocketFD, buffer);496 ReadMessage(commandSocketFD, buffer); 495 497 pList[i].affection_list[j].relation = std::string(buffer); 496 498 } … … 499 501 /* Receive Set of Observables */ 500 502 memset(buffer, 0, 256); 501 ReadMessage(commandSocketFD, buffer);503 ReadMessage(commandSocketFD, buffer); 502 504 radioInfo->numObservables = atoi(buffer); 503 505 504 506 for(size_t i = 0; i < radioInfo->numObservables; i++) { 505 507 memset(buffer, 0, 256); 506 ReadMessage(commandSocketFD, buffer);508 ReadMessage(commandSocketFD, buffer); 507 509 oList[i].name = std::string(buffer); 508 510 509 511 memset(buffer, 0, 256); 510 ReadMessage(commandSocketFD, buffer);512 ReadMessage(commandSocketFD, buffer); 511 513 oList[i].numAffects = atoi(buffer); 512 514 513 515 for(size_t j = 0; j < oList[i].numAffects; j++) { 514 516 memset(buffer, 0, 256); 515 ReadMessage(commandSocketFD,buffer); 517 ReadMessage(commandSocketFD, buffer); 518 // TODO for + if{break} = while? 516 519 for(size_t k = 0; k < radioInfo->numUtilities; k++) { 517 520 if(uList[k].name == std::string(buffer)){ 518 521 oList[i].affection_list[j].u = &uList[k]; 519 522 break; … … 522 525 523 526 memset(buffer, 0, 256); 524 ReadMessage(commandSocketFD, buffer);527 ReadMessage(commandSocketFD, buffer); 525 528 oList[i].affection_list[j].relation = std::string(buffer); 526 529 } … … 529 532 SendMessage(commandSocketFD, "receive_config_ack"); 530 533 531 534 BuildCognitiveEngine(); 532 535 } 533 536 … … 541 544 /* Receive number of experience entries */ 542 545 memset(buffer, 0, 256); 543 ReadMessage(commandSocketFD, buffer);546 ReadMessage(commandSocketFD, buffer); 544 547 numberExp = atoi(buffer); 545 548 546 LOG("Cognitive Engine:: Waiting for %i number of entries.\n", numberExp);549 LOG("Cognitive Engine:: Waiting for %i number of entries.\n", numberExp); 547 550 548 551 SendMessage(commandSocketFD, "receive_exp_ack"); … … 558 561 for(size_t i = 0; i < radioInfo->numUtilities; i++) { 559 562 searchNames[i] = (char*)observables[i].name.c_str(); 560 563 } 561 564 562 565 float searchVals[radioInfo->numUtilities]; 563 566 564 565 567 for(size_t i = 0; i < radioInfo->numUtilities; i++) { 568 searchVals[i] = uList[i].target; 566 569 } 567 570 568 571 uint32_t numberColumns = 569 570 571 572 573 574 575 572 radioInfo->numUtilities + 573 radioInfo->numParameters + 574 radioInfo->numObservables + 1; 575 576 float returnValues[numberColumns]; 577 578 int searchOps[radioInfo->numUtilities]; 576 579 for(size_t i = 0; i < radioInfo->numUtilities; i++) { 577 580 578 581 /* 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){ 597 599 /* Adapt the returned parameters to meet the objective */ 598 599 600 WARNING("Cognitive Engine:: Found\n"); 600 601 601 // Should do a random adaptation.. 602 603 604 602 /* Should do a random adaptation.. */ 603 if(returnValues[numberColumns-1] < 0) { 604 returnValues[2] = returnValues[2] - 15; 605 returnValues[3] = returnValues[3] - 2; 605 606 } else { 606 607 608 609 } else if(rc == 31337) {607 returnValues[2] = returnValues[2] + 15; 608 returnValues[3] = returnValues[3] + 2; 609 } 610 } else if(rc == 31337) { 610 611 WARNING("Cognitive Engine:: Not Found.\n"); 611 612 // Currently this is hard coded and implementation specific! 613 614 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; 615 616 616 617 } else { 617 618 WARNING("Cognitive Engine:: Search return an invalid value.\n"); 618 619 620 619 } 620 621 size_t returnValueIndex = 0; 621 622 for(size_t i = 0; i < radioInfo->numUtilities; i++) { 622 623 624 623 uList[i].value = returnValues[returnValueIndex]; 624 returnValueIndex++; 625 } 625 626 for(size_t i = 0; i < radioInfo->numParameters; i++) { 626 627 628 627 pList[i].value = returnValues[returnValueIndex]; 628 returnValueIndex++; 629 } 629 630 for(size_t i = 0; i < radioInfo->numObservables; i++) { 630 631 632 631 oList[i].value = returnValues[returnValueIndex]; 632 returnValueIndex++; 633 } 633 634 returnValues[returnValueIndex] = 0; 634 635 635 636 char *allNames[numberColumns]; 636 637 size_t allNameIndex = 0; 637 638 for(size_t i = 0; i < radioInfo->numUtilities; i++) { 638 639 allNames[allNameIndex] = (char*)uList[i].name.c_str(); 639 640 641 640 returnValues[allNameIndex] = uList[i].target; 641 allNameIndex++; 642 } 642 643 for(size_t i = 0; i < radioInfo->numParameters; i++) { 643 644 allNames[allNameIndex] = (char*)pList[i].name.c_str(); 644 645 645 allNameIndex++; 646 } 646 647 for(size_t i = 0; i < radioInfo->numObservables; i++) { 647 648 allNames[allNameIndex] = (char*)oList[i].name.c_str(); 648 649 650 649 returnValues[allNameIndex] = 0; 650 allNameIndex++; 651 } 651 652 allNames[allNameIndex] = "utility"; 652 653 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; 658 658 } 659 659 660 660 661 661 Parameter* 662 CognitiveEngine::GetSolution(Observable *observables, Parameter *currentParameters, std::string service) 663 { 664 LOG("Cognitive Engine:: Generating solution for %s service.\n",service.c_str()); 662 CognitiveEngine::GetSolution(Observable *observables, \ 663 Parameter *currentParameters, std::string service) 664 { 665 LOG("Cognitive Engine:: Generating solution for %s service.\n", service.c_str()); 665 666 666 667 return pList; … … 679 680 CognitiveEngine::BuildCognitiveEngine() 680 681 { 681 682 682 char filename[] = {"ex1"}; 683 char tablename[] = {"data"}; 683 684 684 685 uint32_t numberColumns = 685 686 687 686 radioInfo->numUtilities + 687 radioInfo->numParameters + 688 radioInfo->numObservables + 1; 688 689 689 690 char *cols[numberColumns]; … … 691 692 size_t columnIndex = 0; 692 693 for (size_t i = 0; i < radioInfo->numUtilities; i++){ 693 694 cols[columnIndex] = (char*)uList[i].name.c_str(); 694 695 columnIndex++; 695 696 } 696 697 for (size_t i = 0; i < radioInfo->numParameters; i++){ 697 698 cols[columnIndex] = (char*)pList[i].name.c_str(); 698 699 columnIndex++; 699 700 } 700 701 for (size_t i = 0; i < radioInfo->numObservables; i++){ 701 702 cols[columnIndex] = (char*)oList[i].name.c_str(); 702 703 columnIndex++; 703 704 } -
vtcross/trunk/src/include/vtcross/components.h
r230 r231 293 293 int32_t commandSocketFD; 294 294 295 Utility * uList; 296 Parameter * pList; 297 Observable * oList; 298 struct Radio_Info * radioInfo; 295 // TODO Need a description for these fields. Are these radio utilites, 296 // parameters, and observables global to the whole system? 297 Utility *uList; 298 Parameter *pList; 299 Observable *oList; 300 struct Radio_Info *radioInfo; 299 301 }; 300 302 -
vtcross/trunk/src/include/vtcross/socketcomm.h
r216 r231 18 18 /* TODO 19 19 */ 20 void ReadMessage(int32_t socketFD, char *msgBuffer);20 void ReadMessage(int32_t socketFD, char *msgBuffer); 21 21 22 22 /* TODO 23 23 */ 24 //int32_t SendMessage(int32_t socketFD, char* message); 25 int32_t SendMessage(int32_t socketFD, const char* message) ; 24 int32_t SendMessage(int32_t socketFD, const char *message) ; 26 25 27 26 /* TODO … … 38 37 * to do. 39 38 */ 40 int32_t ClientSocket(const char * serverName, const char*portNumber);39 int32_t ClientSocket(const char *serverName, const char *portNumber); 41 40 42 41 /* TODO -
vtcross/trunk/src/libvtcross/libvtcross.cpp
r230 r231 21 21 ConnectToRemoteComponent() 22 22 { 23 uint32_t socket; 24 socket = ClientSocket("localhost", "40000"); 25 26 return socket; 23 // TODO why is this hardcoded like this?? 24 return ClientSocket("localhost", "40000"); 27 25 } 28 26 27 // TODO the following three functions all do exactly the same thing. Why not 28 // simply combine them? 29 29 uint32_t 30 30 GetNumObservables() 31 31 { 32 uint32_t socketfd, numObservables;33 32 char buffer[256]; 34 33 35 socketfd = ConnectToRemoteComponent();36 SendMessage(socketfd, "get_number_observables");34 uint32_t socketfd = ConnectToRemoteComponent(); 35 SendMessage(socketfd, "get_number_observables"); 37 36 38 37 memset(buffer, 0, 256); 39 38 ReadMessage(socketfd, buffer); 40 numObservables = atoi(buffer);39 uint32_t numObservables = atoi(buffer); 41 40 42 41 return numObservables; … … 46 45 GetNumUtilities() 47 46 { 48 uint32_t socketfd, numUtilities;49 47 char buffer[256]; 50 48 51 socketfd = ConnectToRemoteComponent();52 SendMessage(socketfd, "get_number_utilities");49 uint32_t socketfd = ConnectToRemoteComponent(); 50 SendMessage(socketfd, "get_number_utilities"); 53 51 54 52 memset(buffer, 0, 256); 55 53 ReadMessage(socketfd, buffer); 56 numUtilities = atoi(buffer);54 uint32_t numUtilities = atoi(buffer); 57 55 58 56 return numUtilities; … … 62 60 GetNumParameters() 63 61 { 64 uint32_t socketfd, numParameters;65 62 char buffer[256]; 66 63 67 socketfd = ConnectToRemoteComponent();68 SendMessage(socketfd, "get_number_parameters");64 uint32_t socketfd = ConnectToRemoteComponent(); 65 SendMessage(socketfd, "get_number_parameters"); 69 66 70 67 memset(buffer, 0, 256); 71 68 ReadMessage(socketfd, buffer); 72 numParameters = atoi(buffer);69 uint32_t numParameters = atoi(buffer); 73 70 74 71 return numParameters; 75 72 } 73 // end previous TODO 76 74 77 75 /* Given a certain set of observables, ask the radio to find the optimum radio … … 85 83 * memory when it is done using it. 86 84 */ 87 Parameter* GetOptimalParameters(Observable *radioObservables, uint32_t numObservables, 88 Parameter *currentParameters, uint32_t numCurrentParameters) { 89 uint32_t i,socketfd,numParameters; 85 Parameter* 86 GetOptimalParameters(Observable *radioObservables, uint32_t numObservables, 87 Parameter *currentParameters, uint32_t numCurrentParameters) 88 { 90 89 char var[50]; 91 90 char counter[55]; … … 99 98 */ 100 99 101 / / Send Observables100 /* Send Observables */ 102 101 sprintf(counter, "%i", numObservables); 103 102 SendMessage(socketFD, counter); … … 108 107 } 109 108 110 / / Send Parameters109 /* Send Parameters */ 111 110 memset(counter, 0, 55); 112 111 sprintf(counter, "%i", numCurrentParameters); 113 112 SendMessage(socketFD, counter); 114 115 for(i = 0; i < numCurrentParameters; i++) { 113 for(size_t i = 0; i < numCurrentParameters; i++) { 116 114 SendMessage(socketFD,currentParameters[i].name.c_str()); 117 115 sprintf(var,"%f",currentParameters[i].value); … … 122 120 memset(buffer, 0, 256); 123 121 ReadMessage(socketFD, buffer); 124 numParameters = atoi(buffer);122 uint32_t numParameters = atoi(buffer); 125 123 Parameter *pList = new Parameter[numParameters]; 126 124 … … 154 152 155 153 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);154 SendMessage(socketFD, p[i].name.c_str()); 155 sprintf(var, "%f", p[i].value); 156 SendMessage(socketFD, var); 159 157 } 160 158 -
vtcross/trunk/src/libvtcross/libvtcross_demo.cpp
r230 r231 23 23 main(int32_t argc, char *argv[]) 24 24 { 25 for(size_t i = 0; i < 10; i++) { 26 Observable *o = new Observable[2]; 27 Parameter *currentParameters = new Parameter[2]; 28 Parameter *p; 25 29 26 for(size_t i = 0; i < 10; i++) { 27 Observable *o = new Observable[2]; 28 Parameter *currentParameters = new Parameter[2]; 29 Parameter * p; 30 uint32_t numParameters; 31 uint32_t numObservables; 32 uint32_t numUtilities; 30 33 31 uint32_t numParameters; 32 uint32_t numObservables; 33 uint32_t numUtilities; 34 o[0].name = "throughput"; 35 o[0].value = 150.00; 36 o[1].name = "PER"; 37 o[1].value = 12.00; 34 38 35 o[0].name = "throughput"; 36 o[0].value = 150.00; 37 o[1].name = "PER"; 38 o[1].value = 12.00; 39 if(i == 0) { 40 currentParameters[0].name = "bandwidth"; 41 currentParameters[0].value = 300.0; 42 currentParameters[1].name = "tx_power"; 43 currentParameters[1].value = 10.0; 44 } else { 45 currentParameters[0].value = p[0].value; 46 currentParameters[1].value = p[1].value; 47 } 39 48 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; 49 p = GetOptimalParameters(o,2,currentParameters,2); 50 numParameters = GetNumParameters(); 51 numObservables = GetNumObservables(); 52 numUtilities = GetNumUtilities(); 45 53 46 } else { 47 currentParameters[0].value = p[0].value; 48 currentParameters[1].value = p[1].value; 49 } 50 p = GetOptimalParameters(o,2,currentParameters,2); 51 numParameters = GetNumParameters(); 52 numObservables = GetNumObservables(); 53 numUtilities = GetNumUtilities(); 54 LOG("Application:: Received the following parameters.\n"); 55 56 for(size_t i = 0; i < numParameters; i++) { 57 LOG("%s:: %f\n", p[i].name.c_str(), p[i].value); 58 } 54 59 55 printf("Application:: Received the following parameters.\n"); 56 57 for(size_t i = 0; i < numParameters; i++) { 58 printf("%s:: %f\n",p[i].name.c_str(),p[i].value); 60 /* Try them out! Do they work? */ 61 o[0].value = 0.5*p[0].value + .1*p[1].value; 62 o[1].value = 15-p[1].value; 63 64 UpdateParameterPerformance(p, numParameters, o, numObservables); 65 66 delete [] p; 67 delete [] o; 59 68 } 60 69 61 // Try them out! Do they work?62 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);67 68 69 delete [] p;70 delete [] o;71 }72 70 return 0; 73 71 } -
vtcross/trunk/src/shell/CognitiveRadioShell.cpp
r230 r231 111 111 112 112 113 // TODO what is the point of always returning a 1? 113 114 bool 114 CognitiveRadioShell::SendRadioConfiguration(int32_t socket fd)115 CognitiveRadioShell::SendRadioConfiguration(int32_t socketFD) 115 116 { 116 117 LOG("Cognitive Radio Shell:: Sending radio configuration to Cognitive Engine.\n"); 117 uint32_t i,j; 118 118 119 char counter[55]; 119 120 char var[50]; 120 121 121 // utilities 122 // Send number of utilities 123 sprintf(counter,"%d",radio_info->numUtilities); 124 SendMessage(socketfd,counter); 125 // send utility 126 for(i = 0; i < radio_info->numUtilities; i++) { 127 SendMessage(socketfd, utils[i].name.c_str()); 128 SendMessage(socketfd, utils[i].units.c_str()); 129 SendMessage(socketfd, utils[i].goal.c_str()); 122 /* Send utilities */ 123 sprintf(counter, "%d", radio_info->numUtilities); 124 SendMessage(socketFD, counter); 125 for(size_t i = 0; i < radio_info->numUtilities; i++) { 126 SendMessage(socketFD, utils[i].name.c_str()); 127 SendMessage(socketFD, utils[i].units.c_str()); 128 SendMessage(socketFD, utils[i].goal.c_str()); 130 129 sprintf(var,"%f", utils[i].target); 131 SendMessage(socket fd, var);132 } 133 134 / / parameters130 SendMessage(socketFD, var); 131 } 132 133 /* Send parameters */ 135 134 sprintf(counter,"%i",radio_info->numParameters); 136 SendMessage(socket fd,counter);137 for( i = 0; i < radio_info->numParameters; i++) {138 SendMessage(socket fd, params[i].name.c_str());139 SendMessage(socket fd, params[i].units.c_str());135 SendMessage(socketFD,counter); 136 for(size_t i = 0; i < radio_info->numParameters; i++) { 137 SendMessage(socketFD, params[i].name.c_str()); 138 SendMessage(socketFD, params[i].units.c_str()); 140 139 sprintf(var, "%f", params[i].min); 141 SendMessage(socket fd,var);140 SendMessage(socketFD,var); 142 141 sprintf(var, "%f", params[i].max); 143 SendMessage(socket fd, var);142 SendMessage(socketFD, var); 144 143 sprintf(var, "%f", params[i].step); 145 SendMessage(socket fd, var);144 SendMessage(socketFD, var); 146 145 147 146 sprintf(counter, "%i", params[i].numAffects); 148 SendMessage(socket fd, counter);149 for( j = 0; j < params[i].numAffects; j++) {150 SendMessage(socket fd, params[i].affection_list[j].u->name.c_str());151 SendMessage(socket fd, params[i].affection_list[j].relation.c_str());147 SendMessage(socketFD, counter); 148 for(size_t j = 0; j < params[i].numAffects; j++) { 149 SendMessage(socketFD, params[i].affection_list[j].u->name.c_str()); 150 SendMessage(socketFD, params[i].affection_list[j].relation.c_str()); 152 151 } 153 152 } 154 153 155 / / observables154 /* Send observables */ 156 155 sprintf(counter,"%i",radio_info->numObservables); 157 SendMessage(socket fd, counter);158 for( i = 0; i < radio_info->numObservables; i++) {159 SendMessage(socket fd, observables[i].name.c_str());156 SendMessage(socketFD, counter); 157 for(size_t i = 0; i < radio_info->numObservables; i++) { 158 SendMessage(socketFD, observables[i].name.c_str()); 160 159 161 160 sprintf(counter, "%i", observables[i].numAffects); 162 SendMessage(socket fd, counter);163 for( j = 0; j < observables[i].numAffects; j++) {164 SendMessage(socket fd, observables[i].affection_list[j].u->name.c_str());165 SendMessage(socket fd, observables[i].affection_list[j].relation.c_str());161 SendMessage(socketFD, counter); 162 for(size_t j = 0; j < observables[i].numAffects; j++) { 163 SendMessage(socketFD, observables[i].affection_list[j].u->name.c_str()); 164 SendMessage(socketFD, observables[i].affection_list[j].relation.c_str()); 166 165 } 167 166 } 168 167 169 / / Receive ACK for utils168 /* Receive ACK for radio configuration */ 170 169 char buffer[256]; 171 170 memset(buffer, 0, 256); 172 ReadMessage(socket fd, buffer);171 ReadMessage(socketFD, buffer); 173 172 174 173 if(strcmp(buffer, "receive_config_ack") != 0) { … … 178 177 179 178 return 1; 180 181 179 } 182 180 … … 189 187 char numberExpString[50]; 190 188 191 sprintf(numberExpString, "%i",numberExp);189 sprintf(numberExpString, "%i", numberExp); 192 190 SendMessage(socketFD, numberExpString); 193 191 … … 196 194 ReadMessage(socketFD, buffer); 197 195 if(strcmp(buffer, "receive_exp_ack") != 0) { 198 LOG("Cognitive Radio Shell:: Unexpected response: %s\n",buffer); 196 // TODO perhaps this should be a WARNING instead of a LOG? 197 LOG("Cognitive Radio Shell:: Unexpected response: %s\n", buffer); 199 198 return 0; 200 199 } 200 201 201 return 1; 202 202 } … … 446 446 447 447 return 1; 448 449 448 } 450 449 … … 454 453 { 455 454 char buffer[256]; 456 uint32_t numObservables,numParameters,numCurrentParameters;457 455 char counter[55]; 458 456 char var[50]; … … 462 460 memset(buffer, 0, 256); 463 461 ReadMessage(commandSocketFD, buffer); 464 numObservables = atoi(buffer);462 uint32_t numObservables = atoi(buffer); 465 463 466 464 LOG("Cognitive Radio Shell:: Attempting to get %i observables.\n", numObservables); … … 476 474 o[i].value = atof(buffer); 477 475 } 476 478 477 /* Receive Set of Current Parameters */ 479 478 memset(buffer, 0, 256); 480 479 ReadMessage(commandSocketFD,buffer); 481 numCurrentParameters = atoi(buffer);480 uint32_t numCurrentParameters = atoi(buffer); 482 481 483 482 LOG("Cognitive Radio Shell:: Attempting to get %i parameters.\n",numCurrentParameters); … … 492 491 cp[i].value = atof(buffer); 493 492 } 493 494 494 /* Send to Cognitive Engine 495 495 * TODO: With multiple CEs we need to make a decision about where 496 496 * to send this information 497 497 */ 498 499 498 if(!SML_present) { 500 499 LOG("Cognitive Radio Shell:: Passing on observables to Cognitive Engine\n"); … … 522 521 memset(buffer, 0, 256); 523 522 ReadMessage(ceSocketFD, buffer); 524 numParameters = atoi(buffer);523 uint32_t numParameters = atoi(buffer); 525 524 526 525 Parameter *p = new Parameter[numParameters]; … … 552 551 } 553 552 553 // TODO point of always returning 1? 554 554 bool 555 555 CognitiveRadioShell::UpdateParameterPerformance(int32_t socketFD) 556 556 { 557 557 char counter[55]; 558 uint32_t numObservables,numParameters;559 558 char var[50]; 560 559 char buffer[256]; … … 563 562 memset(buffer, 0, 256); 564 563 ReadMessage(commandSocketFD,buffer); 565 numParameters = atoi(buffer);564 uint32_t numParameters = atoi(buffer); 566 565 567 566 Parameter *p = new Parameter[numParameters]; … … 579 578 memset(buffer, 0, 256); 580 579 ReadMessage(commandSocketFD, buffer); 581 numObservables = atoi(buffer);580 uint32_t numObservables = atoi(buffer); 582 581 583 582 Observable *o = new Observable[numObservables]; … … 593 592 } 594 593 595 596 594 SendMessage(ceSocketFD, "update_performance"); 597 595 598 / / Send Parameters596 /* Send Parameters */ 599 597 memset(counter, 0, 55); 600 598 sprintf(counter, "%i", numParameters); … … 607 605 } 608 606 609 / / Send Observables607 /* Send Observables */ 610 608 sprintf(counter, "%i", numObservables); 611 609 SendMessage(ceSocketFD, counter); … … 615 613 SendMessage(ceSocketFD, var); 616 614 } 615 616 delete [] p; 617 delet [] o; 617 618 618 619 return 1; 619 620 } 621 622 620 623 void 621 624 CognitiveRadioShell::HandleMessage(int32_t socketFD) … … 625 628 ReadMessage(socketFD, buffer); 626 629 630 // TODO trying to read this code lock makes my eyes bleed 627 631 if(strcmp(buffer, "register_engine_cognitive") == 0) { 628 632 RegisterCognitiveEngine(socketFD); … … 639 643 } else if(strcmp(buffer, "update_performance") == 0) { 640 644 UpdateParameterPerformance(socketFD); 641 } else if(strcmp(buffer, "get_number_utilities") == 0) {645 } else if(strcmp(buffer, "get_number_utilities") == 0) { 642 646 char numUtilities[20]; 643 sprintf(numUtilities, "%i",radio_info->numUtilities);644 SendMessage(commandSocketFD, numUtilities);645 } else if(strcmp(buffer, "get_number_observables") == 0) {647 sprintf(numUtilities, "%i", radio_info->numUtilities); 648 SendMessage(commandSocketFD, numUtilities); 649 } else if(strcmp(buffer, "get_number_observables") == 0) { 646 650 char numObservables[20]; 647 sprintf(numObservables, "%i",radio_info->numObservables);648 SendMessage(commandSocketFD, numObservables);649 } else if(strcmp(buffer, "get_number_parameters") == 0) {651 sprintf(numObservables, "%i", radio_info->numObservables); 652 SendMessage(commandSocketFD, numObservables); 653 } else if(strcmp(buffer, "get_number_parameters") == 0) { 650 654 char numParameters[20]; 651 sprintf(numParameters, "%i",radio_info->numParameters);652 SendMessage(commandSocketFD, numParameters);653 } else if(strcmp(buffer, "request_optimization") == 0) {655 sprintf(numParameters, "%i", radio_info->numParameters); 656 SendMessage(commandSocketFD, numParameters); 657 } else if(strcmp(buffer, "request_optimization") == 0) { 654 658 /* Receive optimization request and current environment */ 655 659 GetOptimalParameters(socketFD); 656 } else if(strcmp(buffer, "request_optimization_service") == 0) {660 } else if(strcmp(buffer, "request_optimization_service") == 0) { 657 661 /* Receive optimization request and current environment */ 658 662 //GetOptimalParametersService(socketFD);