Zero.写作动机
对给定参数区间内部进行搜索,寻找到最优参数近似解的方法有很多。比如网格搜索。但是网格搜索太过暴力,往往花销过大。这里介绍一种新的参数寻优方法——蒙特卡洛树搜索。
网络上关于蒙特卡洛方法几乎清一色都是在介绍Buffon实验并以此估计某个量。这里,我们介绍蒙特卡洛树用于参数寻优。
一、模型原理
下面推荐几个博客,这些文章已经介绍得很好了:
①https://blog.csdn.net/ljyt2/article/details/78332802
②https://www.jianshu.com/p/a34f06885ef8
二、编程实现
Version one: Python
https://www.jianshu.com/p/a34f06885ef8
Version Two: Matlab
鉴于实际需求,笔者在Python版本的基础上实现了matlab版本,涉及到matlab的面向对象编程。读者诸君按需获取即可
state.m文件
classdef State < handle
properties
value
round
choices
PATH
x2 %因为假定现在只用MCST找到第三步迭代的最优参数
y
sigma
im
end
methods
function self= State(x2,y,sigma,im)
%在这里进行初始化
self.value = 0;
self.round = 0;
self.choices = [];
self.PATH = [0.1:0.2:3];
self.x2 = x2;
self.y = y;
self.sigma = sigma;
self.im = im;
end
function state = new_state(self)
choice = randperm(numel(self.PATH));
choice = self.PATH(choice(1));%从一维数组中进行随机采样
state = State(self.x2,self.y,self.sigma,self.im);
%对于辣椒的彩色图片,第三步迭代的默认两个参数是0.7, 0.8
value_ = 0;
if numel(self.choices) == 1 %当前在选择第二个参数
%计算潜在的value
x3 = step(self.x2, self.y, self.sigma^2, 15, 7, self.choices(1), choice);
value_ = - (sum(sum((x3 - self.im).^2)) / numel(x3)); %反向来
elseif numel(self.choices) == 0 %当前在选择第一个参数
%计算潜在的value
x3 = step(self