if (agvs[i].getBattery() < safe_battery_level) { bool has_charge_task = false; for (int k = 0; k < tasks.size(); k++) { if (tasks[k].a_id == agvs[i].id_ && tasks[k].Task_type == 1) { has_charge_task = true; break; }} if (!has_charge_task ) { for (int j = 0; j < charges.size(); j++) { if (charges[j].charge_available == true) { charges[j].setavailable(false); for (int k = 0; k < tasks.size(); k++) { if (tasks[k].id > max_task_id) { max_task_id = tasks[k].id; } if (tasks[k].Task_type == 1 && tasks[k].priority > max_charge_priority) { max_charge_priority = tasks[k].priority; } } charge_task_id = max_task_id + 1; charge_task_priority = max_charge_priority + 1; Task charge_task(charge_task_id, agvs[i].current_x, agvs[i].current_y, charges[j].charge_x, charges[j].charge_y, charge_task_priority, 0, agvs[i].id_, 1); tasks.push_back(charge_task); break; } } } },有錯誤,修改一下
时间: 2024-02-14 20:05:21 浏览: 74
在这段代码中,需要对AGV进行充电的情况下,会创建一个充电任务,并将其加入到任务列表中。如果AGV已经有了充电任务,就不需要再创建新的任务了。但是,在检查是否存在充电任务时,代码有一个问题。如果一个AGV已经有了一个低优先级的充电任务,那么这个代码块将会创建一个新的高优先级的充电任务。这可能会导致任务列表中存在多个重复的充电任务。因此,我们需要修改代码,以避免这种情况的发生。修改后的代码如下所示:
```
if (agvs[i].getBattery() < safe_battery_level) {
bool has_charge_task = false;
for (int k = 0; k < tasks.size(); k++) {
if (tasks[k].a_id == agvs[i].id_ && tasks[k].Task_type == 1) {
has_charge_task = true;
break;
}
}
if (!has_charge_task) {
bool has_low_priority_charge_task = false;
for (int k = 0; k < tasks.size(); k++) {
if (tasks[k].a_id == agvs[i].id_ && tasks[k].Task_type == 1 && tasks[k].priority < charge_task_priority) {
has_low_priority_charge_task = true;
break;
}
}
if (!has_low_priority_charge_task) {
for (int j = 0; j < charges.size(); j++) {
if (charges[j].charge_available == true) {
charges[j].setavailable(false);
charge_task_priority++;
charge_task_id++;
Task charge_task(charge_task_id, agvs[i].current_x, agvs[i].current_y, charges[j].charge_x, charges[j].charge_y, charge_task_priority, 0, agvs[i].id_, 1);
tasks.push_back(charge_task);
break;
}
}
}
}
}
```
在新代码中,我们添加了一个新的变量`has_low_priority_charge_task`,用于检查是否存在低优先级的充电任务。如果存在这样的任务,我们就不需要创建新的高优先级任务了。我们还将充电任务的优先级和ID的计算移到了任务创建的内部,以避免创建重复的任务。
阅读全文