| 275 | } |
| 276 | |
| 277 | void HGrid::getCostMatrix(const vector<Eigen::Vector3d>& positions, |
| 278 | const vector<Eigen::Vector3d>& velocities, const vector<vector<int>>& first_ids, |
| 279 | const vector<vector<int>>& second_ids, const vector<int>& grid_ids, Eigen::MatrixXd& mat) { |
| 280 | // first_ids and second_ids are drone_num x 1-4 vectors |
| 281 | |
| 282 | // Fill the cost matrix |
| 283 | const int drone_num = positions.size(); |
| 284 | const int grid_num = grid_ids.size(); |
| 285 | const int dimen = 1 + drone_num + grid_num; |
| 286 | mat = Eigen::MatrixXd::Zero(dimen, dimen); |
| 287 | |
| 288 | // std::cout << "First id: "; |
| 289 | // for (auto ids : first_ids) |
| 290 | // for (auto id : ids) |
| 291 | // std::cout << id << ", "; |
| 292 | // std::cout << "" << std::endl; |
| 293 | |
| 294 | // std::cout << "Second id: "; |
| 295 | // for (auto ids : second_ids) |
| 296 | // for (auto id : ids) |
| 297 | // std::cout << id << ", "; |
| 298 | // std::cout << "" << std::endl; |
| 299 | |
| 300 | // Virtual depot to drones |
| 301 | for (int i = 0; i < drone_num; ++i) { |
| 302 | mat(0, 1 + i) = -1000; |
| 303 | mat(1 + i, 0) = 1000; |
| 304 | } |
| 305 | // Virtual depot to grid |
| 306 | for (int i = 0; i < grid_num; ++i) { |
| 307 | mat(0, 1 + drone_num + i) = 1000; |
| 308 | mat(1 + drone_num + i, 0) = 0; |
| 309 | } |
| 310 | // Costs between drones |
| 311 | for (int i = 0; i < drone_num; ++i) { |
| 312 | for (int j = 0; j < drone_num; ++j) { |
| 313 | mat(1 + i, 1 + j) = 10000; |
| 314 | } |
| 315 | } |
| 316 | |
| 317 | // Costs from drones to grid |
| 318 | for (int i = 0; i < drone_num; ++i) { |
| 319 | for (int j = 0; j < grid_num; ++j) { |
| 320 | double cost = getCostDroneToGrid(positions[i], grid_ids[j], first_ids[i]); |
| 321 | mat(1 + i, 1 + drone_num + j) = cost; |
| 322 | mat(1 + drone_num + j, 1 + i) = 0; |
| 323 | } |
| 324 | } |
| 325 | // Costs between grid |
| 326 | for (int i = 0; i < grid_num; ++i) { |
| 327 | for (int j = i + 1; j < grid_num; ++j) { |
| 328 | double cost = getCostGridToGrid(grid_ids[i], grid_ids[j], first_ids, second_ids, drone_num); |
| 329 | mat(1 + drone_num + i, 1 + drone_num + j) = cost; |
| 330 | mat(1 + drone_num + j, 1 + drone_num + i) = cost; |
| 331 | } |
| 332 | } |
| 333 | |
| 334 | // Diag |
no test coverage detected