2022年深圳杯数学建模B题基于用电可靠性的配电网规划解题全过程文档及程序

2022年深圳杯数学建模

B题 基于用电可靠性的配电网规划

原题再现:

  如果一批用户变压器(下面简称用户)仅由一个电源变电站(下面简称电源)供电,称为单供。这时配电网由电线和开关联接成以电源为根节点的树状结构图,使得每个用户所在顶点都在图中有路(电线)联接到电源根节点。
  一些电力用户一旦发生停电,无论停电时间长短,都会带来较大损失,降低用电满意度。因此,定义
  用户用电可靠性:指定时间段内不因配电网故障停电或限电的概率。
  为了提升用户用电可靠性,可在两个电源的单供配电网之间建立联络线,并增设开关和扩充电源可供电功率,形成双电源供电配电网(简称双供配电网,如下图所示)。
在这里插入图片描述
  开关设置原则:
  1. 配电网中开关(电源出线后开关除外)的设置必须使得网中某处发生故障时,通过开关隔离故障后,保持供电的用户需求功率之和最大化;
  2. 在网上任意一点到电源的所有路中,可以通过设置开关状态使得仅有一条是通路;
  3. 配电网中开关的设置包含但不限于以下情况:每个用户前端有开关,每个分岔点后端的每条支路上有开关,双供配电网的每条联络线上有开关。
  配电网设施可靠性单元划分及其可靠性:
  忽略电源至它的后端第一个开关部分,忽略用户至它的第一个前端开关部分,配电网设备可靠性(故障)单元由电源、用户、开关,以及仅含两个开关之间的路(下面称为故障单元路)构成。每个单元设备在指定时间段内正常运行的概率称为单元设备可靠性,它等于 1 减去该单元设备的故障率。
  双供配电网用户供电调度原则:
  (1) 满足一个用户全部需求功率,否则断开该用户;
  (2) 首先满足各自单供配电网内用户的需求;双供电源多余功率的分配优先提高
  全配电网供电功率总和,然后提升全配电网最低的用电可靠性。
  问题:
  1. 已知一个电源和一批用户的平面坐标、每个用户用电功率需求、每个设备单元建造费用(数据格式见附录)。设计建造费用最低的单供配电网供电所有用户,给出树状配电网的分叉点坐标,并计算该配电网中每个用户的用电可靠性。
  2. 已知两个电源和一批用户的平面坐标、每个用户用电功率需求、每个设备单元建造费用(数据格式见附录)。设计建造费用最低的两个单供配电网,使得每个用户都被供电。给出树状配电网的分叉点坐标,并计算该配电网中每个用户的用电可靠性。
  3. 在第 2 题结果的基础上,通过建立两个单供配电网之间的联络线,增设开关,并扩充电源可供电功率,形成双供配电网,以提高用户的用电可靠性。假设两个电源各自能扩充可供电功率 50%,建造双供配电网总花费上限为 X,求使得双供配电网中最低的用电可靠性达到最大的联络线和开关设计。画出联络线拓扑简略图,并计算双供配电网中每个用户的用电可靠性。
  4. 在第 2 题结果的基础上,通过建立两个单供配电网之间的联络线,增设开关,并扩充电源可供电功率形成双供配电网,以提高用户的用电可靠性。假设两个电源各自能扩充可供电功率 50%,设计建造总费用最低的双供配电网,使得双供配电网中每个用户的用电可靠性不低于 Y%。画出联络线拓扑简略图,并计算双供配电网中每个用户的用电可靠性。

在这里插入图片描述

