【优化调度】一致性算法求解电力系统分布式经济调度优化问题【含Matlab源码 770期】

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击👇
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)

⛄一、一致性算法简介

1 概述
分布式中的一致性可以被描述为在协作解决问题的一组操作之间达成一致的行为。随着开源分布式计算和存储平台的兴起,一致性算法已成为复制的基本工具。其中Paxos和Raft是最受欢迎的一致性算法,通过消除单点故障来提高系统的弹性。
虽然Paxos在分布式一致性方面主导着学术和商业话语,但协议本身太复杂而无法推理,因此需要更易理解的算法。研究人员对Paxos进行了广泛的研究,而Raft在工程师中非常受欢迎。Raft的受欢迎程度来自这样一个事实:尽管研究人员对Paxos感兴趣,但工程师仍然需要阅读几篇论文,以便能够理解并创建解决实际问题的解决方案,并在通信步骤方面提供良好的性能。此外,他们仍然需要填补自定义实施的一些空白,这些实施有时会变得非常脆弱。
Raft的新一致性算法,它被设计为更容易理解,并为构建实用系统提供了比Paxos更好的基础。虽然Raft为分布式系统的复杂世界带来了一些新鲜血液,但它仍然与Paxos有许多共同之处。例如,两者都要选出一位负责决定协商一致的领导者。
在这篇博文中,我们将简要介绍Paxos和Raft之间的相同点和不同点。首先,我们将描述一致的算法是什么。其次,我们将描述如何使用一致性算法的实例来构建复制解决方案。然后我们将描述如何在算法和一些安全和活跃属性中选出领导者。

2 一致性
分布式系统的特征在于一组安全性和活跃性或两者的混合。简单地讲,安全是一种财产,规定在执行程序期间不会发生任何不良事件。另一方面,活跃性规定最终会发生一些好事。
一致性的目标是使一组服务器在一个值上达成一致,所以活跃的特征在于最终每个服务器都可以决定一个值。安全性表明没有两台服务器来设定值。
不幸的是,服务器执行算法步骤可能比其他服务器花费更长时间,并且可能崩溃并停止处理一致性算法。邮件可能会延迟,无序传递或丢失。这些方面使得一致性算法的实施变得非常困难,并迫使它们在“不稳定”期间降低标准并保持安全。确切地说,当系统变得“稳定”时虽然未知,但最终它将保持足够长的“稳定”,以便一致性算法能够做出决定达成最终的一致性。
在稳定运行中,系统需要两个通信步骤:leader - (1) - > servers - (2) - > leader:
在这里插入图片描述
领导者向所有服务器发送它想要达成协议的值,并且每个服务器回复给领导者,通知他已经接受了请求。因此,当领导者从法定数量(n/2+1节点)的服务器接收消息时,就达成了协议。
请注意,我们在此分析中省略了两条消息:将服务器希望与领导者达成协议的值转发给服务器的消息以及通知服务器已达到该值协议的消息。如果服务器将接受消息发送到所有服务器,或者在领导者发送给服务器的下一条消息中捎带信息,则后一条消息可能不是必需的。

3 复制
为了实现复制,运行一致性算法的几个实例,并且每个实例都被限制在复制日志中的一个槽条目中,该条目可能会持久存储在磁盘上。领导者可以并行运行多个实例以填充不同的插槽,从而提高性能。但是,并行度高度依赖于硬件、使用的网络和应用程序。
每个领导者都对自己当选时增加的一轮或一个周期负有独特的责任:
在这里插入图片描述
4 领导人选举
Paxos和Raft都认为最终会有一个领导者,所有稳定的服务器都会信任,而一个领导者负责一个周期(Term)。如果怀疑现任领导人有问题,新领导人将提出一个新任期,必须大于前一任期。
在Raft中,服务器向其他服务器发送“领导请求”,并且在认为自己是领导者之前期望大多数服务器的回复。如果它没有得到大多数服务器的回复或者接收到另一个服务器已成为领导者的消息,它将超时并重新开始新的选举过程。服务器每个Term只能投票给一个领导者请求。
但是,Paxos并没有真正定义服务器如何成为领导者。为简单起见,研究人员利用服务器id(整数)等进程之间的先后排名。因此,没有被怀疑的排名最高或最低的服务器成为新的领导者。虽然这是一个简单直观的解决方案,但它需要在服务器之间划分术语空间:新术语=旧术语+ N,其中N是服务器的最大数量。
Raft对领导者选举过程施加限制:只有最新的服务器才能成为领导者。基本上,它保证领导者拥有以前周期中的所有已提交条目,并且不需要了解它不知道的复制日志中的旧条目。因此,在成为领导者之后,服务器可以简单地在其他服务器上“强加”其“愿望”。
然而,Paxos允许任何服务器成为领导者。因此,服务器必须在开始在其他服务器上“强加”其“愿望”之前了解过去,提高了灵活性但也伴随着额外的复杂性。
在这里插入图片描述
在Raft中,服务器1或服务器2可以成为领导者。而在Paxos中,任何一个都可以。

