数学建模智能算法

模拟退火算法


%生成初始解,求目标函数f(x)=x1^2+x2^2+8在x1^2-x2>0;-x1-x2^2+2=0约束下的最小值问题  
sol_new2=1;%(1)解空间(初始解)  
sol_new1=2-sol_new2^2;  
sol_current1 = sol_new1;   
sol_best1 = sol_new1;  
sol_current2 = sol_new2;   
sol_best2 = sol_new2;  
E_current = inf;  
E_best = inf;  rand('state',sum(clock)); %初始化随机数发生器  
t=90; %初始温度  
tf=89.9; %结束温度  
a = 0.99; %温度下降比例  while t>=tf%(7)结束条件  for r=1:1000 %退火次数  %产生随机扰动(3)新解的产生  sol_new2=sol_new2+rand*0.2;  sol_new1=2-sol_new2^2;  %检查是否满足约束  if sol_new1^2-sol_new2>=0 && -sol_new1-sol_new2^2+2==0 && sol_new1>=0 &&sol_new2>=0  else  sol_new2=rand*2;  sol_new1=2-sol_new2^2;  continue;  end  %退火过程  E_new=sol_new1^2+sol_new2^2+8;%(2)目标函数  if E_new<E_current%(5)接受准则  E_current=E_new;  sol_current1=sol_new1;  sol_current2=sol_new2;  if E_new<E_best  %把冷却过程中最好的解保存下来  E_best=E_new;  sol_best1=sol_new1;  sol_best2=sol_new2;  end  else  if rand<exp(-(E_new-E_current)/t)%(4)代价函数差  E_current=E_new;  sol_current1=sol_new1;  sol_current2=sol_new2;  else  sol_new1=sol_current1;  sol_new2=sol_current2;  end  end  plot(r,E_best,'*')  hold on  end  t=t*a;%(6)降温  
end  disp('最优解为:')  
disp(sol_best1)  
disp(sol_best2)  
disp('目标表达式的最小值等于:')  
disp(E_best)  

粒子群算法

基本步骤
1 找出待优化的目标函数
2 设定种群规模大小(不会设置可直接采用下方代码的)
3 替换掉下方公式即可

%% 初始化种群  
f= @(x)x .* sin(x) .* cos(2 * x) - 2 * x .* sin(3 * x); % 函数表达式    % 求这个函数的最大值  
figure(1);ezplot(f,[0,0.01,20]);  
N = 50;                         % 初始种群个数  
d = 1;                          % 空间维数  
ger = 100;                      % 最大迭代次数       
limit = [0, 20];                % 设置位置参数限制  
vlimit = [-1, 1];               % 设置速度限制  
w = 0.8;                        % 惯性权重  
c1 = 0.5;                       % 自我学习因子  
c2 = 0.5;                       % 群体学习因子   
for i = 1:d  x = limit(i, 1) + (limit(i, 2) - limit(i, 1)) * rand(N, d);%初始种群的位置  
end  
v = rand(N, d);                  % 初始种群的速度  
xm = x;                          % 每个个体的历史最佳位置  
ym = zeros(1, d);                % 种群的历史最佳位置  
fxm = zeros(N, 1);               % 每个个体的历史最佳适应度  
fym = -inf;                      % 种群历史最佳适应度  
hold on  
plot(xm, f(xm), 'ro');title('初始状态图');  
figure(2)  
%% 群体更新  
iter = 1;  
record = zeros(ger, 1);          % 记录器  
while iter <= ger  fx = f(x) ; % 个体当前适应度     for i = 1:N        if fxm(i) < fx(i)  fxm(i) = fx(i);     % 更新个体历史最佳适应度  xm(i,:) = x(i,:);   % 更新个体历史最佳位置  end   end  
if fym < max(fxm)  [fym, nmax] = max(fxm);   % 更新群体历史最佳适应度  ym = xm(nmax, :);      % 更新群体历史最佳位置  end  v = v * w + c1 * rand * (xm - x) + c2 * rand * (repmat(ym, N, 1) - x);% 速度更新  % 边界速度处理  v(v > vlimit(2)) = vlimit(2);  v(v < vlimit(1)) = vlimit(1);  x = x + v;% 位置更新  % 边界位置处理  x(x > limit(2)) = limit(2);  x(x < limit(1)) = limit(1);  record(iter) = fym;%最大值记录  x0 = 0 : 0.01 : 20;  plot(x0, f(x0), 'b-', x, f(x), 'ro');title('状态位置变化')  pause(0.1)  iter = iter+1;  
end  
figure(3);plot(record);title('收敛过程')  
x0 = 0 : 0.01 : 20;  
figure(4);plot(x0, f(x0), 'b-', x, f(x), 'ro');title('最终状态位置')  
disp(['最大值:',num2str(fym)]);  
disp(['变量取值:',num2str(ym)]);  

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Appium设备交互API

