添加yaml文件
This commit is contained in:
parent
1058f37be6
commit
4474a33cba
@ -2,32 +2,33 @@ import random
|
||||
import math
|
||||
import matplotlib.pyplot as plt
|
||||
import matplotlib.patches as patches
|
||||
|
||||
import yaml
|
||||
# 固定随机种子,便于复现
|
||||
random.seed(42)
|
||||
|
||||
num_iterations = 100000
|
||||
|
||||
# ---------------------------
|
||||
# 参数设置
|
||||
# ---------------------------
|
||||
H = 20 # 区域高度,网格点之间的距离为25m(单位距离)
|
||||
W = 25 # 区域宽度
|
||||
k = 1 # 系统数量(车-巢-机系统个数)
|
||||
num_iterations = 1000000 # 蒙特卡洛模拟迭代次数
|
||||
with open('params.yml', 'r', encoding='utf-8') as file:
|
||||
params = yaml.safe_load(file)
|
||||
|
||||
# 时间系数(单位:秒,每个网格一张照片)
|
||||
flight_time_factor = 3 # 每张照片对应的飞行时间,无人机飞行速度为9.5m/s,拍摄照片的时间间隔为3s
|
||||
comp_uav_factor = 5 # 无人机上每张照片计算时间,5s
|
||||
trans_time_factor = 0.3 # 每张照片传输时间,0.3s
|
||||
car_move_time_factor = 2 * 50 # TODO 汽车每单位距离的移动时间,2s,加了一个放大因子
|
||||
comp_bs_factor = 5 # 机巢上每张照片计算时间
|
||||
H = params['H']
|
||||
W = params['W']
|
||||
k = params['num_cars']
|
||||
|
||||
# 其他参数
|
||||
flight_energy_factor = 0.05 # 单位:分钟/张
|
||||
comp_energy_factor = 0.05 # 计算能耗需要重新估计
|
||||
trans_energy_factor = 0.0025
|
||||
battery_capacity = 10 # 无人机只进行飞行,续航为30分钟
|
||||
# bs_energy_factor =
|
||||
# car_energy_factor =
|
||||
|
||||
flight_time_factor = params['flight_time_factor']
|
||||
comp_time_factor = params['comp_time_factor']
|
||||
trans_time_factor = params['trans_time_factor']
|
||||
car_time_factor = params['car_time_factor']
|
||||
bs_time_factor = params['bs_time_factor']
|
||||
|
||||
flight_energy_factor = params['flight_energy_factor']
|
||||
comp_energy_factor = params['comp_energy_factor']
|
||||
trans_energy_factor = params['trans_energy_factor']
|
||||
battery_energy_capacity = params['battery_energy_capacity']
|
||||
|
||||
# ---------------------------
|
||||
# 蒙特卡洛模拟,寻找最佳方案
|
||||
@ -59,42 +60,19 @@ for iteration in range(num_iterations):
|
||||
c2 = col_boundaries[j + 1]
|
||||
d = (r2 - r1) * (c2 - c1) # 任务的照片数量(矩形面积)
|
||||
|
||||
# # 每个任务随机生成卸载比率 ρ ∈ [0,1]
|
||||
# rho = random.random()
|
||||
# # rho = 0.1
|
||||
|
||||
# # 计算各个阶段时间
|
||||
# flight_time = flight_time_factor * d
|
||||
# comp_time = comp_uav_factor * rho * d
|
||||
# trans_time = trans_time_factor * (1 - rho) * d
|
||||
# comp_bs_time = comp_bs_factor * (1 - rho) * d
|
||||
|
||||
# # 检查无人机电池约束:
|
||||
# # 飞行+计算+传输能耗需不超过电池容量
|
||||
# flight_energy = flight_energy_factor * d
|
||||
# comp_energy = comp_energy_factor * rho * d
|
||||
# trans_energy = trans_energy_factor * (1 - rho) * d
|
||||
# total_uav_energy = flight_energy + comp_energy + trans_energy
|
||||
# # 无人机计算与传输时间不超过飞行时间
|
||||
# if (total_uav_energy > battery_capacity) or (comp_time + trans_time > flight_time):
|
||||
# # TODO 时间约束的rho上界是个常数0.57,如果区域划分定了,rho直接取上界即可,可以数学证明
|
||||
# valid_partition = False
|
||||
# break
|
||||
|
||||
# 求解rho
|
||||
rho_time_limit = (flight_time_factor - trans_time_factor) / \
|
||||
(comp_uav_factor - trans_time_factor)
|
||||
rho_energy_limit = (battery_capacity - flight_energy_factor * d - trans_energy_factor * d) / \
|
||||
(comp_time_factor - trans_time_factor)
|
||||
rho_energy_limit = (battery_energy_capacity - flight_energy_factor * d - trans_energy_factor * d) / \
|
||||
(comp_energy_factor * d - trans_energy_factor * d)
|
||||
if rho_energy_limit < 0:
|
||||
valid_partition = False
|
||||
break
|
||||
rho = min(rho_time_limit, rho_energy_limit)
|
||||
print(rho)
|
||||
flight_time = flight_time_factor * d
|
||||
comp_time = comp_uav_factor * rho * d
|
||||
comp_time = comp_time_factor * rho * d
|
||||
trans_time = trans_time_factor * (1 - rho) * d
|
||||
comp_bs_time = comp_bs_factor * (1 - rho) * d
|
||||
bs_time = bs_time_factor * (1 - rho) * d
|
||||
|
||||
# 计算任务矩形中心,用于后续车辆移动时间计算
|
||||
center_r = (r1 + r2) / 2.0
|
||||
@ -107,7 +85,7 @@ for iteration in range(num_iterations):
|
||||
'flight_time': flight_time,
|
||||
'comp_time': comp_time,
|
||||
'trans_time': trans_time,
|
||||
'comp_bs_time': comp_bs_time,
|
||||
'bs_time': bs_time,
|
||||
'center': (center_r, center_c)
|
||||
})
|
||||
if not valid_partition:
|
||||
@ -140,18 +118,18 @@ for iteration in range(num_iterations):
|
||||
if tasks:
|
||||
# 车辆从区域中心到第一个任务中心
|
||||
car_time = math.hypot(tasks[0]['center'][0] - region_center[0],
|
||||
tasks[0]['center'][1] - region_center[1]) * car_move_time_factor
|
||||
tasks[0]['center'][1] - region_center[1]) * car_time_factor
|
||||
# 依次经过任务中心
|
||||
for j in range(1, len(tasks)):
|
||||
prev_center = tasks[j - 1]['center']
|
||||
curr_center = tasks[j]['center']
|
||||
car_time += math.hypot(curr_center[0] - prev_center[0],
|
||||
curr_center[1] - prev_center[1]) * car_move_time_factor
|
||||
curr_center[1] - prev_center[1]) * car_time_factor
|
||||
else:
|
||||
car_time = 0
|
||||
|
||||
# 机巢的计算时间
|
||||
total_bs_time = sum(task['comp_bs_time'] for task in tasks)
|
||||
total_bs_time = sum(task['bs_time'] for task in tasks)
|
||||
T_k = max(total_flight_time + car_time, total_bs_time)
|
||||
T_k_list.append(T_k)
|
||||
|
||||
@ -209,7 +187,7 @@ if best_solution is not None:
|
||||
for i, task in enumerate(tasks_sorted, 1):
|
||||
# 计算车辆移动时间
|
||||
car_time = math.hypot(task['center'][0] - current_pos[0],
|
||||
task['center'][1] - current_pos[1]) * car_move_time_factor
|
||||
task['center'][1] - current_pos[1]) * car_time_factor
|
||||
total_car_time += car_time
|
||||
|
||||
# 更新当前位置
|
||||
@ -249,7 +227,7 @@ if best_solution is not None:
|
||||
print(f" -- 飞行能耗: {task['d'] * flight_energy_factor:.2f} 分钟")
|
||||
print(f" -- 计算能耗: {task['d'] * comp_energy_factor:.2f} 分钟")
|
||||
print(f" -- 传输能耗: {task['d'] * trans_energy_factor:.2f} 分钟")
|
||||
print(f" 基站计算时间: {task['comp_bs_time']:.2f} 秒")
|
||||
print(f" 基站计算时间: {task['bs_time']:.2f} 秒")
|
||||
else:
|
||||
print("该系统没有分配任务")
|
||||
print("-" * 50)
|
||||
|
16
params.yml
Normal file
16
params.yml
Normal file
@ -0,0 +1,16 @@
|
||||
H : 20 # 区域高度,网格点之间的距离为25m(单位距离)
|
||||
W : 25 # 区域宽度
|
||||
num_cars : 1 # 系统数量(车-巢-机系统个数)
|
||||
|
||||
# 时间系数(单位:秒,每个网格一张照片)
|
||||
flight_time_factor : 3 # 每张照片对应的飞行时间,无人机飞行速度为9.5m/s,拍摄照片的时间间隔为3s
|
||||
comp_time_factor : 5 # 无人机上每张照片计算时间,5s
|
||||
trans_time_factor : 0.3 # 每张照片传输时间,0.3s
|
||||
car_time_factor : 100 # TODO 汽车每单位距离的移动时间,2s,加了一个放大因子50
|
||||
bs_time_factor : 5 # 机巢上每张照片计算时间
|
||||
|
||||
# 其他参数
|
||||
flight_energy_factor : 0.05 # 单位:分钟/张
|
||||
comp_energy_factor : 0.05 # TODO 计算能耗需要重新估计
|
||||
trans_energy_factor : 0.0025
|
||||
battery_energy_capacity : 20 # 无人机只进行飞行,续航为30分钟
|
Loading…
Reference in New Issue
Block a user