整体求解过程概述(摘要)

  合理的配电网规划对电力系统的经济性与安全性有显著影响。为降低配电网建设成本、提高用户用电可靠性,本文提出了基于 TSP 的线路规划模型,给出了配电网联络线的规划方法以及用户用电可靠性的计算式。
  针对问题一,使用 k-means 聚类法将用户分配到不同的单元网络,建立了基于 TSP的单元网络连接模型,最后使用遗传算法求解得到系统的拓扑结构以及用户的用电可靠性。首先选定聚类数 k,以聚类中心作为分叉点,将不同分叉点的连接视为输电线路的建设,以干路线路经过分叉点的顺序作为解向量,由此建立基于 TSP 的线路规划模型,带入遗传算法求解得到对应的费用。通过设置不同的聚类数 k 求解得到对应的费用,通过分析得出最佳的聚类数为 k = 10,并给出了对应的系统拓扑结构与用户用电可靠性。
  针对问题二,首先计算每个用户到两电源的距离,并以“距离较近者优先”为依据将其划分为两个独立的配电系统,然后利用问题一的模型对两个配电系统分别求解得到其线路规划,从而给出总体的系统拓扑结构与用户用电可靠性,并对模型的参数做了分析。
  针对问题三,引入决策变量描述联络线的建设情况,以最低用户用电可靠性尽量大为目标,建立优化模型,利用产生随机解的方法得到较优解。通过假设联络线不交叉简化了模型,引入决策变量 ai, bi,以网络拓扑结构、费用上限和变量间的制约为约束条件,建立最优化模型。由于变量结构复杂,故采用生成大量随机解的方法求得了较优解,最后给出了系统拓扑结构与用户用电可靠性。最后对模型做了分析,指出最佳的费用上限为 X = 1.05 × 105。
  针对问题四,只需在问题三的基础上修改优化目标与部分约束条件即可。将优化目标调整为总费用尽量小,以网络拓扑结构、用户用电可靠性下限和变量间的制约为约束条件建立最优化模型,采用问题三的方法求解,得到系统拓扑结构与用户用电可靠性。最后对模型做了分析,得出最佳的用户用电可靠性下限为 Y % = 0.932。文章的最后总结了模型的优缺点与改进方向。

模型假设:

  1. 假设各种故障的发生是相互独立的;
  2. 不考虑地形因素,即线路的建设成本仅与线路长度有关;
  3. 假设功率的输送方向是单向的;
  4. 假设无重大自然灾害影响;
  5. 假设用户功率需求恒定。

问题分析:

问题一分析

  问题一已知电源、用户坐标及用户的功率需求,需要我们在总费用尽量小的前提下确定干路分叉点及用户的用电可靠性。首先可以采用 k-means 聚类方法将用户按照距离随机地聚为 k 类,即得到 k 个单元网络,以每一个类的平均位置 (Xi, Yi) 作为分叉点的坐标,单元网络内部采用直接相连的方式供电。对于单元网络之间的连接,可以通过构造 0-1 变量的方式,将其转化为旅行商问题,其目标为总费用最小。由于数据量过大,故可以采用智能算法求解得出整个干路的连接方式,进而可以通过概率论的知识求解出每个单元网络的可靠性。

问题二分析

  问题二要求用两个电源规划配电网络,需要在满足每个用户功率需求的条件下使得总费用最小。首先分别求解每个用户 i 到两个电源的距离 s1i, s2i,以距离的远近作为划分依据,将用户分配到两个配电系统中。对于每个独立的两个配电系统,可以直接利用问题一的模型求解,得到每个单元网络的分叉点以及用户用电可靠性。

问题三分析

  问题三在问题二建立的配电系统之间建立联络线,在总费用不超过给定上限 X 的前提下规划联络线,使得用户用电可靠性的最小值尽量大。可以通过引入用于描述联络线建设情况的决策变量 ai, bi,通过限定联络线不交叉简化模型复杂度,并确立价格约束和联络线的拓扑约束,以最低用户可靠性为目标函数建立最优化模型。由于决策变量的构造方式复杂,难以用常规优化算法求解,因此采用蒙特卡洛方法产生大量随机解的方法求得较优解。

问题四分析

  问题四在问题二的基础上建设联络线,在用户用电可靠性下限不低于给定 Y % 的前提下规划联络线,使得总费用尽量小。可以沿用问题三的模型,只需将问题三的优化目标调整为约束条件,将问题三的总费用约束调整为优化目标即可求解。

