figure(); hold on; for n = 1:n_cars t_arrival = arrival_time(n); t_departure = departure_time(n); t_start = ceil(t_arrival / time_step) + 1; t_end = floor(t_departure / time_step) + 1; soc_arrival = energy_at_arrival(n) / bat_cap; soc_departure = soc_min; E_idx = round(soc_arrival * length(E)) + 1; step = t_start; while step <= t_end if path(n, step) == 1 if step == t_start soc = soc_arrival; else soc = soc_departure + (charge_power / bat_cap) * (step - k - 1) * time_step / 3600; end t = (step - 1) * time_step / 3600; plot([t, t+time_step/3600], [soc, soc], 'r', 'LineWidth', 2); hold on; plot([t, t], [soc, soc-departure_time(n)+arrival_time(n)], 'r-', 'LineWidth', 2); k = step; end soc_departure = max(soc_min, soc_arrival - charge_demand(n) / bat_cap); step = step + 1; end end xlabel('Time (h)'); ylabel('State of Charge'); title('Charging Schedule'); grid on; hold on;为什么无法生成曲线
时间: 2024-02-04 16:03:16 浏览: 31
根据代码,生成曲线的过程是在一个 for 循环中进行的,循环次数是 n_cars。因此,无法生成曲线可能是由于以下原因之一:
1. 变量 n_cars 的值为 0,即没有车辆需要生成曲线;
2. 变量 E 的值没有被初始化,导致无法计算 soc_arrival;
3. 变量 path 的值没有被初始化,导致无法判断需要绘制的路径;
4. 变量 charge_power、bat_cap、time_step、charge_demand、arrival_time、departure_time、energy_at_arrival、soc_min 的值没有被正确设置;
5. 曲线被生成,但是没有被正确显示。
需要检查以上原因,找出造成无法生成曲线的具体原因。
相关问题
for i = 2:1000 arrival_time = arrival_times(i); service_time = service_times(i); if arrival_time >= crane_busy_until(i - 1) waiting_time = 0; crane_busy_until = arrival_time + service_time; else waiting_time = crane_busy_until(i - 1) - arrival_time; crane_busy_until = crane_busy_until(i - 1) + service_time; end waiting_times(i) = waiting_time; total_time_in_port(i) = waiting_time + service_time; end
这段代码看起来像是模拟一个港口的装卸货物过程,其中arrival_times是货船到达的时间,service_times是装卸货物需要的时间,waiting_times是每艘货船等待的时间,total_time_in_port是每艘货船在港口停留的总时间。
在循环中,首先获取当前货船的到达时间和需要的服务时间。然后判断当前货物是否需要等待,如果上一艘货船的装卸已经完成,那么当前货船就可以直接进行装卸,等待时间为0。如果上一艘货船的装卸还未完成,那么当前货船需要等待上一艘货船完成后再进行装卸,等待时间为上一艘货船的装卸结束时间减去当前货船的到达时间。最后将等待时间和总时间存储到相应的数组中。
def calCrowdcarCost(crowd_route_list, model): cost_of_distance = 0 crowd_wait_time = 0 model.crowdcarcost = 0 for route in crowd_route_list: timetable = [] for i in range(len(route)): if i == 0: depot_id = route[i] next_node_id = route[i+1] cost_of_distance = model.distance_matrix[depot_id, next_node_id] travel_time = int(model.distance_matrix[depot_id, next_node_id]) departure = max(0, model.demand_dict[next_node_id].start_time - travel_time) if departure == 0: crowd_wait_time = travel_time - model.demand_dict[next_node_id].start_time timetable.append((departure, departure)) elif 1 <= i <= len(route)-2: last_node_id = route[i-1] current_node_id = route[i] current_node = model.demand_dict[current_node_id] travel_time = int(model.distance_matrix[last_node_id, current_node_id]) cost_of_distance += model.distance_matrix[last_node_id, current_node_id] arrival = max(timetable[-1][1]+travel_time, current_node.start_time) if arrival == timetable[-1][1]+travel_time: crowd_wait_time += timetable[-1][1]+travel_time - current_node.start_time else: break model.crowdcarcost += model.fixcost + model.percost * cost_of_distance return model.crowdcarcost, crowd_wait_time 在这一段代码中我想知道每个点的等待时间总和,等待时间等于到达这个的时间减去它的时间窗上限
在这段代码中,你已经计算了每个点的等待时间,它们被累加到了`crowd_wait_time`变量中。如果你想得到每个点的等待时间总和,可以在循环中添加一个变量来记录。以下是修改后的代码:
```python
def calCrowdcarCost(crowd_route_list, model):
cost_of_distance = 0
crowd_wait_time = 0
point_wait_time = {} # 记录每个点的等待时间
model.crowdcarcost = 0
for route in crowd_route_list:
timetable = []
for i in range(len(route)):
if i == 0:
depot_id = route[i]
next_node_id = route[i+1]
cost_of_distance = model.distance_matrix[depot_id, next_node_id]
travel_time = int(model.distance_matrix[depot_id, next_node_id])
departure = max(0, model.demand_dict[next_node_id].start_time - travel_time)
if departure == 0:
crowd_wait_time = travel_time - model.demand_dict[next_node_id].start_time
point_wait_time[next_node_id] = travel_time - model.demand_dict[next_node_id].start_time
timetable.append((departure, departure))
elif 1 <= i <= len(route)-2:
last_node_id = route[i-1]
current_node_id = route[i]
current_node = model.demand_dict[current_node_id]
travel_time = int(model.distance_matrix[last_node_id, current_node_id])
cost_of_distance += model.distance_matrix[last_node_id, current_node_id]
arrival = max(timetable[-1][1]+travel_time, current_node.start_time)
if arrival == timetable[-1][1]+travel_time:
wait_time = timetable[-1][1]+travel_time - current_node.start_time
crowd_wait_time += wait_time
point_wait_time[current_node_id] = wait_time
else:
break
model.crowdcarcost += model.fixcost + model.percost * cost_of_distance
return model.crowdcarcost, crowd_wait_time, point_wait_time
```
这样,`point_wait_time`字典中的每个键值对代表一个点的等待时间,其中键为点的ID,值为该点的等待时间。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)