文章目录

  • 引入
    • 1.1:模拟退火与蒙特卡洛模拟的区别
    • 1.2:爬山法与模拟退火法的区别
    • 1.3:基于爬山法的解决方案
  • 2:模拟退火算法
    • 2.1 算法流程
    • 2.2 C_t的设置
    • 2.3 时间t的实现与停止搜索的条件
    • 2.4 如何产生新解(最关键,可通过查询论文或自己制定)
  • 3. 例题学习
    • 3.1 含上下界约束的规非线性划问题
    • 3.2 旅行商问题(无指定起点)
  • 3.2 旅行售货员(TSP)问题 (有起点限制)
    • 3.3 书店买书问题
    • 3.4 背包问题
  • Reference

引入

1.1:模拟退火与蒙特卡洛模拟的区别

1.1 蒙特卡洛模拟:
① 随机生成多组解–>② 验证是否满足约束条件–>③ 将满足约束条件的加入“可行集”中,并计算出可行集中每个解对应的目标函数值–>④ 找出最优解

1.2 区别
①蒙特卡洛模拟法在搜索过程中不改进搜索策略,称为盲目搜索
②启发式搜索算法会利用中间信息改进搜索策略

1.2:爬山法与模拟退火法的区别

2.1 爬山法:
① 在解空间随机生成一个初始解
② 向左右邻域走一步,比较大小选择移动方向
③ 不断重复步骤,直到找到一个极大值点
缺点容易找到局部最优解(找到不符合优化目标的就退出循环)

1.3:基于爬山法的解决方案

为了解决爬山法容易找到局部最优解的情况,设定概率p(0<p<1),表示接受非当前优化目标解的概率。
(1)f(xi)与f(xj)越接近,概率p越大

(2)接受新解的概率p越大意味着解空间搜索范围越大
(3)搜索前期搜索范围较大,搜索后期搜索范围较小。即前期概率p大,后期概率p小

(4)C_t表示时间相关的系数,时间越长,p越小,C_t越大。C_t关于t递增

2:模拟退火算法

2.1 算法流程

假设求最大值的问题
(1)随机生成解A,计算A对应的目标函数值f(A)
(2)在A附近随机生成B,验证B是否满足约束条件后,计算B对应的目标函数值f(B)
(3)若f(B) > f(A),f(A) = f(B),作为当前最优解
(4)若f(B) < f(A),计算接受概率P生成随机数r∈[0,1],若r < P则接受解B并将B值赋值给A

2.2 C_t的设置


其中T_0=100与α=0.95为初始数据设置,C_t = 1 / T_t

2.3 时间t的实现与停止搜索的条件

(1)通过循环实现t的迭代
通过迭代次数表示时间t的变化,并在同一个t下进行多次搜索。可以通过两层循环实现
for i=1:Max %时间t
for j=1:N %表示相同t内的搜索次数

(2)什么时候停止搜索
① 达到指定迭代次数(循环执行完毕)
② 达到指定温度,比如T < 0.000001
③ 找到最优解连续M次不改变

2.4 如何产生新解(最关键,可通过查询论文或自己制定)

(1)matlab内置函数定义方法

y = randn(1,narvs);         %生成N(0,1)的随机数
z = y / sqrt(sum(y .^2));  %生成z
x_new = x0 + T*z;         %根据规则生成x_new
%定义域调整
for j=1:narvsif x_new(j) < x_lb(j)r = rand(1);x_new(j) = r*x_lb(j)+(1-r)*x0(j);elseif x_new(j) > x_ub(j)r = rand(1);x_new(j) = r*x_ub(j)+(1-r)*x0(j);end
end

3. 例题学习

步骤一:绘制图形(限制在三维以下)
步骤二:参数初始化
步骤三:随机生成初始解并scatter标点
步骤四:定义中间变量
步骤五:模拟退火算法
步骤六:画出最大y值图形

3.1 含上下界约束的规非线性划问题