模型的建立与求解整体论文缩略图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

程序代码:(代码和文档not free)

论文及程序仅供学习与参考

%% 定值设定
L = 10;% 地图尺寸,单位: km
%% 初始化用户
N_user = 40;
% for ii=1:N_user
% user(ii).location = rand([1,2])*10;
% user(ii).power = 10*rand;
% user(ii).cluster_idx = [];
% end
k=10;
%%
%sub_net记录了每个类中的点,以及所求的中心点,以及每个类所含的数目
% [user, sub_net] = K_Means(user, N_user,k);
% dist=Get_dist(sub_net,k);
load('用户情况.mat');
load('城市节点坐标.mat');
load('用户坐标.mat');
load('user_net.mat');
[sub,num_dis]=Gene(dist);
for i=1:k
for j=1:size(sub_net(i).user_loc)
plot([sub_net(i).user_loc(j,1) sub_net(i).loc(1)],[sub_net(i).user_loc(j,2)
sub_net(i).loc(2)]);
end
end
price_total = Calc_Price(sub_net,num_dis);
Kekao=Calc_Kekao(sub_net,sub);
for ii=1:k
scatter(sub_net(ii).user_loc(:,1),sub_net(ii).user_loc(:,2),"filled")
hold on
end
%% 可靠度
function Ple = Calc_Kekao(sub_net,sub)
k=length(sub_net);
Ple=zeros(1,10);
for i=1:k %分别计算每个子模块的满意度
%根据所求的sub 确定每个子模块的顺序 是怎么样的 根据sub 依次计算满意度
now=sub(i)-1;
next=sub(i+1)-1;
%strs 表示当前节点和下一节点的距离
if i==1
strs=sqrt(sub_net(next).loc(1)^2+sub_net(next).loc(2)^2);
else
strs=sqrt((sub_net(next).loc(1)-sub_net(now).loc(1))^2+(sub_net(next).loc(2)-sub_net(now).loc(2))^2);
end
%man 表示下一节点内部的距离
man=0;
for g=1:size(sub_net(next).user_loc)
man=man+sqrt((sub_net(next).user_loc(g,1)-sub_net(next).loc(1))^2+(sub_net(next).user_loc(g,2)-sub_net(next).loc(2))^2);
end
%users表示下一节点的用户数量
users=sub_net(next).N_user;
%Manyi表示下一节点可靠性
% 线的可靠性 开关的可靠性 用户的可靠性
Manyi=(1-0.002*(man+strs))*(1-0.002)^(1+users)*(1-0.005)^(users);
Ple(1,i)=Manyi;
end
end
%% 总费用
function price_total = Calc_Price(sub_net,num_dis)
%%sub_每个单元网络
price.main_wire=325.7; % 千元/km
price.sub_wire=[188.6,239.4]; % 千元/km
price.main_switch = 56.8; % 千元/个
price.sub_switch = 2.6; % 千元/个
k=length(sub_net);
N_user = 0;
for ii=1:k
N_user = N_user+sum(sub_net(ii).N_user);
end
% 计算支路长度
for ii = 1:k % 遍历每个单元电路
len_sub_waire(ii)=0;
for jj=1:sub_net(ii).N_user %遍历单元电路中的每个用户
len_sub_waire(ii) = len_sub_waire(ii)+ norm(sub_net(ii).user_loc-sub_net(ii).loc);
end
end
is_sub_a = zeros(1,k);
is_sub_b = zeros(1,k);
for ii = 1:k % is_sub_a 保存各个单元网络的支路类型 A:1 B:0
is_sub_a(ii) = sub_net(ii).N_user <= 2;
is_sub_b(ii) = ~is_sub_a(ii);
end
price_total = num_dis*price.main_wire +... %干路造价
sum(len_sub_waire .* (price.sub_wire(1)*is_sub_a + price.sub_wire(2)*is_sub_b
))+...%支路路造价
price.main_switch * k + price.sub_switch * N_user; %开关造价
end % function
%% 聚类
function [user, sub_net] = K_Means(user, N_user,k)
dat=zeros(N_user,2);
for ii = 1:N_user
dat(ii,:)=user(ii).location;
end % for
idx = kmeans(dat,k);
for ii=1:N_user
user(ii).cluster_idx = idx(ii);
end % for
% sub_net.user_loc 中保存每个分类中各个用户的位置
for ii = 1:k
sub_net(ii).user_loc = [];
end % for
for ii=1:N_user
cluster_idx = user(ii).cluster_idx(1);
sub_net(cluster_idx).user_loc = [sub_net(cluster_idx).user_loc; user(ii).location];
end % for
% sub_net.N_user 保存每个单元电路的用户个数
for ii=1:k
sub_net(ii).N_user = size(sub_net(ii).user_loc,1);
end % for
% sub_net.loc 生成每个分叉点的位置
for ii = 1:k
sub_net(ii).loc = sum(sub_net(ii).user_loc(:,:))/sub_net(ii).N_user;
end % for6
end % function
%% 绘制每一个单元电路中的所有用户位置
function []=Draw_SubNet(sub_net,k)
for ii=1:k
scatter(sub_net(ii).user_loc(:,1),sub_net(ii).user_loc(:,2),'filled')
hold on
end
set(gca,'FontSize',14)
grid on
end
%% 遗传算法
function [subPath,gbest]=Gene(cities)
tStart = tic; % 算法计时器
cityNum = 11;
maxGEN = 500;
popSize = 100; % 遗传算法种群大小
crossoverProbabilty = 0.9; %交叉概率
mutationProbabilty = 0.5; %变异概率
gbest = Inf;
cities=cities';
% 计算上述生成的城市距离
distances = calculateDistance(cities);
% 生成种群,每个个体代表一个路径
pop = zeros(popSize, cityNum);
for i=1:popSize
pop(i,:) = randperm(cityNum);
end
pop=exchange(pop);
offspring = zeros(popSize,cityNum);
%保存每代的最小路劲便于画图
minPathes = zeros(maxGEN,1);
% GA算法
for gen=1:maxGEN
% 计算适应度的值,即路径总距离
[fval, sumDistance, minPath, maxPath] = fitness(distances, pop);
% 轮盘赌选择
tournamentSize=4; %设置大小
for k=1:popSize
% 选择父代进行交叉
tourPopDistances=zeros( tournamentSize,1);
for i=1:tournamentSize
randomRow = randi(popSize);
tourPopDistances(i,1) = sumDistance(randomRow,1);
end
% 选择最好的,即距离最小的
parent1 = min(tourPopDistances);
[parent1X,parent1Y] = find(sumDistance==parent1,1, 'first');
parent1Path = pop(parent1X(1,1),:);
for i=1:tournamentSize
randomRow = randi(popSize);
tourPopDistances(i,1) = sumDistance(randomRow,1);
end
parent2 = min(tourPopDistances);
[parent2X,parent2Y] = find(sumDistance==parent2,1, 'first');
parent2Path = pop(parent2X(1,1),:);
subPath = crossover(parent1Path, parent2Path, crossoverProbabilty);%交叉
subPath = mutate(subPath, mutationProbabilty);%变异
subPath=exchange(subPath);
offspring(k,:) = subPath(1,:);
minPathes(gen,1) = minPath;
end
fprintf('代数:%d 最短路径:%.2fKM \n', gen,minPath);
% 更新
pop = offspring;
% 画出当前状态下的最短路径
if minPath < gbest
gbest = minPath;
end
end

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/23119.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Transformer应用之构建聊天机器人(二)