5 安全
由于系统的异步性质,服务器可能在不同时间感知故障和选举。这意味着服务器可能会以不同的方式临时运行,但最终所有服务器都会收敛到一个Term。
在任何情况下,如果服务器从比其当前版本更早的Term获得消息,则这意味着发送者要么是领导者,要么试图成为旧Term中的一个,并且接收者必须拒绝该消息并通知发送者。
如果服务器从一个大于当前的Term获得消息,这意味着有一个新Term和一个新的领导者,并且接收者必须开始接受领导者的“愿望”。
但是,两种算法都必须小心避免覆盖旧领导做出的决定,从而违反安全规定。这就是Raft和Paxos分歧的地方,我们可以看到Raft使用了简单而优雅的方法。
如上所述,Raft对领导者选举算法施加限制,只有最新的服务器才能成为领导者:
Raft通过比较日志中最后一个条目的索引和术语来确定两个日志中哪一个更新。如果日志包含具有不同术语的最后一个条目,则具有较晚术语的日志将更新。如果日志以相同的术语结束,则更长的日志更新是最新的。
然后,领导者只需要确保服务器中的复制日志最终收敛,这是通过施加以下限制来完成的:如果服务器之前没有接受插槽的值,“n"服务器不能接受插槽的值"n - 1”。领导者包括当前请求中的先前日志条目的术语,并且如果其先前请求的术语与领导者发送的术语匹配,则服务器仅接受该请求。否则,它要求领导者首先发送先前失踪的请求,如此反复"n - 2"和 "n - 3"等。
在Paxos中,任何服务器都可以成为领导者,因此避免决策不被覆盖的任务变得有点复杂,因为新的领导者必须在开始“强加”它之前找出其他服务器已处理的内容。希望“在别人身上。这是Paxos算法的准备阶段,必须在选出新领导者后运行一次。准备消息包含新术语和插槽号,“n"通过该插槽号可以达到所有先前条目的协议。服务器回复有关大于的插槽的信息"n”,此信息用于限制新领导者为这些插槽建议的值。

6 活跃度
只要大多数服务器还活着,保证n/2+1节点正常就能够提供服务。

7 结论
我们已经展示了Raft和Paxos之间的相似之处,关键的区别在于如何选出领导者并保持安全。在Raft中,只有最新的服务器才能成为领导者,而Paxos允许任何服务器成为领导者。然而,这种灵活性伴随着额外的复杂性。

⛄二、部分源代码

%邻接矩阵%
a=[0 0 0 0 0 0 0 0 0 0.5 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0.5 0 0 0 0 0 0 0 0 0 0 0.5 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0 0 0 0 0 0.5;
0 0 0 0 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0 0;
0 0 0 0.5 0 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0.5 0 0 0 0 0 0 0 0 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0 0 0 0 0.5 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 1/3 0 0 0 0 0 1/3 1/3 0 0 0 0 0 0 0 0 0 0 0 0;
0.25 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0.25 0 0 0 0;
0.5 0 0 0 0 0 0 0 0 0 0 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0 0 0 0 0;
0 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0 0 0 0 0 0;
0 0 0 0 0 1/3 1/3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1/3 0;
0 0 0 0 0 0 0 1/3 0 0 0 0 0 0 0 1/3 0 0 0 1/3 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0.2 0 0 0 0 0 0.2 0 0.2 0 0.2 0.2 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0.25 0.25 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0.25 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0 0 0 0 0 0 0.5 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0 0.2 0 0.2 0.2 0 0 0 0 0 0 0 0.2;
0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0.25 0.25 0 0 0.25 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1/3 0 0 1/3 0 0 0 0 0 1/3 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0.25 0.25 0.25;
0 0 1/3 0 0 0 0 0 0 0 0 0 1/3 0 0 0 0 0 0 0 0 0 0 1/3 0 0 0 0 0;
0 0.25 0 0 0 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0 0 0 0 0.25 0 0.25 0 0 0 0;
0 0 0 0 0 0 0 0 0 1/3 0 0 0 0 0 0 0 0 0 0 0 0 0 1/3 0 1/3 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0.25 0 0 0 0 0 0 0.25 0 0 0 0.25;
0 0 0 0.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0 0 0 0 0 0 0;
0 0 0 0 0 0 0.25 0 0 0 0 0 0 0.25 0 0 0 0 0 0 0.25 0.25 0 0 0 0 0 0 0;
0 0 0.25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0 0 0.25 0 0 0 0.25 0 0 0;];
%发电机%
be=[13.065 5.295 11.37 3.36 12.795 11.775 3.375 9.435 6.45 12.39];
ga=[0.0046 0.0111 0.0099 0.0095 0.0104 0.0029 0.0021 0.0062 0.0077 0.0048];
pg=[135.88 214.92 108.04 127.69 232.56 240.00 44.628 234.48 74.600 172.09];
spg=zeros(1,301);
spg(1)=sum(pg);
pgmax=2.5pg;
pgmin=-2.5
pg;
li=be+2.ga.pg;
%负荷%
b=[25.755 18.42 27.63 10.59 16.275 28.365 28.14 23.55 21.42 15.225 28.56 10.305 23.94 22.05 26.25 16.455 24.375 26.295 14.76];
c=[14.02 6.25 15.1 8.42 8.1 21.21 11.9 15.96 12.75 6.9 9.75 8.23 9.28 9.49 9.1 34.08 18.36 12.39 13.04]./(-100);
pd=[110.15 176.75 109.69 75.55 120.64 80.26 142.02 88.57 100.8 132.38 175.75 75.13 154.69 139.3 172.85 28.98 79.67 127.37 67.92];
spd=zeros(1,301);
spd(1)=sum(pd);
pdmax=2.5
pd;
pdmin=-2.5
pd;
lj=b+2.*c.*pd;
%迭代%
l=[li lj];
ll=zeros(301,29);
ll(1,:)=l;
dp=zeros(1,301);
dp(1)=spd(1)-spg(1);