例题1:

SA 模拟退火: 求解函数y = 11sin(x) + 7cos(5*x)在[-3,3]内的最大值

产生新解的方法:matlab内置函数生成方法 x_new = x0+z*T
① code.m

clc,clear;
%% 第一步:绘制函数图形
x = -3:0.1:3;
y = 11*sin(x) + 7*cos(5*x);
plot(x,y,'b-')
hold on                 %不关闭图形%% 第二步:参数初始化
%需修改项
narvs = 1;             %变量个数(需修改)
maxgen = 200;          %最大迭代次数
Lk = 100;              %每个温度下的搜索次数
x_lb = -3;             %变量下界
x_ub = 3;              %变量上界%不需修改项
T0 = 100;              %初始温度
T = T0;             %第一次迭代时的温度
alfa = 0.95;%% 第三步:随机生成初始解 unifrnd(lb,ub)  标点scatter
x0 = zeros(1,narvs);
for i=1:narvsx0(i) = unifrnd(x_lb(i),x_ub(i));
end
y0 = Obj_fun1(x0);
h = scatter(x0,y0,'*r');  % scatter是绘制二维散点图的函数%% 第四步:定义中间变量
max_y = y0;                    %初始化找到的最佳解对应的函数值y0
MAXY = zeros(maxgen,1);        %每一次外层循环求得的max_y%% 第五步:模拟退火过程
% 双重循环迭代查找
for iter= 1:maxgenfor j=1:Lk%(1)产生新解,此处的方法是matlab内置函数方法y = randn(1,narvs);        %生成N(0,1)的随机数z = y / sqrt(sum(y .^2));x_new = x0 + T*z;      %生成新解公式for j=1:narvsif x_new(j) < x_lb(j)r = rand(1);x_new(j) = r*x_lb(j)+(1-r)*x0(j);elseif x_new(j) > x_ub(j)r = rand(1);x_new(j) = r*x_ub(j)+(1-r)*x0(j);endend%(2)生成新解函数值x1 = x_new;y1 = Obj_fun1(x1);%(3)搜索,当满足优化目标更新;不满足则求解接受概率if y1 > y0x0 = x1;y0 = y1;elsep = exp(-(y0-y1)/T); % 根据Metropolis准则计算一个概率if rand(1) < px0 = x1;y0 = y1;endend%(4)判断本轮内部搜索是否为最佳解if y0 > max_ymax_y = y0;best_x = x0;endend%(5)一个温度情况结束,更新温度与最优值并画图MAXY(iter) = max_y;T = T*alfa;pause(0.01)h.XData = x0;h.YData = Obj_fun1(x0);
end
%(6)模拟退火结束后的可视化表述
disp('最佳的位置是:'); disp(best_x)
disp('此时最优值是:'); disp(max_y)
pause(0.5)
h.XData = [];  h.YData = [];  % 将原来的散点删除
scatter(best_x,max_y,'*r');  % 在最大值处重新标上散点
title(['模拟退火找到的最大值为', num2str(max_y)])  % 加上图的标题%% 第六步:画出最大y值图形
figure
plot(1:maxgen,MAXY,'r-');
xlabel("迭代次数");
ylabel("y值");

② Obj_fun1.m

function y = Obj_fun1(x)y = 11*sin(x) + 7*cos(5*x);
end

结果:

最佳的位置是:
1.2750
此时最优值是:
17.4928

例题2:求解下面这个函数的最大值

知识点
(1)如何生成三维网格图
[x1,x2]=meshgrid(x1,x2) --> mesh(x1,x2,y)

①home1.m

