1

我正在尝试解决这两个问题,我们将不胜感激。

我对此的解决方案有效,但输出对象在数组上的对象之前不断重复“样本”。

(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" } ];

我会很感激任何意见。

谢谢你。

4

0 回答 0