2025年第十五届亚太地区大学生数学建模竞赛之五岳杯量子计算数学建模挑战赛

复制代码
import numpy as np
import kaiwu.optimizer as optimizer
import kaiwu.solver as solver
import matplotlib.pyplot as plt
# ====================== 步骤1:构建Qubo模型的Q矩阵(自动驾驶场景) ======================
# 变量数:200(100个路径节点+50个传感器+50个算力任务)
n_vars = 200
# 初始化Q矩阵(对称矩阵,Qubo模型核心)
Q = np.zeros((n_vars, n_vars))
# 1. 填充对角元(对应单个变量的基础贡献:时间+能耗+风险)
# 模拟路径节点时间贡献(a_i)、传感器能耗(c_j)、算力任务风险(e_l)
np.random.seed(42)  # 固定随机种子保证可复现
a_i = np.random.uniform(1, 10, size=100)  # 路径节点基础时间
c_j = np.random.uniform(0.5, 5, size=50)  # 传感器基础能耗
e_l = np.random.uniform(2, 8, size=50)   # 算力任务基础风险
# 权重(时间w1=0.4,能耗w2=0.3,风险w3=0.3)
w1, w2, w3 = 0.4, 0.3, 0.3
# 填充对角元:前100个为路径节点,100-150为传感器,150-200为算力任务
Q[:100, :100] = np.diag(w1 * a_i)
Q[100:150, 100:150] = np.diag(w2 * c_j)
Q[150:200, 150:200] = np.diag(w3 * e_l)
# 2. 填充非对角元(变量间协同贡献:节点转移时间、传感器协同能耗、任务风险叠加)
# 模拟节点转移时间b_ij(仅填充前100×100区域,随机生成对称矩阵)
b_ij = np.random.uniform(0.1, 2, size=(100, 100))
b_ij = (b_ij + b_ij.T) / 2  # 保证对称
Q[:100, :100] += w1 * b_ij / 2  # 非对角元需除以2避免重复计算
# 3. 添加约束惩罚项(算力上限约束)
lambda1 = 30  # 惩罚系数(实验验证的平衡值)
C_max = 50    # 算力上限
g_l = np.random.uniform(0.5, 2, size=50)  # 算力任务占用量
# 惩罚项展开:λ*(Σg_l x_l - C_max)² = λ*(Σg_l²x_l² + 2Σg_l g_p x_l x_p - 2C_maxΣg_l x_l + C_max²)
# 因x_l是0-1变量,x_l²=x_l,故惩罚项融入Q矩阵:
penalty_diag = lambda1 * (g_l **2 - 2 * C_max * g_l)  # 对角元惩罚
penalty_offdiag = lambda1 * 2 * np.outer(g_l, g_l)    # 非对角元惩罚
Q[150:200, 150:200] += np.diag(penalty_diag)
Q[150:200, 150:200] += penalty_offdiag / 2  # 非对角元除以2
# ====================== 步骤2:初始化Qubo优化器 ======================
# 加载Q矩阵到优化器
qubo_opt = optimizer.QuboOptimizer()
qubo_opt.set_qubo_matrix(Q)  # 传入200×200的Q矩阵
# ====================== 步骤3:配置模拟退火求解器 ======================
# 初始化求解器
sa_solver = solver.SimulatedAnnealingSolver()
# 设置核心参数(匹配竞赛要求)
sa_solver.set_params(
    temperature_decay=0.95,  # 退火温度衰减系数
    max_iter=10000,          # 迭代次数
    init_solution_method="random"  # 初始解生成方法:随机
)
# ====================== 步骤4:执行求解 ======================
# 传入优化器求解
result = sa_solver.solve(qubo_opt)
# ====================== 步骤5:结果解析与可视化 ======================
# 提取核心结果
optimal_solution = result["optimal_solution"]  # 最优解(200维0-1数组)
optimal_value = result["optimal_value"]        # 最优目标函数值
iteration_curve = result["iteration_curve"]    # 迭代过程目标函数值曲线
# 输出关键信息
print("===== 求解结果 =====")
print(f"最优目标函数值:{optimal_value:.4f}")
print("最优解(前10个变量):", optimal_solution[:10])
# 解析最优解对应的实际决策(示例)
selected_nodes = np.where(optimal_solution[:100]==1)[0]  # 选中的路径节点
selected_sensors = np.where(optimal_solution[100:150]==1)[0] + 100  # 开启的传感器
print(f"选中的路径节点数量:{len(selected_nodes)},节点索引:{selected_nodes[:5]}")
print(f"开启的传感器数量:{len(selected_sensors)},传感器索引:{selected_sensors[:5]}")
# 绘制迭代曲线
plt.figure(figsize=(10, 6))
plt.plot(iteration_curve, label="目标函数值")
plt.xlabel("迭代次数")
plt.ylabel("目标函数值")
plt.title("模拟退火求解迭代过程")
plt.legend()
plt.grid(True)
plt.savefig("iteration_curve.png")
plt.show()
相关推荐
顾安r3 小时前
11.20 脚本网页 数学分支
算法·数学建模·html
您好啊数模君20 小时前
数学建模优秀论文算法-Savitzky-Golay滤波
数学建模·滤波·savitzkygolay滤波
AI科技星21 小时前
圆柱螺旋运动方程的一步步求导与实验数据验证
开发语言·数据结构·经验分享·线性代数·算法·数学建模
您好啊数模君1 天前
数学建模优秀论文算法-面板数据模型(panel data)
数学建模·面板数据模型·数据面板模型·panel data
C灿灿数模1 天前
2025五岳量子杯计算数学建模详细思路模型论文:光学量子技术
数学建模·量子计算
您好啊数模君2 天前
数学建模优秀论文算法-实时动态网络的dijkstra算法
数学建模·最短路·dijkstra
这张生成的图像能检测吗2 天前
(论文速读)基于迁移学习的大型复杂结构冲击监测
人工智能·数学建模·迁移学习·故障诊断·结构健康监测·传感器应用·加权质心算法
您好啊数模君2 天前
数学建模优秀论文算法-LSTM算法
数学建模·lstm·lstm神经网络
t198751282 天前
大规模MIMO系统中最优波束形成编码的解析
数学建模