【优化布局】基于matlab遗传算法求解配电变电站布局优化问题【含Matlab源码 1317期】
一、遗传算法简介
1 引言
2 遗传算法理论
2.1 遗传算法的生物学基础
2.2 遗传算法的理论基础
2.3 遗传算法的基本概念
2.4 标准的遗传算法
2.5 遗传算法的特点
2.6 遗传算法的改进方向
3 遗传算法流程
4 关键参数说明
二、部分源代码
% this program is designed for optimal substation placement
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function SP_main()clear;clc;
pack;
tic;
display('______________________________________ RESULTS STARTED _____________________________________');global T L FinalTransPow FinalLoad FinalTransCap TransTypes AuxTransCap AuxTransPow K2 K3 MaxT
global SelCaseRow FinalTrans_x FinalTrans_y FinalLoad_x FinalLoad_x FinalLoad_y BrTransIndex
global AuxFinalTrans_x AuxFinalTrans_y AuxFinalLoad_x AuxFinalLoad_x AuxFinalLoad_y AuxFinalLoad
global FinalTLDistances VarCheckPrg
global finaltranspow finaltranscap
global PowerFactor UtilizationFactor TransformersTypes KWTransformersTypes
global InstallCosts OpenCircuitLosses ShortCircuitLosses
global CurrentTr_x CurrentTr_y
K2 = 0.0035e-3;
K3 = 0.64;
% determination of load centers & the vector of load values
DATA = xlsread('DATA.xls','Loads');
CANDIDATES = xlsread('DATA.xls','Candidates');
CURRENT_TRANSFORMERS = xlsread('DATA.xls','Current_Transformers');
DESIGN_CONSTANTS = xlsread('DATA.xls','Design_Constants');
TRANSFORMERS_TYPES = xlsread('DATA.xls','Transformers_Types');
ExcelLoad_x = DATA(:,1);
ExcelLoad_y = DATA(:,2);
ExcelLoads = DATA(:,3);
ExcelCandidates_x = CANDIDATES(:,1);
ExcelCandidates_y = CANDIDATES(:,2);
PowerFactor = DESIGN_CONSTANTS(1,1);
UtilizationFactor = DESIGN_CONSTANTS(1,2)/100;
TransformersTypes(1,:) = sort(TRANSFORMERS_TYPES(:,1));
KWTransformersTypes = ceil(UtilizationFactor*PowerFactor*TransformersTypes);
InstallCosts(1,:) = sort(TRANSFORMERS_TYPES(:,2));
OpenCircuitLosses(1,:) = sort(TRANSFORMERS_TYPES(:,3));
ShortCircuitLosses(1,:) = sort(TRANSFORMERS_TYPES(:,4));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Loads(1,:) = ExcelLoads(:,1);
Load_x(1,:) = ExcelLoad_x(:,1);
Load_y(1,:) = ExcelLoad_y(:,1);
Candidates_x(1,:) = ExcelCandidates_x(:,1);
Candidates_y(1,:) = ExcelCandidates_y(:,1);
if length(CURRENT_TRANSFORMERS) ~= 0CurrentTr_x = CURRENT_TRANSFORMERS(:,1)';CurrentTr_y = CURRENT_TRANSFORMERS(:,2)';CurrentTrCap = CURRENT_TRANSFORMERS(:,3)';CurrentTrPow = ceil(UtilizationFactor*PowerFactor*CurrentTrCap);
elseCurrentTr_x = [];CurrentTr_y = [];CurrentTrCap = [];CurrentTrPow = [];
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% initialize transformer locations and powers
% one transformer in every load center. initially we assume the first
% transformer for all candidate points.
TransTypes = length(TransformersTypes);
LoadCenters = length(ExcelLoads);
CurrentTrNo = length(CurrentTr_x);
CandidateNo = length(ExcelCandidates_x);
for count1=1:CurrentTrNo,if CurrentTrPow(1,count1) >= ceil((400*UtilizationFactor*PowerFactor))LimitedCurrentTrPow(1,count1) = KWTransformersTypes(1,6);elseLimitedCurrentTrPow(1,count1) = KWTransformersTypes(1,1);end;
end;
Trans_x = [CurrentTr_x Candidates_x];
Trans_y = [CurrentTr_y Candidates_y];
TransCap = [LimitedCurrentTrPow (KWTransformersTypes(1,1) + zeros(1,length(ExcelCandidates_x)))];
CandidateCenters = length(TransCap); % current + candidate transformers
TransPow = zeros(1,CandidateCenters);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% calculation of the distances between transformers
% this is a matrice with dimensions: (LoadCenters)*(CandidateCenters)
Distances = zeros(LoadCenters,CandidateCenters);
for count1=1:LoadCenters,for count2=1:CandidateCenters,Distances(count1,count2) = sqrt((Load_x(1,count1)-Trans_x(1,count2))^2 + (Load_y(1,count1)-Trans_y(1,count2))^2);end;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
CanDistances = zeros(CandidateCenters);
for count1=1:CandidateCenters,for count2=1:count1,CanDistances(count1,count2) = sqrt((Trans_x(1,count1)-Trans_x(1,count2))^2 + (Trans_y(1,count1)-Trans_y(1,count2))^2);CanDistances(count2,count1) = CanDistances(count1,count2);end;
end;
% the distances are pairly compared with 100, if they are smaller than 100
% the transformer with smaller value of load is detached.
for count1=1:CandidateCenters,for count2=1:CandidateCenters,if (CanDistances(count1,count2) <= 100) & (count1 ~= count2) & (count1 > CurrentTrNo)TransCap(1,count1) = 0;TransPow(1,count1) = 0;end;end;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% this function step-up the transformers size until it can feed the total
% loads connected to it.
% for count1=1:TransTypes,
% for count2=1:LoadCenters,
% if (TransCap(1,count2) < Loads(1,count2)) && (TransCap(1,count2) ~= 0)
% TransCap(1,count2) = SP_stepup(TransCap(1,count2));
% end;
% end;
% end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% in this subsection, the coordinations of the final possible transformers
% are saved in FinalTrans_x & FinalTrans_y and their values in
% FinalTransCap. similarly, the coordinations of the loadcenters to be
% attached to transformers are saved in FinalLoad_x & FinalLoad_y and their
% values in FinalLoad.
T = 1; L = LoadCenters;
for count1 = 1:CandidateCenters,if (TransCap(1,count1) ~= 0)FinalTransCap(1,T) = TransCap(1,count1);FinalTransPow(1,T) = 0;FinalTrans_x(1,T) = Trans_x(1,count1);FinalTrans_y(1,T) = Trans_y(1,count1);T = T+1;end;
end;
MaxT = T-1;
% MinL = L-1;
% if ((MaxT > 23) & (VarCheckPrg == 1))
% warndlg('MATLAB unable to solve! Try smaller number of loads',' DSP Warning');
% display('MATLAB unable to solve! Try smaller number of loads');
% return;
% end;
AuxTransCap = FinalTransCap;
AuxTransPow = FinalTransPow;
AuxFinalTrans_x = FinalTrans_x;
AuxFinalTrans_y = FinalTrans_y;
AuxFinalLoad_x = Load_x;
AuxFinalLoad_y = Load_y;
AuxFinalLoad = Loads;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% calculation of Distances beetween transformers and loads in a (MinL*MaxT) matrice.
for count1=1:LoadCenters,for count2=1:MaxT,TLDistances(count1,count2) = sqrt((AuxFinalLoad_x(1,count1)-AuxFinalTrans_x(1,count2))^2 + (AuxFinalLoad_y(1,count1)-AuxFinalTrans_y(1,count2))^2);end;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% HERE, THE OPERATION OF GENETIC ALGORITHM IS STARTED.
TotalLevels = 0;
LowLim = CurrentTrNo;
MaxLim = LowLim + (MaxT-CurrentTrNo);
for count5=LowLim:MaxLim,TotalLevels = TotalLevels + ceil(nchoosek(MaxT,count5));
end;
ScalingFactor = ceil(TotalLevels/20);
TotalLevels = ceil(TotalLevels/ScalingFactor);
Index = 0;
TMat = [(CurrentTrNo+1):MaxT];
% if ((TotalLevels < 20) & (VarCheckPrg == 1))
% warndlg('Try smaller Scaling Factor!',' DSP Warning');
% display('Try smaller Scaling Factor!');
% return;
% end;
% if ((TotalLevels > 300) & (VarCheckPrg == 1))
% warndlg('Try bigger Scaling Factor!',' DSP Warning');
% display('Try bigger Scaling Factor!');
% return;
% end;
% if ((VarCheckPrg == 1) & ((TotalLevels <= 300) & (TotalLevels >= 20)))
% warndlg('No problem in running program. Push "Run DSP"',' DSP Warning');
% LEVELS = TotalLevels;
% LEVELS
% display('No problem in running program. Push "Run DSP"');
% return;
% end;
close all;
pack;
cfinaltranscap = cell(TotalLevels,1);
cfinaltranspow = cell(TotalLevels,1);
cfinaltrans_x = cell(TotalLevels,1);
cfinaltrans_y = cell(TotalLevels,1);
cfinalload = cell(TotalLevels,1);
cfinalload_x = cell(TotalLevels,1);
cfinalload_y = cell(TotalLevels,1);
pack;
h = waitbar(0,'Please wait...');
for count1=0:(MaxLim-LowLim), % MAIN for. NOTE: "count1" stands for the number of new trans.T = LowLim + count1; % "LowLim" stands for the number of current transformers.numberOfVariables = LoadCenters;L = numberOfVariables;SelCaseMat = nchoosek(TMat,count1);SIZE = size(SelCaseMat);RowNumber = SIZE(1,1);for count2=1:ScalingFactor:RowNumber,Index = Index + 1;Level = Index;SelCaseRow = [[1:CurrentTrNo] SelCaseMat(count2,:)]; % SelCaseRow should be sent to SP_create.m. It is a selection of transformers%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% modifying FinalTrans_x,y & FinalLoad_x,y & FinalLoad &% FinalTransPow & FinalTransCapfinaltranscap = zeros(1,MaxT) -1;finaltranspow = zeros(1,MaxT) -1;finaltrans_x = zeros(1,MaxT) -1;finaltrans_y = zeros(1,MaxT) -1;for count3=1:T,finaltranscap(1,SelCaseRow(1,count3)) = AuxTransCap(1,SelCaseRow(1,count3));finaltranspow(1,SelCaseRow(1,count3)) = AuxTransPow(1,SelCaseRow(1,count3));finaltrans_x(1,SelCaseRow(1,count3)) = AuxFinalTrans_x(1,SelCaseRow(1,count3));finaltrans_y(1,SelCaseRow(1,count3)) = AuxFinalTrans_y(1,SelCaseRow(1,count3));end;FinalTransCap = finaltranscap;FinalTransPow = finaltranspow;FinalTrans_x = finaltrans_x;FinalTrans_y = finaltrans_y;cfinaltranscap{Index} = finaltranscap;cfinaltranspow{Index} = finaltranspow;cfinaltrans_x{Index} = finaltrans_x;cfinaltrans_y{Index} = finaltrans_y;finalload = Loads;finalload_x = Load_x;finalload_y = Load_y;
% Li = 0;
% for count3=1:LoadCenters,
% if (size(find(FinalTrans_x==Load_x(1,count3)))==[1 0] | size(find(FinalTrans_y==Load_y(1,count3)))==[1 0])
% Li = Li + 1;
% finalload(1,Li) = Loads(1,count3);
% finalload_x(1,Li) = Load_x(1,count3);
% finalload_y(1,Li) = Load_y(1,count3);
% end;
% end;
三、运行结果
四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
【优化布局】基于matlab遗传算法求解配电变电站布局优化问题【含Matlab源码 1317期】相关推荐
- 【生产优化】基于matlab遗传算法求解帐篷工序问题【含Matlab源码 2145期】
⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源: [生产优化]基于matlab遗传算法求解帐篷工序问题[含Matlab源码 2145期] 点击上面蓝色字体,直接付费下载,即可. 获取代码 ...
- 【Matlab肌电信号】肌电信号处理【含GUI源码 966期】
一.代码运行视频(哔哩哔哩) [Matlab肌电信号]肌电信号处理[含GUI源码 966期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余继周,杨 ...
- 【Matlab语音处理】声音信号频谱分析仪【含GUI源码 325期】
一.代码运行视频(哔哩哔哩) [Matlab语音处理]声音信号频谱分析仪[含GUI源码 325期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊, ...
- 【Matlab图像检索】综合特征图像检索【含GUI源码 395期】
一.代码运行视频(哔哩哔哩) [Matlab图像检索]综合特征图像检索[含GUI源码 395期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...
- 【Matlab条形码识别】二维条形码识别【含GUI源码 607期】
一.代码运行视频(哔哩哔哩) [Matlab条形码识别]二维条形码识别[含GUI源码 607期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...
- 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】
一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...
- 【Matlab路径规划】改进的遗传算法机器人避障路径规划【含GUI源码 703期】
一.代码运行视频(哔哩哔哩) [Matlab路径规划]改进的遗传算法机器人避障路径规划[含GUI源码 703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...
- 【Matlab电力负荷预测】粒子群优化支持向量机短期电力负荷预测【含GUI源码 751期】
一.代码运行视频(哔哩哔哩) [Matlab电力负荷预测]粒子群优化支持向量机短期电力负荷预测[含GUI源码 751期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...
- 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】
一.代码运行视频(哔哩哔哩) [Matlab图像融合]小波变换遥感图像融合[含GUI源码 744期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...
- 【Matlab指纹识别】指纹识别门禁系统【含GUI源码 1692期】
一.代码运行视频(哔哩哔哩) [Matlab指纹识别]指纹识别门禁系统[含GUI源码 1692期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余继 ...
最新文章
- 阿里JAVA开发手册零度的思考理解(二)
- 开源-一步步实现cnblogs博客采集工具-对项目需求的分析
- Flask Vue.js全栈开发
- sql语句之where子句
- BZOJ 1488 Luogu P4727 [HNOI2009]图的同构 (Burnside引理、组合计数)
- 《深入理解Elasticsearch(原书第2版)》一2.2 查询改写
- poj1969---找规律
- A. Regular Bracket Sequences
- 导入php插件_微信公众号吸粉的方法(将网站100%的流量导入到公众号中)
- 计算机应用与医学信息基础知识,第一篇医学信息基础知识.PDF
- QT编译libpng
- python数字转换成中文大写_Python将阿拉伯数字转化为中文大写
- 用LSTM做文本情感分类(以英文为例)附github代码
- springBoot+itext处理富文本转pdf
- 逆滤波和维纳滤波(附Matlab完整代码)
- AWS S3 and Glacier
- 武林外传寻路call
- chrome控制台功能
- 第9章 SQL INSERT INTO 语句教程
- 虚拟化基础架构性能监控—云安
热门文章
- 对字节输入输出流的理解以及几道练习题
- 关于实现servlet中心控制的Front Controller Pattern
- 关于CSS的fixed定位
- Docker网络基础---Docker跨主机容器访问通信
- ESP8266(3)
- Opencv结合socket进行视频传输(TCP协议)
- Atitit 信息安全体系 资料书籍表 1. 《信息安全原理与技术	2 1.1. 第2章 工具箱: 鉴别、 访问控制与加密	2 1.2. 第3章 程序和编程 漏洞 木马 病毒	3 1.3. We
- Atitit 摄像头与主机连接方式大总结
- atitit 图像处理 体系树 科技树 v4 r130a .xlsx
- 新特性AAtitti css3 新特性attilax总结titti css