Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无偏(随机?)选择算法_Java_Algorithm_Math - Fatal编程技术网

Java 无偏(随机?)选择算法

Java 无偏(随机?)选择算法,java,algorithm,math,Java,Algorithm,Math,问题: 有X个属性,所有浮动在0和1之间。 选择属性的固定成本为C(而不是将其保留为0) 财产的成本与其价值成正比(指数或线性) 在预算为B的情况下,我如何对房产子集进行无偏(随机)选择 假设“成本”函数如下所示:(指数型) cost=C*sgn(x)+ke^(ax) 0您可以使用最大熵原理来指导您。基本上,X有一个庞大的任务集,其中一些(非常小的)任务子集将完全满足您的预算。您希望从一组令人满意的指定中均匀地随机选取 不幸的是,虽然这给了我思考这个问题的明确和原则性的方向,但我实际上不知道如何

问题: 有X个属性,所有浮动在0和1之间。
选择属性的固定成本为C(而不是将其保留为0)
财产的成本与其价值成正比(指数或线性) 在预算为B的情况下,我如何对房产子集进行无偏(随机)选择

假设“成本”函数如下所示:(指数型)

cost=C*sgn(x)+ke^(ax)

0您可以使用最大熵原理来指导您。基本上,X有一个庞大的任务集,其中一些(非常小的)任务子集将完全满足您的预算。您希望从一组令人满意的指定中均匀地随机选取


不幸的是,虽然这给了我思考这个问题的明确和原则性的方向,但我实际上不知道如何有效地从这个集合中取样。

MarianP的评论似乎有一个正确的方向。例如,如果有3个属性的权重为1、3和6,则可以将长度为1+3+6=10的直线分割为三段:

+-+---+------+
|0|123|456789| 
+-+---+------+
然后掷一个范围为(0,9)的骰子,并选择被骰子击中的部分(属性)。从集合中删除该属性,并使用新的属性集合从顶部递归(超出预算的属性也被过滤掉)


通过这种方式,选择更长的序列(更重的属性)的几率更高。

在这里,我尝试从一个低效的过程开始,该过程满足一种随机性观点,并用一种更有效的方法代替它

1) 低效-我假设您有一个属性及其相关成本的列表。考虑所有可能的属性集合——如果有n个属性,则将有2个这样的集合。从这个角度考虑一组适合你预算的属性。从这个较小(但可能仍然很大)的集合中随机选择一组属性

2) 可能的实施。我假设成本都是中等大小的整数,或者你可以接受将它们四舍五入到这个值的不精确性。现在可以构建一个数组A,其中A[i]是创建一组总成本i的方法数。考虑0个属性时,A[0]=1。现在考虑一个成本3的属性。目前A的唯一非零元素是A[0]。这为您提供了另一种生成[0+3=3]的方法,因此您可以设置[3]=1+A[0]。通过依次考虑每个属性,您可以设置A[i]=使用这些属性创建一组成本i的方法数

一旦建立了数组,依次考虑每个属性,从B的代价开始,通过从成本>= B中选择一个精确的成本C,其概率与创建一组成本的方式成正比。现在依次考虑每个属性。给定成本c的属性,如果它大于当前成本c,则丢弃它。如果不是,考虑一个[C]和[C-C],然后在概率与它们的大小成比例的之间进行选择。如果选择[C],则放弃该属性。如果选择[C-C],则将该属性包含在随机集中

也许有一种方法可以做一些等价的事情,而不用使用四舍五入到整数——也许我会坐下来,稍后再考虑这个问题

是的,这很容易从大都会黑斯廷斯那里说出来。基本上,您可以从任何有效集开始,例如空集,运行大量Metropolis Hastings步骤,并希望结果足够好地混合,从而根据您的分布,结果集几乎是随机的。如果您想要另一个随机样本,请再次执行更多的M-H步骤


在维基百科条目的语言中,p(x')=p(x_t)=1。要计算Q(x_;t;x'),您需要决定如何从一个集合移动到另一个集合。如果您按照成本的排序顺序排列属性,您可以计算出,给定一组的总成本,您可以向其中添加多少剩余属性-例如,进行二进制切分以计算出足够便宜的属性数量,并使用某种平衡树来计算已选属性的数量。因此,您可以计算出可以添加到当前集合中的不同属性的数量,当然也可以减去任何现有属性。如果一个步骤是对单个属性进行加法或减法,那么您知道有多少种不同的方法可以远离x_t,并且您可以对x'进行类似的计算。因此,Q(x’;x_t)是1/(x_t的通道数),Q(x_t;x’)是1/(x的通道数),一旦你决定是否移动,如果你决定移动,你可以随机选择其中一种通道。

我不清楚这个问题。你希望随机选择不考虑成本吗?然后做一个随机的洗牌,然后从第一个元素选择全部,直到你在预算之内。它应该考虑到成本。基本上,我也希望它选择一些具有各种“强度”的属性,在属性的强度(由于指数级的高成本)和属性数量(由于属性的恒定成本)之间建立平衡。选择可以包含几个强属性或许多弱属性,或者介于两者之间的任何内容。希望这是有意义的。为什么不从所需的分发中抽取样本,如果样本太贵(不符合您的预算),只需丢弃它并抽取一个新样本。将所有属性的成本相加,标准化为,从中获取一个随机数,然后选择该数字下降范围内的属性。如果已选择的物业成本<预算,请重复?根本不清楚你所说的“公平”是什么意思,或者你对它有一个严格的概念。你能详细解释一下吗?为什么这应该被认为是“公平的”@6502:你担心什么?任务是根据重量选择不同的元素。这是选择这样一个要素的公平方法。超t
+-+---+------+
|0|123|456789| 
+-+---+------+