clc,clear;
%SA模拟退火法解非线性规划问题
%%第一步:绘制图形
x1 = -3:0.01:12,1;
x2 = 4.1:0.01:5.8;
[x1,x2] = meshgrid(x1,x2);
y = 21.5 + x1.*sin(4*pi*x1) + x2.*sin(20*pi*x2);
figure
mesh(x1,x2,y);
xlabel('x1');ylabel('x2');zlabel('y');
axis vis3d;
hold on%%第二步:初始化参数值
nvars = 2;  %变量的个数
T0 = 200;
T = T0;
alfa = 0.95;
maxgen = 1000;
Lk = 300;
lb = [-3 4.1];
ub = [12.1 5.8];%%第三步:随机生成初始解
x0 = zeros(1,nvars);
for i=1:nvarsx0(i) = unifrnd(lb(i),ub(i));
end
y0 = Obj_fun3(x0);
h = scatter3(x0(1),x0(2),y0,'*r');%%第四步:定义中间变量
max_y = y0;
best_x = x0;
MAXY = zeros(maxgen,1);%%第五步:模拟退回
for iter=1:maxgenfor k=1:Lk%(1)产生新解(采用matlab内置方法产生新解)y = randn(1,nvars);z = y / sqrt(sum(y.^2));x_new = x0+T*z;for i=1:nvarsif x_new(i) < lb(i)r = rand(1);x_new(i) = r*lb(i)+(1-r)*x0(i);elseif x_new(i) > ub(i)r = rand(1);x_new(i) = r*ub(i)+(1-r)*x0(i);endend%(2)计算新解的函数值x1 = x_new;y1 = Obj_fun3(x1);%(3)当满足优化目标则更新,不满足则生成接受概率if y1 > y0x0 = x1;y0 = y1;     %注意 是将新值赋值给x0else p = exp(-(y0-y1)/T);if rand(1) < px0 = x1;y0 = y1;endend%(4)更新本轮的最优解if y0 > max_ymax_y = y0;best_x = x0;endend%(5)一个温度结束 保存最优值并更新温度MAXY(iter) = max_y;T = T*alfa;pause(0.01);h.XData = x0(1);h.YData = x0(2);h.ZData = y0;
enddisp('最佳的位置是:'); disp(best_x)
disp('此时最优值是:'); disp(max_y)%%第六步:画出每次迭代最大值图形与最优散点位置
pause(1);
h.XData = [];
h.YData = [];
h.ZData = [];
scatter3(best_x(1),best_x(2),max_y,'*r');
title(['模拟退火找到的最大值为',num2str(max_y)]);figure
plot(1:maxgen,MAXY,'b-');
xlabel('迭代次数');
ylabel('y的值');

②Obj_fun3.m

function y = Obj_fun3(x)y = 21.5 + x(1)*sin(4*pi*x(1)) + x(2)*sin(20*pi*x(2));
end

结果:

最佳的位置是:
11.6255 5.7250
此时最优值是:
38.8503

3.2 旅行商问题(无指定起点)

问题描述:给定一系列城市和每对城市之间的距离,求解访问每一座城市一次并回到起始城市的最短回路(此时无固定的起点与终点)。
① 优化目标:访问城市间的路径最短
路程d(i,j):本题中设定所有城市均可相通。在具体题目中可以根据实际连通情况设定距离矩阵d
② 初始化方法:randperm产生1-n的随机序列作为当前访问路径
③ 产生新解的方法:引入多种算子 (如:移位, 交换, 倒置等等)来产生新解空间。并且以一定的概率来决定运用哪种算子来产生新的解空间。

参考:苗卉, 杨韬. 旅行商问题(TSP)的改进模拟退火算法[J]. 微计算机信息, 2007
① test_TSP.m

