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); ,添加代碼:遍歷所有的task,將charge_task_id設置為最新一個數字,將charge_task_priority設置為:在task.type值為1的任務中,按順序排序
时间: 2024-02-24 21:53:45 浏览: 44
好的,你需要添加的代码如下所示:
```c++
int max_task_id = 0;
int max_charge_priority = 0;
for (int k = 0; k < tasks.size(); k++) {
if (tasks[k].task_id_ > max_task_id) {
max_task_id = tasks[k].task_id_;
}
if (tasks[k].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);
```
这个代码会遍历所有的任务,并找到当前最大的任务ID和最大的充电任务优先级。然后,将新的充电任务的ID设置为最大任务ID加1,优先级设置为最大充电任务优先级加1。最后,使用这些值创建一个新的充电任务。
相关问题
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; } } } },有錯誤,修改一下
在这段代码中,需要对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的计算移到了任务创建的内部,以避免创建重复的任务。
class Charge { public: Charge(int id_ ,int charge_x_,int charge_y_ ,bool charge_available_); int id; // 充電站ID int charge_x, charge_y; // 充電站位置 bool charge_available; //充電站是否可用; void setavailable( bool available ); std::vector<Charge> charges; };,if (agvs[i].current_x == agvs[i].end_x_ && agvs[i].current_y == agvs[i].end_y_)//如果到達充電站 { agvs[i].setbattery(100); agvs[i].setAvailable(true);//小車設置為可用 tasks[completed_task_index].completed = 2;//任務完成 scheduler.assign_task_to_agv(tasks, agvs); },增加代碼:充電站變爲可用
可以在`Charge`类中添加一个`setAvailable`函数来设置充电站的可用状态。修改后的代码如下:
```
class Charge {
public:
Charge(int id_, int charge_x_, int charge_y_, bool charge_available_);
int id; // 充電站ID
int charge_x, charge_y; // 充電站位置
bool charge_available; // 充電站是否可用
void setAvailable(bool available); // 设置充电站的可用状态
std::vector<Charge> charges;
};
void Charge::setAvailable(bool available) {
charge_available = available;
}
```
然后在上述代码中,当小车到达充电站时,可以通过充电站的ID找到对应的充电站,并将其设为可用。修改后的代码如下:
```
if (agvs[i].current_x == agvs[i].end_x_ && agvs[i].current_y == agvs[i].end_y_) {
agvs[i].setbattery(100);
agvs[i].setAvailable(true);
tasks[completed_task_index].completed = 2;
for (int j = 0; j < charges.size(); j++) {
if (agvs[i].end_x_ == charges[j].charge_x && agvs[i].end_y_ == charges[j].charge_y) {
charges[j].setAvailable(true); // 充电站变为可用
break;
}
}
scheduler.assign_task_to_agv(tasks, agvs);
}
```