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 | | |
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; |
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 | } |
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 | |
| 191 | myCBR->Update(whereList,setList,whereValue,setValue,whereLen,setLen); |
| 192 | |
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); |
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"); |
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 | |
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; |