clc,clear;
rng('shuffle')    % 根据当前时间为随机数生成函数提供种子 每次生成随机序列
%% 第一步:绘制函数图形(本题为城市结点分布位置)
coord = [11003.611100,42102.500000;11108.611100,42373.888900;11133.333300,42885.833300;11155.833300,42712.500000;11183.333300,42933.333300;11297.500000,42853.333300;11310.277800,42929.444400;11416.666700,42983.333300;11423.888900,43000.277800;11438.333300,42057.222200;11461.111100,43252.777800;11485.555600,43187.222200;11503.055600,42855.277800;11511.388900,42106.388900;11522.222200,42841.944400;11569.444400,43136.666700;11583.333300,43150.000000;11595.000000,43148.055600;11600.000000,43150.000000;11690.555600,42686.666700;11715.833300,41836.111100;11751.111100,42814.444400;11770.277800,42651.944400;11785.277800,42884.444400;11822.777800,42673.611100;11846.944400,42660.555600;11963.055600,43290.555600;11973.055600,43026.111100;12058.333300,42195.555600;12149.444400,42477.500000;12286.944400,43355.555600;12300.000000,42433.333300;12355.833300,43156.388900;12363.333300,43189.166700;12372.777800,42711.388900;12386.666700,43334.722200;12421.666700,42895.555600;12645.000000,42973.333300];
n = size(coord,1);
figure
plot(coord(:,1),coord(:,2),'o');  %画出城市分布散点图
for i=1:ntext(coord(i,1)+0.01,coord(i,2)+0.01,num2str(i));
end
hold on
% 计算城市间距离(也可以根据图的相连情况设定距离矩阵d)
d = zeros(n,n);
for i=1:nfor j=i+1:ncoord_i = coord(i,:); coord_j = coord(j,:);x_i = coord_i(1); y_i = coord_i(2);x_j = coord_j(1); y_j = coord_j(2);d(i,j) = sqrt((x_i-x_j)^2+(y_i-y_j)^2);end
end
d = d+d';%% 第二步:参数初始化
T0 = 100;      % 初始温度
T = T0;
maxgen = 1000; % 迭代次数
Lk = 500;      % 每次迭代的搜索次数
alpfa = 0.95;%% 第三步:随机生成一个初始解
path0 = randperm(n);       % 生成1-n的随机序列作为城市遍历顺序
result0 = calculate_tsp_d(path0,d);    % 计算当前序列的总路程长度%% 第四步 定义中间值
min_result = result0;
RESULT = zeros(margen,1);%% 第五步:模拟退火
for iter=1:maxgenfor i=1:Lk% (1)产生新解并计算新的目标值path1 = gen_new_path(path0);result1 = calculate_tsp_d(path1,d);if result1 < result0    % 符合优化目标result0 = result1;path0 = path1;else  % (2) 不符合优化目标计算接受概率p = exp(-(result1-result0)/T);if rand(1) < p     %满足接受概率result0 = result1;path0 = path1;endend% (3) 更新本轮最优解if result0 < min_resultmin_result = result0;best_path = path0;endend% (4)保存本轮最优解并使温度下降RESULT(iter) = min_result;T = T*alpfa;
end
disp('最佳的方案是:'); disp(mat2str(best_path))
disp('此时最优值是:'); disp(min_result)%% 第六步:可视化最优结果
best_path = [best_path,best_path(1)];
n = n+1;
for i = 1:n-1 j = i+1;coord_i = coord(best_path(i),:);   x_i = coord_i(1);     y_i = coord_i(2); coord_j = coord(best_path(j),:);   x_j = coord_j(1);     y_j = coord_j(2);plot([x_i,x_j],[y_i,y_j],'-b')                    pause(0.02)  % 暂停0.02s再画下一条线段hold on
end%% 第七步:画出每次迭代的最优结果
figure
plot(1:maxgen,RESULT,'b-');
xlabel('迭代次数');
ylabel('最短路径');

② calculate_tsp_d.m:计算当前城市序列的长度

function result = calculate_tsp_d(path,d)n = length(path);result = 0;for i=1:n-1result = result+d(path(i),path(i+1));endresult = result+d(path(n),path(1));
end

③ gen_new_path.m
引入多种算子 (如:移位, 交换, 倒置等等)来产生新解空间。并且以一定的概率来决定运用哪种算子来产生新的解空间。

