智能计算作业——差分进化算法求解函数最值
下面是智能计算作业,哎呀,你们快来抄我作业呀╭(╯^╰)╮
问题描述:
算法理论我省略了,你们自己去百科上抄吧╭(╯^╰)╮
求解步骤:
(这个好像也是百科上的╭(╯^╰)╮我根据自己的需要改了一下)
(1)确定差分进化算法控制参数,确定适应度函数。差分进化算法控制参数包括:种群大小NP、变异算子F与交叉概率CR。
(2)随机产生初始种群。
(3)对初始种群进行评价,即计算初始种群中每个个体的适应度值。
(4)判断是否达到终止条件或进化代数达到最大。若是,则终止进化,将得到最佳个体作为最优解输
出;若否,继续。
(5)使用现行差分策略:
进行变异和交叉操作,得到中间种群。
(6)在原种群和中间种群中选择个体,得到新一代种群。
(7)进化代数g=g+1,转步骤(4)。
运行结果:
运用detest.m文件,得到的结果如下图所示:
会出现一个用户交互界面,亲自设计的,支持迭代数显示,支持调参╭(╯^╰)╮就问你骚不骚
在这里调整变异算子F和交叉概率CR的参数:
- 变异算子F=0.5,交叉系数CR=0.1:
当x(1)=-4.0000,x(2)=-3.9366时,函数最小值为-24.9329。
(2)变异算子F=0.6,交叉系数CR=0.5:
当x(1)=-3.9773,x(2)=-4.0000时,函数最小值为-24.8083。
(3)变异算子F=0.6,交叉系数CR=1.0:
当x(1)=-4.0000,x(2)=-3.9396时,函数最小值为-24.9322。
(4)变异算子F=0.1,交叉系数CR=0.5:
实验总结:
从图中看出,随着迭代次数的增加,目标函数逐渐向最小值靠拢。
交叉算子CR越大,收敛速度越快。变异算子F对结果的影响效果更小一些。
得到的最优结果在当x(1)=-4.0000,x(2)=-3.939时,函数最小值为-24.9332。
代码在这里:
这个是readme.txt文件内容(哦你在代码里面到处都要留下自己的名字才显得是你寄几写的呀╭(╯^╰)╮):
% 差分进化算法求解函数最值
% 姓名:
% 学号:
% 邮箱:
% 环境: MATLABR2017A
% 日期: 2018.10.3
% 运行说明: 运行detest.m即可弹出图形交互界面detest.gui
输入参数:F和CR
点击“运行”按钮即可运行程序;
点击“重置”按钮恢复;
支持当前迭代次数的实时显示。
这个是func2.m文件,里面只有一个我们要求解的函数啦╭(╯^╰)╮
function value=func2(x) value=5*cos(x(1)*x(2))+4*x(1)+x(2);
end
这个是detest.m文件╭(╯^╰)╮运行的时候点这个
function varargout = detest(varargin)
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 差分进化算法求解函数最值
% 姓名:
% 学号:
% 邮箱:
% 环境: MATLABR2017a
% 日期: 2018.10.3
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...'gui_Singleton', gui_Singleton, ...'gui_OpeningFcn', @detest_OpeningFcn, ...'gui_OutputFcn', @detest_OutputFcn, ...'gui_LayoutFcn', [] , ...'gui_Callback', []);
if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});
endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_mainfcn(gui_State, varargin{:});
endfunction detest_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
%打开按钮的背景图片
A = imread('A.jpg');
A = imresize(A,[100,100]);
set(handles.kaishi,'CData',A);
set(handles.rek,'CData',A);
% CR = handles.edit7;
% F = handles.edit8;
guidata(hObject, handles);function varargout = detest_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;%% 开始按钮
function kaishi_Callback(hObject, eventdata, handles)
%初始化参数设置
NP=20; %种群数量
D=2; %变量的维数
G=100; %最大进化代数
CR = str2double(get(handles.edit7,'String'));
F = str2double(get(handles.edit8,'String'));
F
CR
Xs=4; %上限
Xx=-4; %下限x=zeros(D,NP); %初始种群
v=zeros(D,NP); %变异种群
u=zeros(D,NP); %选择种群
x=rand(D,NP)*(Xs-Xx)+Xx; %赋初值%计算适应度函数值
for m=1:NPOb(m)=func2(x(:,m));
end
trace(1)=min(Ob);
%差分操作
for gen=1:G%% 提示迭代数set(handles.edit2,'String',num2str(gen));pause(0.01);%变异操作%r1,r2,r3和m互不相同for m=1:NPr1=randi([1,NP],1,1);%生成1—NP中间的随机数while(r1==m)r1=randi([1,NP],1,1);endr2=randi([1,NP],1,1);while(r2==m)|(r2==r1)r2=randi([1,NP],1,1);endr3=randi([1,NP],1,1);while((r3==m)|(r3==r1)|(r3==r2))r3=randi([1,NP],1,1);endv(:,m)=x(:,r1)+F*(x(:,r2)-x(:,r3));end%交叉操作r=randi([1,NP],1,1);for n=1:Dcr=rand(1);if(cr<CR)|(n==r)u(n,:)=v(n,:);elseu(n,:)=x(n,:);endend%边界条件处理%边界吸收for n=1:Dfor m=1:NPif u(n,m)<Xxu(n,m)=Xx;endif u(n,m)>Xsu(n,m)=Xs;endendend%选择操作for m=1:NPOb1(m)=func2(u(:,m));endfor m=1:NPif Ob1(m)<Ob(m) %小于先前的目标值x(:,m)=u(:,m);endendfor m=1:NPOb(m)=func2(x(:,m));endtrace(gen+1)=min(Ob);
end[SortOb,Index]=sort(Ob);x=x(:,Index);X=x(:,1); %最优变量Y=min(Ob); %最优值%% 画进化曲线axes(handles.axes1)plot(trace);%plot(X,Y,'-ro');xlabel('迭代次数');ylabel('目标函数值');title('DE目标函数曲线');box on;%% 提示最优变量set(handles.edit5,'String',num2str(X(1,:)));set(handles.edit6,'String',num2str(X(2,:)));%% 提示最优值set(handles.edit4,'String',num2str(Y));%% 画函数图像axes(handles.axes2)nPlot = 100;bound = [-4 4 -4 4];xx = linspace(bound(1),bound(2),nPlot);yy = linspace(bound(3),bound(4),nPlot);[xx,yy] = meshgrid(xx,yy);zz = 5*cos(xx.*yy)+4.*xx+yy;mesh(xx,yy,zz);%text('Interpreter','latex','String','$$ f(x)=5*cos(x(1)*x(2))+4*x(1)+x(2)$$','Position',[0 0]);%用latex格式打印公式
%% 重置按钮
function rek_Callback(hObject, eventdata, handles)
cla(handles.axes1);
cla(handles.axes2);
set(handles.edit2,'String','');
set(handles.edit4,'String','');
set(handles.edit5,'String','');
set(handles.edit6,'String','');
set(handles.edit7,'String','');
set(handles.edit8,'String','');function edit2_Callback(hObject, eventdata, handles)function edit2_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
endfunction edit4_Callback(hObject, eventdata, handles)function edit4_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
endfunction edit5_Callback(hObject, eventdata, handles)function edit5_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
endfunction edit6_Callback(hObject, eventdata, handles)function edit6_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
endfunction edit7_Callback(hObject, eventdata, handles)
% hObject handle to edit7 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edit7 as text
% str2double(get(hObject,'String')) returns contents of edit7 as a double% --- Executes during object creation, after setting all properties.
function edit7_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit7 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
endfunction edit8_Callback(hObject, eventdata, handles)
% hObject handle to edit8 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of edit8 as text
% str2double(get(hObject,'String')) returns contents of edit8 as a double% --- Executes during object creation, after setting all properties.
function edit8_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit8 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end
还有一张图,这个是GUI界面的按钮的图╭(╯^╰)╮一定要保存在代码路径下,命名为‘A.png’,不然会报错:
好啦╭(╯^╰)╮就是这些啦,ctrl+c,ctrl+v交作业去吧
智能计算作业——差分进化算法求解函数最值相关推荐
- 差分进化算法求解函数最值问题
差分进化算法求解函数最值问题 声明: 1.本文源代码来自书目<智能优化算法及其MATLAB实例(第3版)>,目的在于为MATLAB初学者提供更简明的代码解析,方便读者了解算法及MATLAB ...
- MATLAB差分进化算法求解超市物流配送选址问题实例
差分进化算法编程问题实例: MATLAB差分进化算法求解超市物流配送中心选址问题代码实例 在范围为(0,0)到(100,100)的矩形区域内,散布着40个连锁超市,各个连锁超市的坐标及需求量见表1.要 ...
- 【优化布局】基于差分进化算法求解电力系统负荷分配中的应用问题matlab代码
1 简介 差分进化算法在处理连续域.非凸.不确定性和全局优化问题时具有优势,已在包括电力系统最优潮流在内的诸多领域得到广泛应用.电力系统最优潮流是一个复杂的非线性优化问题,要求在满足特定的电力系统运行 ...
- 【运筹优化】DE差分进化算法求解无约束多元函数最值(Java代码实现)
文章目录 前言 优化目标 求解结果 进化过程可视化 Java算法代码 可视化代码 前言 本文以求解二元函数最小值为例,如果需要求解多元函数,只需要修改以下变量即可: varNum:变量维度数 ub和l ...
- 快速掌握差分进化算法
系列链接 遗传算法讲解及实例 差分进化算法讲解及实例 模拟退火算法讲解及实例 定义 差分进化算法属于进化算法的一种,如果读者已经了解了遗传算法,那么该算 ...
- 【进阶一】Python实现MDCVRP常见求解算法——差分进化算法(DE)
基于python语言,实现差分进化算法(DE)对多车场车辆路径规划问题(MDCVRP)进行求解. 目录 往期优质资源 1. 适用场景 2. 求解效果 3. 代码分析 4. 数据格式 5. 分步实现 6 ...
- Python实现VRP常见求解算法——差分进化算法(DE)
基于python语言,实现经典差分进化算法(DE)对车辆路径规划问题(CVRP)进行求解. 目录 1. 适用场景 2. 求解效果 3. 问题分析 4. 数据格式 5. 分步实现 6. 完整代码 参考 ...
- 【进阶二】Python实现VRPTW常见求解算法——差分进化算法(DE)
基于python语言,实现经典差分进化算法(DE)对带有时间窗的车辆路径规划问题( VRPTW )进行求解. 目录 往期优质资源 1. 适用场景 2. 求解效果 3. 代码分析 4. 数据格式 5. ...
- 【进阶四】Python实现(MD)HVRP常见求解算法——差分进化算法(DE)
差分进化算法+Split 求解异构车辆路径规划问题 碧海蓝天 吹吹风 目录 信息传递 1. 适用场景 2. 求解效果 3. 代码分析 4. 数据格式 5. 分步实现 6. 完整代码 参考 信息传递 p ...
最新文章
- CentOS 6.5+Nagios4.0.2+Msmtp+Mutt邮箱报警
- (转载)(c#)数据结构与算法分析 --数组、向量和表
- android获取当前应用占用的内存大小,Android分析已安装应用占用内存
- 【推荐】一个不错的密码强度测试网站
- 802.11(wi-fi)的PHY层(编码与调制方法)
- exls导入数据库 php_PHP Excel导入数据到MySQL数据库
- oracle数据库报错1033,Oracle联机日志出现错误ORA-16038 ORA-19809 ORA-00312 解决
- java的file类中的方法_java中File类的使用方法|chu
- 2-5 ImageList 控件
- ashly理器4.8软件汉化版_工程造价专业 常用广联达CAD等软件 推荐什么笔记本电脑?...
- 10 年前被删的初恋,凌晨 1 点突然加我…屌丝的眼泪
- 反激变换器matlab仿真变压器demo,反激变换器建模Matlab仿真
- 解决maven打包 错误: 程序包com.sun.istack.internal不存在 - BBSMAX
- win7原版镜像_(超详细)WIN7原版系统win镜像安装教程
- UE 编辑器无法保存文件(图表被连接到外部包中的私有对象)
- 越是聪明人越要懂得下笨功夫!
- 拉姆达Lambda表达式对list分页,获取list总页数
- 比特大陆IPO之旅即将终结
- 利用 android手机DLNA功能,实现手机视频无线播放到电脑、电视
- Lr_debug_message,Lr_output_message,Lr_error_message,Lrd_stmt,Lrd_fetch
热门文章
- 疫情期间,程序员是如何靠副业赚钱的?​
- React中过渡动画的编写方式
- centos mysql部署_CentOS下MySQL 8.0安装部署,超详细!
- 威联通NAS配置1.18.1Minecraft服务器
- 一阶电路暂态响应的结果分析。_第八讲 线性电路的过渡过程分析二
- word 宏命令批量把当前文件夹下的doc另存为docx格式
- Python实现坦克大战(TankWar)游戏
- Win10怎么看内存条频率
- Composer -- PHP依赖管理的新时代
- 视频教程-必会神器之MySQL数据库-MySQL