四、模型训练解析 在PyTorch提供的“Chatbot Tutorial”中&#xff0c;关于训练提到了2个小技巧&#xff1a; 使用”teacher forcing”模式&#xff0c;通过设置参数“teacher_forcing_ratio”来决定是否需要使用当前标签词汇来作为decoder的下一个输入&#xff0c;而不是把d…

< ElementUi组件库: el-progress 进度条Bug及样式调整 >

ElementUi组件库&#xff1a; el-progress 进度条Bug及样式调整 &#x1f449; 前言&#x1f449; 一、实现原理> 修改 el-progress 进度条样式 及 渐变进度条样式 &#x1f449; 二、案例代码&#xff08;前言效果图案例&#xff09;> HTML代码> CSS代码 &#x1f44…

C++学习day--12 循环的应用,暴力破解密码和输出动图

第 1 节 职场修炼&#xff1a;程序员到底能干多久 现状&#xff1a; 很多程序员&#xff0c;过了 30 岁&#xff0c;纷纷转行。 原因&#xff1a; 1 &#xff09;薪资过万后&#xff0c;很难进一步提升 2 &#xff09;可替代性高&#xff0c;在新人面前&#xff0c;没有…

SolVES模型在生态系统服务社会价值评估中的运用

SolVES模型&#xff08;Social Values for Ecosystem Services&#xff09;全称为生态系统服务社会价值模型&#xff0c;是由美国地质勘探局和美国科罗拉多州立大学联合开发的一款地理信息系统应用程序&#xff0c;开发该模型的目的主要是对生态系统服务功能中的社会价值进行空…

