2026电工杯b题第二问完整可执行代码+高清可视化结果图
- 问题2:服务站选址与规模优化
- 1预测的第5年末每个小区老人数量与消费约束的服务需求量,考虑服务站选址与规模优化问题,相关要求说明如下:
- :小型\((服务≤1000人次/日)\))、中型\((服务≤2000人次/日)\)、大型\((服务≤3000人次/日)\),对应建设成本与运营成本见附件3;
- :10个小区中的任意若干个(仅限小区内部,小区间距离见附件4);
- :\(有效服务半径≤1000米\);超出距离不产生有效服务需求。
- :至少享受一项养老服务的老年人数占老年总人口的比例。
- :根据附件5的评分规则(距离、服务响应、价格)计算,取值范围0.6~1。
- :等于理论需求人次×服务满意度
- 假设总建设预算不超过120万元,服务站建设需满足上述要求,建立优化模型,确定区域内需建设服务站数量、位置、规模,使得服务覆盖率和服务满意度尽可能高。
- 设计求解算法,说明算法的主要步骤,并分析算法的时间复杂度。
- 给出最优的站点数量、位置(哪个小区)、规模(大/中/小)及每个站点覆盖的小区,计算此时每个服务站预计年度利润、服务覆盖率和每个小区老人满意度,指出至少3点模型的局限性,并提出至少一种改进方向。
求解思路
- 步骤1、数据准备。读取问题1输出的第5年末各小区老人数量、老年总人口、考虑消费约束后的各小区各服务项目需求量和。读取附件3中服务站规模集合,小型建设成本万元、日均固定管理成本元/日、日最大服务人次,中型建设成本万元、日均固定管理成本元/日、日最大服务人次,大型建设成本万元、日均固定管理成本元/日、日最大服务人次。设置建设投资按年等额折旧、无残值,总建设预算万元。读取附件4中10个小区之间距离矩阵。读取附件5满意度评分公式及分段规则。保留附件2服务价格与支出数据,用于年度利润计算。
这里仅展示部分内容:
通过网盘分享的文件:电工杯赛前资料
链接: https://pan.baidu.com/s/1RzAGtPGv_KrLWQpRwZrDlA 提取码: 6666
--来自百度网盘超级会员v6的分享
total_zilhi_0 = df_base['自理老人'].sum() total_ban_0 = df_base['半失能老人'].sum() total_shi_0 = df_base['失能老人'].sum() total_old_0 = total_zilhi_0 + total_ban_0 + total_shi_0 ratio_new = {0: total_zilhi_0 / total_old_0, 1: total_ban_0 / total_old_0, 2: total_shi_0 / total_old_0} N_results = {c: {} for c in communities} for idx, row in df_base.iterrows(): c = row['小区编号'] N0 = np.array([row['自理老人'], row['半失能老人'], row['失能老人']], dtype=float) N_results[c][0] = N0.copy() for t in range(5): Nt = N_results[c][t] total_t = Nt.sum() new_total = g_rate * total_t A0 = new_total * ratio_new[0] A1 = new_total * ratio_new[1] A2 = new_total * ratio_new[2] N_next_0 = (1 - d_rate) * (1 - p01) * Nt[0] + A0 N_next_1 = (1 - d_rate) * (p01 * Nt[0] + (1 - p12) * Nt[1]) + A1 N_next_2 = (1 - d_rate) * (p12 * Nt[1] + Nt[2]) + A2 N_results[c][t + 1] = np.array([N_next_0, N_next_1, N_next_2]) # 第5年末各小区各类老人数量 N5 = {} for c in communities: N5[c] = N_results[c][5] # 消费约束削减系数 lambda_results = {} for idx, row in df_base.iterrows(): c = row['小区编号'] income = row['人均月收入'] for k in range(3): E_theory = sum(demand_per_person[m][k] * service_price[m] for m in services) U_k = beta[k] * income lam = min(1.0, U_k / E_theory) if E_theory > 0 else 1.0 lambda_results[(c, k)] = lam # 第5年末各小区各服务有效月需求次数(汇总三类老人) Q_eff = {} # Q_eff[(c, m)] = 该小区该服务月有效需求总次数 for c in communities: vals5 = N5[c] for m in services: total_q = 0 for k in range(3): Nk = round(vals5[k]) lam = lambda_results[(c, k)] adjusted_r = round(lam * demand_per_person[m][k]) total_q += Nk * adjusted_r # 应用需求缩放因子以测试更低需求下的可行性 Q_eff[(c, m)] = int(round(total_q * demand_scale)) # 各小区老年总人口(第5年末) N5_total = {} for c in communities: N5_total[c] = round(N5[c].sum()) # 各小区月总有效需求次数 Q_eff_total = {} for c in communities: Q_eff_total[c] = sum(Q_eff[(c, m)] for m in services)