【发布时间】:2021-02-27 01:27:08
【问题描述】:
我已经尝试了几个小时来解决这个问题,但我的头最终只是空白...... 我的最终目标是一个 26 行 4 列的数据框,包含 1-6 的值,半随机分布,满足特定条件。
条件是:
- 每个数字在一行中只能出现一次。
- 同一列的相邻行不能包含相同的值。 为此,必须将第 1 列和第 2 列视为包含 2 个值的同一列,这两个值都不能在相邻行中重复。因此,如果我在第 1 列和第 2 列的一行中有“1 和 2”,我只能在下一行和上一行中有“3-6”之间的组合。
- 值应大致平均分布在表格的任何小节中。
我最初的想法是,我会对第一行进行采样,然后创建一个 for 循环以逐个添加其他行,从而根据先前的样本更改抽取数字的概率。在添加此示例行之前,我可以检查是否满足第二个条件,如果不满足则重新采样。
我最终意识到这是如此嵌套,以至于我无法绕开它......我假设我需要一个 while 循环,我没有经验。就像前两个条件不满足一样,根据先前出现的概率重新采样。然而,问题是每列都会根据先前的外观为每个值获得自己的概率,所以我不能只对一行进行采样。 但是,如果我根据以前的外观单独对每一列进行采样,我可能会连续获得相同的值...
所以,这是我想要的 FALSE 条件(我尝试了一个函数,如果语句为 TRUE,它只会重复):
temp[1] == table[i-1,1] || temp[1] == table[i-1,2] || temp[2] == table[i-1,1] || temp[2] == table[i-1,2]
temp[3]== table[i-1,3]
temp[4]== table[i-1,4]
这是我如何计算采样概率的方法(我意识到如果值尚未出现会出现问题,因为这意味着除以 0)
probAB <- rep(1,6) /table(table[,c(1,2)])
probC <- rep(1,6) /table(table[,3])
probD <- rep(1,6) /table(table[,4])
我你想知道它应该是什么:这是一个不重复的家务轮换,在 6 个人之间,其中 2 个人承担 1 家家务,而其他 2 家家务只由一个人完成。我愿意接受其他建议来实现这一目标^^
【问题讨论】:
标签: r nested sampling multiple-conditions