pgg=zeros(301,10);
pgg(1,:)=pg;
pdd=zeros(301,19);
pdd(1,:)=pd;

for t=1:1:300
for n=1:1:29 %更新lambda的值
if n1
ll(t+1,n)=sum(a(n,:).ll(t,:))+0.005dp(t); % 这里和矩阵相乘是一样的 a(n,:)*ll(t,:)’
elseif n
11
ll(t+1,n)=sum(a(n,:).ll(t,:))+0.005dp(t);
else
ll(t+1,n)=sum(a(n,:).*ll(t,:));
end
end

for i=1:1:10 %判断pg是否越限并赋值
if (ll(t,i)-be(i))/(2ga(i))>=pgmax(i)
pgg(t+1,i)=pgmax(i);
elseif (ll(t,i)-be(i))/(2
ga(i))<=pgmin(i)
pgg(t+1,i)=pgmin(i);
else
pgg(t+1,i)=(ll(t,i)-be(i))/(2*ga(i));
end
end

for j=1:1:19 %判断pd是否越限并赋值
if (ll(t,j+10)-b(j))/(2c(j))>=pdmax(j)
pdd(t+1,j)=pdmax(j);
elseif (ll(t,j+10)-b(j))/(2
c(j))<=pdmin(j)
pdd(t+1,j)=pdmin(j);
else
pdd(t+1,j)=(ll(t,j+10)-b(j))/(2*c(j));
end
end
spg(t+1)=sum(pdd(t+1,:));
spd(t+1)=sum(pgg(t+1,:));
dp(t+1)=sum(pdd(t+1,:))-sum(pgg(t+1,:));
end
%绘图%
figure(1);

for j=1:1:29
plot(x,ll(:,j));hold on
end
title(‘发电机增量成本和负荷增量效益’);
xlabel(‘时间/s’);
ylabel(‘一致性变量值’);

⛄三、运行结果

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

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

🍅 仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
粒子群算法(Particle Swarm Optimization)是一种基于群体智能的优化算法,常用于求解优化问题。微电网优化调度问题是指在微电网中,通过合理调度各种能源设备的运行策略,使得微电网运行的效益最大化或者成本最小化。 要改进粒子群算法求解微电网优化调度问题,可以从以下几个方面入手: 1. 算法参数调优:粒子群算法中存在一系列参数,如群体大小、学习因子、惯性权重等。通过调整这些参数的取值,能够更好地适应微电网优化调度问题的特点,以求得更好的优化结果。 2. 粒子更新策略改进:传统的粒子更新策略是根据粒子的历史最优位置和群体最优位置进行调整。针对微电网优化调度问题,可以考虑引入更多的约束条件和目标函数,以更好地指导粒子的更新过程。 3. 多目标优化:微电网优化调度问题通常涉及到多个目标,例如最大化电网效益和最小化成本。因此,改进粒子群算法时,可以利用多目标优化算法的思想,设计适合微电网优化调度问题的适应性函数和目标权重策略。 4. 考虑不确定性因素:微电网中存在各种不确定性因素,例如电网负荷和能源供给的波动性等。在改进粒子群算法时,可以引入概率和统计方法,对不确定性因素进行建模和处理,以增强算法的鲁棒性。 在实现上述改进的粒子群算法求解微电网优化调度问题Matlab源码时,可以借助现有的粒子群算法框架进行修改和扩展。通过定义适应性函数、目标函数、约束条件等,以及采用新的参数调优策略和粒子更新策略,能够得到更好的优化结果。同时,需要对算法的收敛性和稳定性进行验证和评估,以保证算法具备一定的鲁棒性和实用性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值