全面了解Java连接MySQL的基础知识,快速实现数据交互

全面了解Java连接MySQL的基础知识&#xff0c;快速实现数据交互 1. 数据库的重要性2. MySQL数据库简介2.1 MySQL数据库的基本概念2.2 MySQL的基本组成部分包括服务器、客户端和存储引擎。2.3 安装MySQL数据库2.3.1安装MySQL数据库2.3.2 下载MySQL安装程序2.3.3 运行MySQL安装程…

帽子设计作品——蒸汽朋克的乌托邦,机械配件的幻想世界!

蒸汽朋克是由蒸汽steam和朋克punk两个词组成&#xff0c; 蒸汽代表着以蒸汽机作为动力的大型机械&#xff0c;而朋克则代表一种反抗、叛逆的精神。 蒸汽朋克的作品通常以蒸汽时代为背景&#xff0c;通过如新能源、新机械、新材料、新交通工具等新技术&#xff0c;使画面充满想…

理解深度可分离卷积

1、常规卷积 常规卷积中&#xff0c;连接的上一层一般具有多个通道&#xff08;这里假设为n个通道&#xff09;&#xff0c;因此在做卷积时&#xff0c;一个滤波器&#xff08;filter&#xff09;必须具有n个卷积核&#xff08;kernel&#xff09;来与之对应。一个滤波器完成一…

PMP课堂模拟题目及解析(第13期)

121. 项目经理、团队成员以及若干干系人共同参与一次风险研讨会。已经根据风险管理计划生成并提供一份风险报告。若要为各个项目风险进行优先级排序&#xff0c;现在必须执行哪一项分析&#xff1f; A. 定量风险分析 B. 根本原因分析 C. 偏差分析 D. 定性风险分析 122. …

带你手撕链式二叉树—【C语言】

前言&#xff1a; 普通二叉树的增删查改没有意义&#xff1f;那我们为什么要先学习普通二叉树呢&#xff1f; 给出以下两点理由&#xff1a; 1.为后面学习更加复杂的二叉树打基础。&#xff08;搜索二叉树、ALV树、红黑树、B树系列—多叉平衡搜索树&#xff09; 2.有很多二叉树…

Linux安装MongoDB数据库并内网穿透在外远程访问

文章目录 前言1.配置Mongodb源2.安装MongoDB数据库3.局域网连接测试4.安装cpolar内网穿透5.配置公网访问地址6.公网远程连接7.固定连接公网地址8.使用固定公网地址连接 转发自CSDN cpolarlisa的文章&#xff1a;Linux服务器安装部署MongoDB数据库 - 无公网IP远程连接「内网穿透…

亚马逊开放个人卖家验证入口?亚马逊卖家验证到底怎么搞?