设备交互API指的是操作设备系统中的一些固有功能&#xff0c;而非被测程序的功能&#xff0c;例如模拟来电&#xff0c;模拟发送短信&#xff0c;设置网络&#xff0c;切换横竖屏&#xff0c;APP操作&#xff0c;打开通知栏&#xff0c;录屏等。 模拟来电 make_gsm_call(phon…

Douyin视频详情数据API接口(视频详情,评论)

抖音官方并没有直接提供公开的视频详情数据采集API接口给普通用户或第三方开发者。抖音的数据采集通常受到严格的限制&#xff0c;以保护用户隐私和平台安全。 请求示例&#xff0c;API接口接入Anzexi58 如果您需要获取抖音视频详情数据&#xff0c;包括评论、点赞等&#xff…

软考 - 系统架构设计师 - 关系模型的完整性规则

前言 关系模型的完整性规则是一组用于确保关系数据库中数据的完整性和一致性的规则。这些规则定义了在关系数据库中如何存储、更新和查询数据&#xff0c;以保证数据的准确性和一致性。 详情 关系模型的完整性规则主要包括以下三类&#xff1a; 实体完整性规则 这是确保每个…

C++基本语法

C是如何工作的 文章目录 C是如何工作的1、新建Hello World工程1.1使用Visual Studio新建项目1.2 HelloWorld1.2.1 命名空间1.2.2 输出输出 1.3 注释1.4 函数1.4.1 使用有返回的函数1.4.2 自定义函数 1、新建Hello World工程 1.1使用Visual Studio新建项目 按照下面的图片&…

Linux 性能分析工具 perf 的使用指南

什么是perf&#xff0c;可以用来干什么 perf 是 Linux 内核的性能分析工具集&#xff0c;它可以用来监控和分析系统和应用程序的性能。perf 提供了一系列功能强大的子命令&#xff0c;可以帮助开发者和系统管理员&#xff1a; 监控 CPU 使用率&#xff1a;识别最消耗 CPU 的代…

x86的内存分段机制

8086 是 Intel 公司第一款 16 位处理器&#xff0c;诞生于 1978 年&#xff0c;所以说它很古老。 一.8086 的通用寄存器 8086 处理器内部共有 8 个 16 位的通用处理器&#xff0c;分别被命名为 AX、 BX、 CX、 DX、 SI、 DI、 BP、 SP。如下图所示。 “通用”的意思是…

利用python搭建临时文件传输服务

场景 如果想从一台服务器上传输文件又多种方法&#xff0c;其中常见的是利用scp进行传输&#xff0c;但是需要知道服务器的账号密码才能进行传输&#xff0c;但有时候我们并不知道账号密码&#xff0c;这个时候我们就可以通过python -m SimpleHTTPServer 命令进行传输文件 启…

C语言例4-14:从键盘输入小写字母转换成大写字母并输出。

代码如下&#xff1a; //从键盘输入小写字母转换成大写字母并输出。 #include<stdio.h> int main(void) {char c1,c2;printf("输入小写字母&#xff1a; \n");c1 getchar(); //从键盘输入一个字符putchar(c1);printf(",%d\n",c1);c2 c1-32; …

Git基础(23):Git分支合并实战保姆式流程

