| 250 | } |
| 251 | |
| 252 | std::vector<Wire> WireFitQLearn::newControlWires(const Wire &correctWire, std::vector<Wire> controlWires) { |
| 253 | double error = 0; |
| 254 | int iterations = 0; |
| 255 | |
| 256 | do { |
| 257 | for(unsigned int a = 0; a < controlWires.size(); a++) { |
| 258 | double deltaReward = -2 * (-interpolator->getReward(controlWires, correctWire.action) + correctWire.reward)*interpolator->rewardDerivative(correctWire.action, controlWires[a], controlWires); |
| 259 | controlWires[a].reward = controlWires[a].reward - controlPointsGDLearningRate*deltaReward; |
| 260 | for(unsigned int b = 0; b < controlWires[a].action.size(); b++) { |
| 261 | double deltaActionTerm = -2 * (-interpolator->getReward(controlWires, correctWire.action) + correctWire.reward)*interpolator->actionTermDerivative(correctWire.action[b], controlWires[a].action[b], correctWire.action, controlWires[a], controlWires); |
| 262 | controlWires[a].action[b] = controlWires[a].action[b] - controlPointsGDLearningRate*deltaActionTerm; |
| 263 | } |
| 264 | } |
| 265 | |
| 266 | error = pow(correctWire.reward - interpolator->getReward(controlWires, correctWire.action), 2); |
| 267 | iterations++; |
| 268 | } while(error > controlPointsGDErrorTarget && iterations < controlPointsGDMaxIterations); |
| 269 | |
| 270 | return controlWires; |
| 271 | |
| 272 | } |
| 273 | |
| 274 | std::vector<Wire> WireFitQLearn::newControlWires(const std::vector<Wire> &correctWires, std::vector<Wire> controlWires) { |
| 275 | double error = 0; |
nothing calls this directly
no test coverage detected