function path1 = gen_new_path(path0)n = length(path0);p1 = 0.33;      % 交换的概率p2 = 0.33;      % 移位的概率r = rand(1);if r < p1        % 交换产生新解% 随机产生两个位置并交换c1 = randi(1,n);c2 = randi(1,n);path1 = path0;path1(c1) = path0(c2);path1(c2) = path0(c1);elseif r < p1+p2    % 移位产生新解% 随机产生三个位置 排序后将四段序列切割重组c1 = randi(1,n);c2 = randi(1,n);c3 = randi(1,n);sort_c = sort([c1 c2 c3]);   % 按照从小到大排序c1 = sort_c(1); c2 = sort_c(2);c3 = sort_c(3);temp1 = path0(1:c1-1);temp2 = path0(c1:c2);temp3 = path0(c2+1:c3);temp4 = path0(c3+1:end);path1 = [temp1 temp2 temp3 temp4];else  % 倒置法产生新路径c1 = randi(1,n);c2 = randi(1,n);if c1 > c2       % 交换保证c1 < c2tmp = c1;c1 = c2;c2 = tmp;endtemp1 = path0(1:c1-1);temp2 = path0(c1:c2);temp2 = fliplr(temp2);% 左右对称翻转 fliplr,上下对称翻转 flipudtemp3 = path0(c2+1:end);path1 = [temp1 temp2 temp3];end
end

结果:

此时最优值是:
6.6594e+03

3.2 旅行售货员(TSP)问题 (有起点限制)

问题描述:假设起点城市 M 和终点城市 N 是给定的,要我们求出一个从 M 出发依次经过所有城市并最终到达 N 的最短路径
(1)优化目标:使形成的TSP回路路径最短
(2)解空间:1-n的序列
(3)产生新解的方法:同3.2无起点限制的方法

改进之处:在产生①初始解 ②新解 的时候搜索指定起点的位置,并将指定起点移位到序列1号位置。

① TSP2.m