文章目录 前言准备正常分支合并1. 创建两个不冲突分支2. 将dev合并到test 冲突分支合并1. 制造分支冲突2. 冲突合并 前言 Git分支合并操作 准备 这里先在Gitee创建了一个空仓库&#xff0c;方便远程查看内容。 正常分支合并 1. 创建两个不冲突分支 &#xff08;1&#xf…

C++ 控制语句(二)

一 break continue和goto语句 1 break语句 在switch语句中&#xff0c;分隔case子句&#xff0c;跳出switch语句。 在循环语句中可以立即终止循环语句的执行。 2 continue语句 功能:在一次循环过程中,跳过continue语句以下的语句,直 接进入下一次循环操作。 3 goto语句 …

Poetry是一个现代的Python包管理工具

Poetry是一个现代的Python包管理工具&#xff0c;它旨在简化包的声明、管理和发布过程。Poetry解决了Python项目中的一些常见问题&#xff0c;如依赖管理、包版本控制以及项目的打包和发布。它被设计为一站式的解决方案&#xff0c;提供了一系列的特性来处理Python包的生命周期…

Linux文件系统和日志管理

文件系统的组成 Linux 文件系统会为每个文件分配两个数据结构&#xff1a;索引节点&#xff08;index node&#xff09; 和 目录项&#xff08;directory entry&#xff09;&#xff0c;它们主要用来记录文件的元信息和目录层次结构。 索引节点&#xff0c;也就是 inode&#…

Rustdesk客户端编译后固定密码不稳定时好时坏

环境&#xff1a; rustdesk1.19 问题描述&#xff1a; Rustdesk客户端编译后固定密码不稳定时好时坏 解决方案&#xff1a; 出现固定密码不稳定的问题可能有多种原因&#xff0c;下面是一些可能的解决方法&#xff1a; 密码强度&#xff1a;确保所设置的固定密码足够强大…

智能写作利器ChatGPT:提升论文写作效率

ChatGPT无限次数:点击直达 智能写作利器ChatGPT&#xff1a;提升论文写作效率 在当今信息爆炸的时代&#xff0c;快速高效地撰写论文对于科研工作者来说至关重要。智能写作工具ChatGPT的出现为我们提供了强大的支持&#xff0c;它不仅能够提升论文写作的效率&#xff0c;还能够…

Doris删除数据工具

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 对于Doris的 Unique 模型&#xff0c;在删除数据的时候只能根据key删除&#xff0c;如果使用其他条件就会报错 整体架构流程 先获得表的key&#xff0c;然后在通过输入的条件获得key的所有值&#xff0c;最后通过key的…

王道c语言-二叉树前序、中序、后序、层次遍历

main.cpp #include "function.h"//abdhiejcfg 前序遍历深度优先遍历 abdhiejcfg void PreOrder(BiTree p) {if (p ! NULL) {printf("%c ", p->c);//等价于putchar(p->c);等价于visit函数伪代码PreOrder(p->lchild);PreOrder(p->rchild);} }//…

【数据结构】顺序表的实现——静态分配

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;数据结构 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…

【微服务篇】深入理解微服务可观测性原理(Log,Metric,Trace)

可观测性 微服务的可观测性是指通过收集、分析和监控微服务架构中各个组件的数据来理解其行为和性能的能力。这对于确保系统的健康、响应性和安全至关重要。可观测性主要从日志&#xff08;Log&#xff09;、指标&#xff08;Metric&#xff09;和追踪&#xff08;Trace&#…

指针数组的有趣程序【C语言】

文章目录 指针数组的有趣程序指针数组是什么&#xff1f;指针数组的魅力指针数组的应用示例&#xff1a;命令行计算器有趣的颜色打印 结语 指针数组的有趣程序 在C语言的世界里&#xff0c;指针是一种强大的工具&#xff0c;它不仅能够指向变量&#xff0c;还能指向数组&#…

【Java程序设计】【C00344】基于Springboot的船舶维保管理系统(有论文)

基于Springboot的船舶维保管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 项目获取 &#x1f345;文末点击卡片获取源码&#x1f345; 开发环境 运行环境&#xff1a;推荐jdk1.8&#xff1b; 开发工具&#xff1a;eclipse以及i…