我正在尝试解决这两个问题,我们将不胜感激。
我对此的解决方案有效,但输出对象在数组上的对象之前不断重复“样本”。
(1) Latin Hypercube Sampling 编写一个从真实空间 D 中产生 N 个伪随机样本的函数。该函数应接受以下参数: - 要产生的样本数 (N) - 每个维度的边界 (dmin, dmax ) 该函数应该返回一个代表整个随机数元组集合的对象数组。例如:结果 = [ { "d1":1, "d2":3 }, { "d1":2, "d2":1 }, { "d1":3, "d2":2 } ];
// Create the function.
const hypercube = (N, dmin, dmax) => {
const samp = [];
for(let i = 0; i <= N; i ++){
const min = Math.ceil(dmin),
max = Math.floor(dmax);
// let build = new latin(min, max);
// samp.push(build);
samp.push(new Sample(min, max));
}
console.log(samp);
};
// Run the function.
hypercube(2, 1, 6);
// This is the constructor function.
function Sample (min, max) {
this.d1 = Math.floor(Math.random() * (max - min + 1) + min);
this.d2 = Math.floor(Math.random() * (max - min + 1) + min);
}
这是第二部分,我的解决方案与第一部分类似。我创建了一个字母数组并从该数组中随机选择一个。
(2) 组合 扩展该功能以允许组合数据类型,即来自固定、无序集合的值。组合数据类型应表示为字符串。该函数应作为参数: - 要产生的样本数 (N) - 每个维度的配置: - - 对于实数,这应该是界限 (dmin, dmax) - - 对于组合值,这应该是可能值数组 ( [ ... ] ) 例如,该函数可能会产生三个维度的结果:前两个是 [1 - 3] 范围内的实数,第三个是组合集 ["A", " B”,“C”]。和以前一样:函数应该返回一个对象数组。例如:
// Create the function.
const hypercube = (N, dmin, dmax) => {
const samp = [];
for(let i = 0; i <= N; i ++){
const min = Math.ceil(dmin),
max = Math.floor(dmax);
// let build = new latin(min, max);
// samp.push(build);
samp.push(new Sample(min, max));
}
console.log(samp);
};
// Run the function.
hypercube(2, 1, 6);
// This is the constructor function.
function Sample (min, max) {
this.d1 = Math.floor(Math.random() * (max - min + 1) + min);
this.d2 = Math.floor(Math.random() * (max - min + 1) + min);
}
结果 = [ { "d1":1, "d2":3, "d3":"B" }, { "d1":2, "d2":1, "d3":"A" }, { "d1 ":3, "d2":2, "d3":"C" } ];
我会很感激任何意见。
谢谢你。