| 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 |
| 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 | |
| 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 | |
| 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"; |