由拉丁超立方原理可知,在使用拉丁超立方采样采集的样本点的取值范围都在[0,1]区间内,而在实际问题中,设计变量的取值范围并不一定会在[0-1]区间内,为了保持在[0,1]区间内拉丁超立方采集的样本点的空间分布不变,如何将样本点转换到实际空间。

由于样本点每一维都是独立的,因此只分析一维,多维可以直接扩展矩阵。假设样本点在[1,5]区间需要转换到[5,10]区间,且一个样本点x在[1,5]区间取值是2。

一种方法是从取值范围左端点处考虑,可知这个样本点在[1,5]区间占比(2-1)/(5-1)=1/4,因此该样本点转换后在[5,10]空间也应该占比1/4,因此转换后的位置为5+(10-5)*(1/4)。另一种方法则从取值范围右端点处考虑,在[1,5]空间内x离右端点距离占比(5-2)/(5-1)=3/4,因此准换到[5,10]后距离右端点10的距离占比也应该是3/4,因此转换后的位置为10-(10-5)*(3/4)。

下面列出根据这个思想写的matlab代码

x是样本点矩阵,fromdomain是转换前所在的空间取值范围,toDomain是转换后所在空间取值范,这个srgtScaleVariable函数是根据取值范围右端点出考虑的方法。

function [xstar] = srgtsScaleVariable(x, fromDomain, toDomain)[npoints, ndv] = size(x);rangeFrom = fromDomain(2,:) - fromDomain(1,:);   %两个空间的范围值rangeTo   = toDomain(2,:)   - toDomain(1,:);a = rangeTo./rangeFrom;
b = toDomain(2,:) - a.*fromDomain(2,:);xstar  = zeros(npoints, ndv);for counter01 = 1 : npoints% mappingxstar(counter01,:) = a.*x(counter01,:) + b;% make sure that points in the lower bound will not suffer with MATLAB% precision% 检查样本点是否是端点处mask = x(counter01,:) == fromDomain(1,:); % detects if point has any variable in the lower boud,逻辑值xstar(counter01,:) = mask.*toDomain(1,:) + ...(~mask).*xstar(counter01,:);  %如果是的话,则转换后在转换后的空间端点处,否则是上面表达式值。% make sure that points in the upper bound will not suffer with MATLAB% precisionmask = x(counter01,:) == fromDomain(2,:); % detects if point has any variable in the upper boudxstar(counter01,:) = mask.*toDomain(2,:) + ...(~mask).*xstar(counter01,:);endreturn

x是输入样本点,normspace是当前空间取值范围,signspace是转换后的空间取值范围。Scalevariable函数是根据从取值范围左端点处考虑的方法。

function [x_end] = ScaleVariable(x, normspace, signspace)
[npoints,ndv]=size(x);
a=normspace(2,:)-normspace(1,:);
b=signspace(2,:)-signspace(1,:);x_end=zeros(npoints,ndv);
for i=1:npointsx_end(i,:)=(((x(i,:)-normspace(1,:))./a).*b)+signspace(1,:);
end
return

检查两种方法

clear
clcphysicalspace = [-5  0;  % lower bound10 15]; % upper boundnormalizedspace = [0  0; % lower bound1  1]; % upper bound% create points in the normalized space
P = [0.0  0.00.5  0.51.0  1.00   01   1];% map P to the physical space
X = srgtsScaleVariable(P, normalizedspace, physicalspace)
X1= ScaleVariable(P, normalizedspace, physicalspace)

两种方法的对比结果

拉丁超立方采样后的样本转换到实际空间

clear
clcnpoints=10;  %样本点数
ndv=2;  %维数
LHS = srgtsDOELHS(npoints, ndv);  %拉丁超立方采样
physicalspace = [-5  0;  % lower bound10 15]; % upper boundnormalizedspace = [0  0; % lower bound1  1]; % upper bound% map LHS to the physical space
X = srgtsScaleVariable(LHS, normalizedspace, physicalspace);
subplot(1,2,1);
scatter(LHS(:,1),LHS(:,2),'filled');
subplot(1,2,2);
scatter(X(:,1),X(:,2),'filled');

拉丁超立方函数代码