clc,clear;
%利用SA模拟退火算法解决TSP问题
rng('shuffle');         %根据当前时间生成随机函数种子%%第一步:绘制函数图形(使用函数前修改为实际图的信息即可)
%(1)设置坐标画出图形
%coord = [1.2 2;3 5;2 0.5;1.5 1];
coord = [11003.611100,42102.500000;11108.611100,42373.888900;11133.333300,42885.833300;11155.833300,42712.500000;11183.333300,42933.333300;11297.500000,42853.333300;11310.277800,42929.444400;11416.666700,42983.333300;11423.888900,43000.277800;11438.333300,42057.222200;11461.111100,43252.777800;11485.555600,43187.222200;11503.055600,42855.277800;11511.388900,42106.388900;11522.222200,42841.944400;11569.444400,43136.666700;11583.333300,43150.000000;11595.000000,43148.055600;11600.000000,43150.000000;11690.555600,42686.666700;11715.833300,41836.111100;11751.111100,42814.444400;11770.277800,42651.944400;11785.277800,42884.444400;11822.777800,42673.611100;11846.944400,42660.555600;11963.055600,43290.555600;11973.055600,43026.111100;12058.333300,42195.555600;12149.444400,42477.500000;12286.944400,43355.555600;12300.000000,42433.333300;12355.833300,43156.388900;12363.333300,43189.166700;12372.777800,42711.388900;12386.666700,43334.722200;12421.666700,42895.555600;12645.000000,42973.333300];
n = size(coord,1);
figure
plot(coord(:,1),coord(:,2),'o');
hold on
for i=1:ntext(coord(i,1)+0.01,coord(i,2)+0.01,num2str(i));
end
%(2)做出距离矩阵
% dist = [0 30 6 4
%     30 0 5 10
%     6 5 0 20
%     4 10 20 0];
dist = zeros(n,n);
for i=1:nfor j=i+1:ncoord_i = coord(i,:); coord_j = coord(j,:);x_i = coord_i(1); y_i = coord_i(2);x_j = coord_j(1); y_j = coord_j(2);dist(i,j) = sqrt((x_i-x_j)^2+(y_i-y_j)^2);end
end
dist = dist+dist';
%(3)设置初始起点
start = 3;
%%第二步:设置参数初始值
T0 = 200;
T = T0;
alfa = 0.95;
maxgen = 2000;
Lk = 200;%%第三步:随机生成初始解
path0 = randperm(n);
%(1)将指定的起点交换至序列首位
index = find(path0==start);
path0(index) = path0(1);
path0(1) = start;
%(2)计算tsp初始值
result0 =calculate_tsp_d(path0,dist);%%第四步:定义中间变量
min_result = result0;
RESULT = zeros(maxgen,1);
best_path = path0;%%第五步:模拟退火
for iter=1:maxgenfor i=1:Lk%(1)生成新解path1 = gen_new_path(path0);index = find(path1==start);path1(index) = path1(1);path1(1) = start;result1 = calculate_tsp_d(path1,dist);%(2)判断是否更新result0,若不符合优化目标则计算接受概率if result1 < result0result0 = result1;path0 = path1;elsep = exp(-(result1-result0)/T);if rand(1) < p result0 = result1;path0 = path1;endend%(3)更新本轮最优解if result0 < min_resultmin_result = result0;best_path = path0;endend%(4)保存本轮最优解并使温度降低RESULT(iter) = min_result;T = T*alfa;
enddisp('最佳的方案是: '); disp(mat2str(best_path));
disp('此时的最优值是: ');disp(min_result);%%第六步:可视化最短路径情况
best_path = [best_path best_path(1)];
n = n+1;
for i=1:n-1j = i+1;coord_i = coord(best_path(i),:); coord_j = coord(best_path(j),:);x_i = coord_i(1); y_i = coord_i(2);x_j = coord_j(1); y_j = coord_j(2);plot([x_i,x_j],[y_i,y_j],'-b');pause(0.25);hold on
end%%第七步:画出每次迭代的最优结果
figure
plot(1:maxgen,RESULT,'b-');
xlabel('迭代次数');
ylabel('最短路径');

结果:

最佳的方案是:
[3 4 2 1 10 14 21 29 30 32 35 37 38 33 34 36 31 27 28 24 22 25 26 23 20 15 13 16 17 18 19 11 12 9 8 7 6 5]
此时的最优值是:
6.6594e+03

3.3 书店买书问题

问题描述:某同学要从15家线上商城选购20本书,每本书在不同商家的售价以及每个商家的单词运费如下表所示,请问同学制定最省钱的选购方案。

① 优化目标:制定采购方案,使总花费最小。总花费由单价与运费组成,即与哪一本书在哪一家书店购买相关。

解空间:X(x1,x2,…,x20),其中xi ∈ [1,15]表示i本书在哪家书店购买
② 随机生成初始解:由于不同的书可以在同一家店购买,因此可以随机产生1*20的向量,向量元素取值在1~15范围内。

③ 产生新解的方法: 方法一:随机定位,随机修改。
数据: M(1520):表示第i个书店购买j书的价格 freight(151):表示i书店的运费。并保存在book_data.mat数据文件中

① Buy_book.m

clc,clear;
rng('shuffle')%% 第一步:数据初始化
load book_data
[s b] = size(M);       %s代表书店数量 b代表书本数量%% 第二步:参数初始化
T0 = 1000;
T = T0;
maxgen = 500;
Lk = 200;
alfa = 0.95;  %% 第三步:随机生成初始解
way0 = randi([1,s],1,b);   % 取值为1-15的数字
money0 = calculate_money(way0,freight,M,b);%% 第四步:定义中间过程量
min_money = money0;
MONEY = zeros(maxgen,1);%% 第五步:模拟退火
for iter=1:maxgenfor i=1:Lk% (1)生成新解与新解值way1 = gen_new_way(way0,s,b);money1 = calculate_money(way1,freight,M,b);% (2)判断是否接受新解if money1 < money0way0 = way1;money0 = money1;else% (2.1)计算接受概率p = exp(-(money1-money0)/T);if rand(1) < pway0 = way1;money0 = money1;endend% (2.2)判断是否更新当前最优解if money0 < min_moneymin_money = money0;best_way = way0;endendMONEY(iter) = min_money;T = alfa*T;
end
disp('最佳的方案是:'); disp(mat2str(best_way))
disp('此时最优值是:'); disp(min_money)%% 第六步:迭代最佳方案可视化
figure
plot(1:maxgen,MONEY,'b-');
xlabel('迭代次数');
ylabel('最小花费');