亚马逊卖家账户的安全对于所有卖家来说都非常重要。如果卖家想要在亚马逊上长期稳定地发展&#xff0c;赚取更多的钱并推出更多热卖产品&#xff0c;就必须确保他们的亚马逊卖家账户安全&#xff0c;特别是一直存在的亚马逊账户验证问题。 近期&#xff0c;根据亚马逊官方披露的…

开发敏捷高效 | 云原生应用开发与运维新范式

5 月 18 日&#xff0c;腾讯云举办了 Techo Day 腾讯技术开放日&#xff0c;以「开箱吧&#xff01;腾讯云」为栏目&#xff0c;对外发布和升级了腾讯自研的一系列云原生产品和工具。其中&#xff0c;腾讯云开发者产品中心总经理刘毅围绕“开发敏捷高效”这一话题&#xff0c;分…

单体项目偶遇并发漏洞!短短一夜时间竟让老板蒸发197.83元

事先声明&#xff1a;以下故事基于真实事件而改编&#xff0c;如有雷同&#xff0c;纯属巧合~ 眼下这位正襟危坐的男子&#xff0c;名为小竹&#xff0c;他正是本次事件的主人公&#xff0c;也即将成为熊猫集团的被告&#xff0c;嗯&#xff1f;这究竟怎么一回事&#xff1f;欲…

手写简单的RPC框架(一)

一、RPC简介 1、什么是RPC RPC&#xff08;Remote Procedure Call&#xff09;远程过程调用协议&#xff0c;一种通过网络从远程计算机上请求服务&#xff0c;而不需要了解底层网络技术的协议。RPC它假定某些协议的存在&#xff0c;例如TPC/UDP等&#xff0c;为通信程序之间携…

PMP考试应该要如何备考?如何短期通过PMP?

我从新考纲考完下来&#xff0c;3A通过了考试&#xff0c;最开始也被折磨过一段时间&#xff0c;但是后面还是找到了方法&#xff0c;也算有点经验&#xff0c;给大家分享一下吧。 程序猿应该是考PMP里面人最多的&#xff0c;毕竟有一个30大坎&#xff0c;大部分人还是考虑转型…

什么是网络编程

目录 一、什么是网络编程&#xff1f; 二、协议 1.用户数据报协议(User Datagram Protocol) 2.TCP协议 TCP三次握手过程 三、实例 1.UDP通信程序 实现步骤 TCP接收数据 四、TCP协议和UDP协议的区别和联系 一、什么是网络编程&#xff1f; 1.在网络通信协议下&#xf…

一图看懂!RK3568与RK3399怎么选?

▎简介 RK3568和RK3399都是Rockchip公司的处理器&#xff0c;具有不同的特点和适用场景。以下是它们的主要区别和应用场景。 ▎RK3568 RK3568是新一代的高性能处理器&#xff0c;采用了22nm工艺&#xff0c;具有更高的性能和更低的功耗。它支持4K视频解码和编码&#xff0c;支持…

电脑如何查找重复文件?轻松揪出它!

电脑如何查找重复文件&#xff1f;小编每天要接触各种文档、图片等资料&#xff0c;很多时候下载了一些图片后&#xff0c;我根本记不住&#xff0c;下次看到不错的图片&#xff0c;我又会下载下来&#xff0c;结果就是和之前下载的图片是一样的内容。下载的重复文件多了&#…

人员定位及轨迹管理技术原理及应用领域

人员定位及轨迹管理的实现涉及多种技术和设备。例如&#xff0c;在GPS定位方面&#xff0c;使用卫星系统可以提供全球范围内的准确定位信息。然而&#xff0c;GPS在室内环境下的信号覆盖可能存在限制&#xff0c;因此在室内定位应用中&#xff0c;常常采用无线传感器网络&#…

第一行代码 第十一章 基于位置的服务

第11章 基于位置的服务 在本章中&#xff0c;我们将要学习一些全新的Android技术&#xff0c;这些技术有别于传统的PC或Web领域的应用技术&#xff0c;是只有在移动设备上才能实现的。 基于位置的服务&#xff08;Location Based Service&#xff09;。由于移动设备相比于电脑…