function LH = srgtsDOELHS(npoints, ndv)LH = [];for c2 = 1 : ndvLH = [LH, randperm(npoints).'];
endLH = srgtsScaleVariable(LH, ...[ones(1,ndv); npoints*ones(1,ndv)], ...[zeros(1,ndv); ones(1,ndv)]);return

拉丁超立方采样转换到实际空间后的分布对比,可以看到并没有影响空间分布性。

拉丁超立方——样本点空间转换相关推荐

  1. 试验设计——拉丁超立方抽样

    目录 1 性质 2 原理 3 实现 4 结果​ 1 性质 当我们要对某个昂贵函数或者一些试验数据建立代理模型时,前期实验设计对于初始采样点的选取尤为重要,如何尽可能用少量点能够得到空间填冲效果好的初始 ...

  2. Matlab 拉丁超立方采样lhsdesign函数、lhsnorm函数介绍

    本文主要介绍了Matlab自带的两个拉丁超立方抽样的两个函数--lhsdesign函数.lhsnorm函数,拉丁超立方抽样的原理后面有时间写一篇文章介绍一下 lhsdesign函数 X = lhsde ...

  3. 基于最大最小思想优化拉丁超立方采样

    由于普通的拉丁超立方采样,样本点序列是一个随机的排列,就会出现如下分布状况,虽然采样点满足了空间投影均匀的特性,但它的空间填充效果并不好. 根据参考文献的那篇论文提出的最大最小方法优化普通拉丁超立方采 ...

  4. 拉丁超立方抽样的Python实现

    一.什么是拉丁超立方抽样     拉丁超立方采样是一种分层的蒙特卡洛采样方法,适用于多维空间均匀采样,适合于样本数较少的情况下使用.[1]     采样思想为:假设系统有m个因素,每个因素有n个水平. ...

  5. 拉丁超立方的一些理解

    拉丁超立方的一些理解 基本原理:在一个设计空间中抽取n个样本,每一个样本点由m个分量组成.将每一个分量的取值范围均分为n个,将这n个样本随机地投放到设计空间中,在投放地的时候需要满足以下两个基条件. ...

  6. 对应于正态分布的拉丁超立方抽样——Python版

    拉丁超立方抽样-正态分布 0.拉丁超立方抽样的理论基础 0.1.概况 0.2.基本原理 0.3.基本步骤 1.导入库和基本准备 2.生成两个(具有正态分布的随机变量)参数的随机数 2.1.生成第一个参 ...

  7. 【采样算法】拉丁超立方采样

    [采样算法]拉丁超立方采样 简介 过程 一维拉丁超立方采样 多维拉丁超立方采样 python编程 结论 参考 简介 LHS(Latin Hypercube Sampling)是一种分层采样方法,相较于 ...

  8. 拉丁超立方采样的思想和代码

    思想 思想很简单,就是假设你要从一个超维空间(维度=Dim)采样N个样本,那么拉丁超立方采样就是这样做的.分别在每个维度采样N个值(你可以理解成把单维度(一条线)分成N份,在每个范围都随机取一个值出来 ...

  9. 对应于对数正态分布的拉丁超立方抽样——Python版

    拉丁超立方抽样-对数正态分布 0.拉丁超立方抽样的理论基础 0.1.概况 0.2.基本原理 0.3.基本步骤 1.导入库和基本准备 2.生成(具有对数正态分布的随机变量)参数的随机数 3.将生成的随机 ...

最新文章

  1. 目标检测任务中的训练宝典 |实用技巧
  2. 博为峰Java技术题 ——JavaSE Java 方法Ⅲ
  3. 作业三--简单四则运算
  4. vue中的props对象
  5. geth 转账_以太坊1 - 私有链部署、挖矿、转账
  6. SDCC 2016数据库峰会(深圳站)学习笔记
  7. 【招聘(北京)】北京华光普泰生物招聘.NET软件开发
  8. 爬虫—分析Ajax爬取今日头条图片
  9. javafx给图形上颜色_红牛商标无效案:新欧盟商标条例下如何满足颜色商标注册条件?...
  10. php 将url转成伪静态,php兑现url伪静态化,全过程详解
  11. 微信模板消息发送帮助类
  12. 如何不靠运气变得富有 (十四) —— 特殊技能(specific knowledge)极富创造性或技术性
  13. 辛苦开发的 App 被山寨?阿里帮你为 APK 上把加固锁
  14. Briarcliff Entertainment 购买了关于开创性的非裔美国 NBA 球员的电视剧“Sweetwater”(独家)
  15. QQ跨站漏洞巧利用一例【强迫别人帮你买QQ秀】【应该以失效】
  16. 苹果笔记本装win7_m2 ngff无线网卡接口的笔记本电脑装苹果网卡
  17. #2826. 物流运输(trans)
  18. 一千零一夜的观后感(一)
  19. 运动规划,路径规划和轨迹规划的关系(补充路径跟踪和轨迹跟踪)
  20. Unity游戏开发客户端面经——热更新(初级)

热门文章

  1. 3.Android 仿QQ运动步数进度效果 keep运动效果(从入门到巅峰)
  2. Python打印车次信息
  3. 上线切换 - 如何导入在制品
  4. 项目介绍之论文格式的自动检测与修改系统
  5. bzoj 3894: 文理分科 最小割
  6. java实现不确定进度条_JavaFX在执行过程时不确定进度条
  7. Android旅游自助项目之订票系统订票功能实现
  8. 实体门店为什么要做共享股东模式
  9. 赫斯曼万兆交换机_赫斯曼交换机型号说明
  10. html怎么设置左侧区域宽度,【CSS】左侧定宽、右侧宽度自适应布局