目录
主要内容
部分代码
结果一览
下载链接
主要内容
在我们研究电力系统优化调度模型的过程中,由于每天负荷和分布式电源出力随机性和不确定性,可能会优化出很多的结果,但是经济调度模型试图做到通用策略,同样的策略能够适用于不同的负荷和分布式电源特征,为了做到这一点,就出现随机优化、鲁棒优化等等方法,当然我们也可以像这个程序一样,对负荷进行聚类分析,对归纳得到的共性负荷特征再进行优化调度分析,模型的说服力会大大增强。
常见的聚类算法包括kmeans聚类、层次聚类、DBSCAN聚类和谱聚类等,本模型采用的是kmean聚类,传统kmeans算法流程如下:
- 初始化:
- 选择聚类的数量K。
- 随机选择K个数据点作为初始聚类中心。
- 分配数据点到最近的聚类中心:
- 对于数据集中的每个点,计算它与K个聚类中心之间的距离。
- 将每个点分配到距离最近的聚类中心,形成K个簇。
- 重新计算聚类中心:
- 对于每个簇,计算簇内所有数据点的均值,这个均值就是新的聚类中心。
- 判断收敛:
- 如果新的聚类中心与旧的聚类中心相同,或者达到预设的迭代次数,或者簇的成员不再发生变化,则算法收敛,结束流程。
- 否则,返回步骤2继续迭代。
反复的迭代过程导致kmeans算法具有迭代时间长和性能不稳定等问题,为了解决该问题,通过粒子群算法和聚类算法的结合有效提升算法效能,具体流程步骤为:
部分代码
function Error=PredoKMeans(Index,X,Replicate) %% Kmeans聚类算法 % Index为从X中随机抽取的中心样本序号 % 行数 N=size(X,1); M=size(X,2); % 聚类情况 Position=zeros(N,1); H=length(Index); % 选择样本的中心 Index=floor(Index); Center=X(Index,:); % 总重构误差 for i=1:Replicate Error=0; for j=1:N if M==1 Distance=(repmat(X(j,:),H,1)-Center).^2; elseif M>1 Distance=sum((repmat(X(j,:),H,1)-Center).^2,2); end % 选择最小的距离 [Dis,Index]=min(Distance); Position(j)=Index; Error=Error+Dis; end % % 更新聚类中心 % for j=1:H % Center(j,:)=mean(X(Position==j,:)); % end end