② calculate_money.m
书本费用+运费,其中运费与书本数量无关,只与在那家购买了书有关。

function money = calculate_money(way,freight,M,b)% (1)计算运费(对涉及到的商家运费求和)index = unique(way);  % unique实现数据去重money = sum(freight(index));% (2)计算书本花费for i=1:bmoney = money+M(way(i),i);end
end

③ gen_new_way.m:计算新解

function way1 = gen_new_way(way0,s,b)index = randi([1,20]);    % 随机选取一本书way1 = way0;way1(index) = randi([1,15]); % 随机更换购买的书店
end

结果:

最佳的方案是:
[6 14 6 1 6 14 1 6 14 6 14 4 4 14 14 1 4 4 1 14]
此时最优值是:
467

3.4 背包问题

问题描述:

① 优化目标:确定运送的货物,使货物的总利润最大
② 约束条件:运送货物的总重量不能超过最大载重
解空间:X(x1,x2,…,x10),其中xi=0或1

③ 随机生成的初始解:随机生成元素范围为0或1的1*10的向量
④ 新解的产生方法:

参考:梁国宏, 张生, 黄辉, et al. 一种改进的模拟退火算法求解 0-1 背包问题[J]. 广西民族大学学报(自然科学版), 2007(03):97-99.


Reference

清风模拟退火算法培训:
https://www.bilibili.com/video/BV1hK41157JL
苗卉, 杨韬. 旅行商问题(TSP)的改进模拟退火算法[J]. 微计算机信息, 2007
梁国宏, 张生, 黄辉, et al. 一种改进的模拟退火算法求解 0-1 背包问题[J]. 广西民族大学学报(自然科学版), 2007(03):97-99.

