顺序设计II

这个小插曲展示了如何使用该包顺序细化DGP仿真器包,每个仿真器都模拟模拟器。

加载程序包

图书馆(lhs)
图书馆(ggplot2)
图书馆(拼凑)
图书馆(千磅/平方英寸)

构建合成模拟器

我们构造了一个具有一维输入的合成模拟器之间[0, 1]和三维输出。

(f)<- 功能(x){
第1页= (30*((2*x个-1)/2-0.4)^5)*余弦(20*((2*x个-1)/2-0.4))
第2年= 1/*(2*(2*x个- 1))+2/*经验(-30*(2*(2*x个-1))^2)+1/
第三年=((7.5*x)+1)/2
  返回(cbind公司(y1、y2、y3)
}

注意,函数的定义方式是x个并且输出是矩阵。下图显示了模拟器三个输出的真正功能形式[0, 1]:

密度_x<- 序列(0,1,长度= 200)
稠密_y<- (f)(密度_x)
输出1<- 数据帧(“x” =密度_x,“是” =dense_y[,1])
输出2<- 数据帧(“x” =密度_x,“是” =dense_y[,2])
输出3<- 数据帧(“x” =密度_x,“是” =dense_y[,])
第1页<- ggplot图(数据=输出t1,原子发射光谱(x个=x、,年=y) )+ 地理线(颜色= 'dodgerblue2')+ gg标题('输出1')+ 主题(绘图标题= 元素_文本(尺寸= 10))
第2页<- ggplot图(数据=输出2,原子发射光谱(x个=x、,年=y) )+ 地理线(颜色= “#E31A1C”)+ gg标题('输出2')+ 主题(绘图标题= 元素_文本(尺寸= 10))
第3页<- ggplot图(数据=输出3,原子发射光谱(x=x、,年=y) )+ 地理线(颜色= “绿色4”)+ gg标题('输出3')+ 主题(绘图标题= 元素_文本(尺寸= 10))
包装图(列表(第1页、第2页、第3页)+ 绘图_注释(标题= “合成模拟器”)

我们现在用指定一个种子设置种子()从包中用于再现性

设置种子(999)

并使用maximin生成具有5个设计点的初始设计拉丁超立方体采样器:

X(X)<- 最大LHS(5,1)
Y(Y)<- (f)(十)

我们生成一个验证数据集来跟踪和停止序列设计:

验证_x<- 最大LHS(200,1)
验证_y<- (f)(validate_x)

构造一组DGP仿真器

在开始顺序设计之前,我们构建了三个DGP模拟器模拟模拟器的三个输出(f)独立地:

平方米<- 差分脉冲(X,Y[,1],连接=F)
##自动生成2层DGP结构。。。完成##正在初始化DGP模拟器。。。完成##训练DGP模拟器:##迭代500:第2层:100%|██████████| 500/500[00:01<00:00,335.63it/s]##正在计算。。。完成
平方米<- 差分脉冲(X,Y[,2],连接=F)
##自动生成2层DGP结构。。。完成##正在初始化DGP模拟器。。。完成##培训DGP模拟器:##迭代500:第2层:100%|██████████| 500/500[00:01<00:00,294.20it/s]##有罪不罚。。。完成
立方米<- 差分脉冲(X,Y[,])
##自动生成2层DGP结构。。。完成##正在初始化DGP模拟器。。。完成##培训DGP模拟器:##迭代500:第2层:100%|██████████| 500/500[00:01<00:00,387.69it/s]##正在计算。。。完成

请注意,我们已经为前两个关闭了全局连接DGP模拟器,因为我们发现这会产生更好的仿真表演。然后,我们使用包装():

<- 包装(m1、m2、m3)

束模拟器的顺序设计

从顺序设计开始,我们指定输入:

<- c(c)(0,1)

并设定目标RMSE以停止顺序设计:

目标<- 0.01

我们在这里选择0.01因为它相当于1%由于两个输出的范围[0,1]。我们当然可以为不同的输出,例如通过设置目标值<-c(0.005、0.02、0.01).

我们通过10个步骤开始了第一波序列设计:

#10步序贯设计的第一波
<- 设计(米,N个= 10,限制=林,(f)=f、,x测试=validate_x,y_测试=validate_y,目标=目标)
##正在初始化。。。完成##*RMSE:0.340553 0.158352 0.019125##迭代1:##-正在查找。。。完成##*下一个设计点(Emulator1):0.467905##*下一个设计点(Emulator2):0.003782##*下一设计点(Emulator3):0.997096##-更新和重新填写。。。完成##-正在验证。。。完成##*RMSE:0.309701 0.158634 0.006056##迭代2:##-正在查找。。。完成##*下一个设计点(Emulator1):0.997773##*下一个设计点(Emulator2):0.997773##*下一个设计点(Emulator3):无(达到目标)##-更新和重新填写。。。完成##-正在验证。。。完成##*RMSE:0.291350 0.159032 0.006056##  ##  ...##  ##迭代10:##-正在查找。。。完成##*下一个设计点(Emulator1):0.198829##*下一个设计点(Emulator2):0.311879##*下一个设计点(Emulator3):无(达到目标)##-更新和重新填写。。。完成##-正在验证。。。完成##*RMSE:0.190766 0.014075 0.006056##在顺序设计结束时,并没有达到所有模拟器的目标。

可以看出,在第二步中第三个输出已经达到目标,因此步骤无需进一步细化(即,将设计点添加到第三个DGP模拟器)。第一波结束时,DGP第一和第二输出的模拟器都没有达到目标尚未确定。在这一点上,我们可以通过重复进行第二波上面的命令,但我们在下面显示了另一种方法,其中我们定义一个聚合函数来聚合标准分数三个输出,以便将相同的设计点添加到每个步骤有三个模拟器(而不是不同的设计点每个模拟器)。我们定义了聚合函数那个通过计算加权平均值来汇总分数:

<- 功能(x,重量){
x[,1]<-x[,1]*重量[1]
x[,2]<-x[,2]*重量[2]
x[,]<-x[,]*重量[]
  返回(行总和(x) )
}

由于第三个模拟器已经到达目标,我们分配它的权重为零,第一和第二个权重为0.8和0.2模拟器分别:

重量<- c(c)(0.8,0.2,0)

现在我们传递两个聚合函数g()及其重量的参数设计()第二次序列设计的波,还有15个步骤:

#第二波,15步
<- 设计(米,N个= 15,限制=林,(f)=f、,x测试=validate_x,y_测试=validate_y,骨料=克,目标= 0.01,重量=重量)
##正在初始化。。。完成##*RMSE:0.190766 0.014075 0.006056##迭代1:##-正在查找。。。完成##*下一个设计点(Emulator1):0.263892##*下一个设计点(Emulator2):0.263892##*下一个设计点(Emulator3):无(达到目标)##-正在更新和重新安装。。。完成##-正在验证。。。完成##*RMSE:0.176965 0.009466 0.006056##迭代2:##-正在查找。。。完成##*下一个设计点(Emulator1):0.030840##*下一个设计点(Emulator2):无(达到目标)##*下一个设计点(Emulator3):无(达到目标)##-正在更新和重新安装。。。完成##-正在验证。。。完成##*RMSE:0.204744 0.009466 0.006056##  ##  ...## ##迭代11:##-正在定位。。。完成##*下一个设计点(Emulator1):0.105318##*下一个设计点(Emulator2):无(达到目标)##*下一个设计点(Emulator3):无(达到目标)##-更新和重新填写。。。完成##-正在验证。。。完成##*RMSE:0.009740 0.009466 0.006056##达到目标!顺序设计在步骤11停止。

第一个和第二个仿真器在迭代后达到目标第二波分别为11和1。的顺序设计可以使用绘制三个模拟器图纸():

(米,1,“设计”)+ (米,2,“设计”)+ (米,,“设计”)+
  绘图_布局()& 主题(图例.位置= “底部”)

上图显示了第一个模拟器的大部分设计分数添加到0.5以下,而对于第二个模拟器,大多数设计点集中在0.5左右。对于第三个模拟器由此产生的设计是填充空间。可以看出,这些设计点分布与这三个输出。

与具有空间填充设计的DGP模拟器的比较

我们为三个输出构建了三个独立的DGP仿真器静态填充拉丁超立方体设计(LHD),尺寸为10、20和分别为30:

#带10号铲运机的DGP模拟器
X1个<- 最大LHS(10,1)
Y1型<- (f)(X1)
m11号机组<- 差分脉冲(X1,Y1[,1],连接=F、,动词=F)
12米<- 差分脉冲(X1,Y1[,2],连接=F、,动词=F)
13米<- 差分脉冲(X1,Y1[,],动词=F)
#带20号铲运机的DGP模拟器
X2个<- 最大LHS(20,1)
Y2年<- (f)(X2)
21米<- 差分脉冲(X2,Y2[,1],连接=F、,动词=F)
22米<- 差分脉冲(X2,Y2[,2],连接=F、,动词=F)
23米<- 差分脉冲(X2,Y2[,],动词=F)
#带尺寸为30的铲运机的DGP模拟器
X3个<- 最大LHS(30,1)
Y3年<- (f)(X3)
31立方米<- 差分脉冲(X3,Y3[,1],连接=F、,动词=F)
32立方米<- 差分脉冲(X3,Y3[,2],连接=F、,动词=F)
33立方米<- 差分脉冲(X3,Y3[,],动词=F)

然后我们提取他们的RMSE

#第一个DGP模拟器的验证
m11号机组<- 验证(m11,x测试=validate_x,y_测试=validate_y[,1],动词=F)
21米<- 验证(m21,x测试=validate_x,y_测试=validate_y[,1],动词=F)
31立方米<- 验证(m31,x测试=validate_x,y_测试=validate_y[,1],动词=F)
rmse静态1<- 数据帧(“否” = c(c)(10,20,30),“rmse” = c(c)(m11$$rmse,m21$$rmse,m31$操作系统$rmse),“左舵驾驶” = c(c)('lhd-10','lhd-20','lhd-30'))
#第二个DGP模拟器的验证
12米<- 验证(m12,x测试=validate_x,y_测试=validate_y[,2],动词=F)
22米<- 验证(m22,x测试=validate_x,y_测试=validate_y[,2],动词=F)
32立方米<- 验证(m32,x_测试=validate_x,y_测试=validate_y[,2],动词=F)
rmse静态2<- 数据帧(“否” = c(c)(10,20,30),“rmse” = c(c)(m12$$rmse,m22$$rmse,m32$$rmse),“左舵驾驶” = c(c)('lhd-10','lhd-20','lhd-30'))
##第三个DGP模拟器的验证
13米<- 验证(m13,x测试=validate_x,y_测试=validate_y[,],动词=F)
23米<- 验证(m23,x测试=validate_x,y_测试=validate_y[,],动词=F)
33立方米<- 验证(m3,x测试=validate_x,y_测试=validate_y[,],动词=F)
rmse静态3<- 数据帧(“否” = c(c)(10,20,30),“rmse” = c(c)(m13$$rmse,m23$$均方根误差,m33$操作系统$rmse),“左舵驾驶” = c(c)('lhd-10','lhd-20','lhd-30'))

并将其添加到顺序设计验证图中(以对数比例)用于比较:

第1页<- (米,模拟器= 1,类型= “rmse”,日志=T)+ 
  地理点(数据=rmse静态1,映射= 原子发射光谱(x个=N、,年=rmse、,组=左舵驾驶,形状=左舵驾驶),颜色= “#E69F00”,尺寸= 1.5)+
  比例_形状_手动(值= c(c)(,4,8))
第2页<- (米,模拟器= 2,类型= “rmse”,日志=T)+ 
  地理点(数据=rmse静态2,映射= 原子发射光谱(x个=N、,年=rmse、,组=左舵驾驶,形状=左舵驾驶),颜色= “#E69F00”,尺寸= 1.5)+
  比例_形状_手动(值= c(c)(,4,8))
第3页<- (米,模拟器= ,类型= “rmse”,日志=T)+ 
  地理点(数据=静态3,映射= 原子发射光谱(x个=N、,年=rmse、,组=LHD中,形状=左舵驾驶),颜色= “#E69F00”,尺寸= 1.5)+
  比例_形状_手动(值= c(c)(,4,8))
第1页+第2页+第3页+ 绘图_布局(导向装置= '收集')& 主题(图例.位置= “底部”)

从上面的顺序设计图可以看出,捆绑包中的模拟器可以实现更高或类似的精度设计点数较少。

另请参见

请参见顺序设计I用于序列设计和自动结构简化2D模拟器上的DGP模拟器。