国赛培训——最优化智能算法——模拟退火相关推荐

  1. 计算机检测维修与数据恢复国赛培训线上直播课火热进行中

    红警(中国)维修连锁,已于2020年2月份正式上线"网上教学"模块,利用"互联网+教育"进行直播教学. 学生在线学习 线上 直播课 一.培训目标 通过理论与实战 ...

  2. 2018年数学建模国赛B题 智能RGV的动态调度策略

    第一种情况大致思路: 每秒判断各个CNC的状态,若工作完成或者是出于空闲状态下则向RGV发出一个请求.同时,RGV每秒判断自己的状态(上下料.移动.闲置.清洗等),如果是处于闲置状态,则启用调度算法, ...

  3. 国赛培训——随机化算法——蒙特卡洛模拟

    文章目录 二:实例代码 rand,randi,unifrnd,randperm normrnd,exprnd plot 数值显示 随机数种子 2.1 圆周率随机模拟计算 2.2 三门问题 2.3 排队 ...

  4. 2022 RoboCom 世界机器人开发者大赛-高职组 国赛(RC-v3 智能护理中心统计)

    RC-v3 智能护理中心统计 题意: 给出各管理节点的关系,和每个管理节点的照护老人数量. 两种操作:1. 转院. 2. 查询 该管理节点以下总的老人人数. 知识点: 树. #include<b ...

  5. 国赛培训——评价模型——TOSIS法

    文章目录 例题 (1)原始矩阵正向化 (2)标准化处理 (3)计算得分并归一化 代码 Reference 例题 题目:评价下表中20条河流的水质情况 注:含氧量越高越好:PH值越接近7越好:细菌总数越 ...

  6. 2022国赛数学建模A题B题C题思路分析 高教社杯

    一.思路分析 A题思路分析: (比赛开始后第一时间发布) B题思路分析: (比赛开始后第一时间发布) C题思路分析: (比赛开始后第一时间发布) 二.建模资料免费领取 数模君多次参加国赛.美赛.深圳杯 ...

  7. 2022数学建模国赛备赛阶段性记录(1-1)

    数学建模国赛培训记录,主要使用软件为MATLAB,主要内容为在数学建模竞赛中常用的操作.数学与模型以及部分练习题的解析. 一.常规操作 1.基本运算 MATLAB内四则运算相当于计算机的加减乘除,对应 ...

  8. 数学建模国赛 常考赛题类型(模拟退火算法、粒子群算法、遗传算法)

    不知小伙伴们有没有发现,在1992~2020年历年国赛赛题中,优化类赛题所占的比例非常大,如在近五年的题目中: 2016A:系泊系统的设计: 2017B:"拍照赚钱"的任务定价 2 ...

  9. 数学建模竞赛常用算法介绍及对应国赛获奖论文分类整理分享

    数学建模竞赛中应当掌握的算法: 数学建模国赛每年的题型都类似,除非是个人专业性很强,否则作者不太建议选择华为出的题,剩余的题型每年都类似,是有迹可循的,毕竟站在巨人的肩膀上看的更远.下面就介绍一些数模 ...

  10. 备战数学建模国赛,快速搞定算法模型!

    全世界只有3.14 % 的人关注了 青少年数学之旅 说到数学建模,大家的第一反应就是国赛.美赛等数学建模比赛,但这只是冰山一角,不过这个反应却也很正常,因为很多小伙伴接触数学建模的契机,大部分还是因为 ...

最新文章

  1. boost::random模块使用多精度类型测试所有与浮点相关的生成器和分布的测试程序
  2. python基本数据类型包括哪些_python入门3——基本数据类型
  3. spark出现task不能序列化错误的解决方法 org.apache.spark.SparkException: Task not serializable
  4. 二叉树先序遍历,中序遍历,后序遍历,层次遍历学习总结及完整C/C++代码
  5. 轻博客:企业品牌互动传播利器
  6. 中国即时护理胆固醇监测设备行业市场供需与战略研究报告
  7. android studio后端写在哪里_c++写的在终端上的2048游戏
  8. paip.hibernate list 返回位null的解决
  9. Word、Excel组合批量打印信封(转)
  10. 网站优化:测试网站速度的8款免费工具推荐
  11. 动态改变Input和Textarea值Vue数据没有绑定的解决办法
  12. OpenCV——图像连通域
  13. 445端口telnet不通经验总结
  14. 按键精灵 打开windows系统应用
  15. 成考自考本科生可以申请德国大学吗?
  16. online python compiler_在线控制台编译器:Online Console Compiler
  17. 无人驾驶车辆模型预测控制(一)
  18. 技术不局限于赚钱,还应当保护我们的家人
  19. 【ybtoj】银河英雄传说
  20. Go 打印结构体(struct)信息:fmt.Printf(“%+v“, user)

热门文章

  1. 【YOLO】目标检测第三步——用Pascal voc 2012 数据集训练YOLO网络
  2. 对PVP手游产品《王者荣耀》的一些思考
  3. 平安性格测试题及答案_平安人寿做性格测试怎么?
  4. Lodash的两种安装方式(npm安装/CDN)以及简单使用
  5. 下一代Windows家庭服务器Vail本地化版本发布
  6. 品读余光中的诗--《在雨中等你》
  7. 多个工作表数据汇总怎么做?
  8. Windows10快捷键合集
  9. 中国移动车联网 V2X 平台白皮书
  10. JavaEE程序猿的Java世界观⑤