【问题标题】:Algorithm to generate a (pseudo-) random high-dimensional function生成(伪)随机高维函数的算法
【发布时间】:2015-05-21 10:20:56
【问题描述】:

我不是指生成随机数的函数,而是生成random function的算法

“高维”表示函数是多变量的,例如一个 100 维的函数有 100 个不同的变量。

假设域是[0,1],我们需要生成一个函数f:[0,1]^n->[0,1]。该函数是从某一类函数中选择的,因此选择这些函数中的任何一个的概率都是相同的。 (这类函数可以是全连续的,也可以是 K 阶导数,以算法方便为准。)

由于闭区间域上的函数是不可数无限的,我们只要求算法是伪随机的。

有解决这个问题的多项式时间算法吗?


我只想为问题添加一个可能的算法(但由于其指数时间复杂度而不可行)。该算法是由最开始提出这个问题的朋友提出的:

算法可以简单描述如下。首先,我们假设维度 d = 1。考虑区间 I = [a; 上的平滑函数乙]。首先,我们拆分域 [a; b] 分成 N 个小区间。对于每个区间 Ii,我们生成一个随机数 fi,存在于某些特定分布(高斯或均匀分布)中。最后,我们进行插值 series (ai; fi),其中ai是Ii的特征点(例如,我们可以选择ai作为Ii的中点)。插值后得到一条平滑的曲线,可以看作是一个存在于函数空间 Cm[a; 中的一维随机函数构造。 b](其中 m 取决于我们选择的插值算法)。

这只是说算法不需要那么正式和严格,而只是提供一些可行的东西。

【问题讨论】:

  • 您可能需要更精确地指定certain class of functions。虽然为多项式函数(具有固定次数)生成随机系数非常容易,但您将很难为所有连续函数的向量空间找到合适的基础,从而允许类似的事情。想象一下 abs(x)、sin(x) 或 exp(x) 作为您希望包含在随机函数生成器中的函数的简单示例,但您将无法通过“随机”选取来生成它们一些值。
  • @HW 我的问题是在闭合区间上生成任何连续或 K 阶导数函数,而不是简单类型的函数。这确实是使问题变得困难的原因......
  • 要让短语“选择这些函数中的任何一个的概率是相同的”有意义,需要选择“特定类别的函数”并对其进行度量类函数。否则,如果可以选择,我只选择满足条件的线性函数类,然后我选择一个算法来选择它们,然后我定义一个函数子集的度量等于我的选择在那个子集中的概率,所以我的选择算法对于我的度量是自动统一的。
  • This is just to say that the algorithm does not need to be that formal and rigorous, but simply to provide something that works. 问题在于您说您希望能够生成任何连续函数!通过简单地连接一些点,您当然会获得一个连续函数,并且随着点数的增加,您可以非常接近任何所需的函数。但是,通过“随机”选择这些点,您很可能会获得剧烈振荡的函数,因此这远不能回答您最初的问题。

标签: algorithm random


【解决方案1】:

所以如果我做对了,你需要从向量返回标量的函数;

我看到的最简单的方法是使用点积

  • 例如让n 成为您需要的维度
  • 因此创建随机向量a[n],其中包含<0,1> 范围内的随机系数
  • 所有系数之和为1

    1. 创建float a[n]
    2. 用正随机数(无零)输入它
    3. 计算a[i]的总和
    4. a[n]除以这个总和
  • 现在函数y=f(x[n])很简单

  • y=dot(a[n],x[n])=a[0]*x[0]+a[1]*x[1]+...+a[n-1]*x[n-1]
  • 如果我没有遗漏什么目标范围应该是<0,1>
  • 如果x==(0,0,0,..0) 那么y=0;
  • 如果x==(1,1,1,..1) 那么y=1;

如果您需要更复杂的东西,请使用更高阶的多项式

  • 类似y=dot(a0[n],x[n])*dot(a1[n],x[n]^2)*dot(a2[n],x[n]^3)...
  • 其中x[n]^2 表示(x[0]*x[0],x[1]*x[1],...)

Booth 方法导致具有相同“方向”的功能

  • 如果有任何x[i] 上升,那么y 也会上升
  • 如果你想改变它,那么你还必须允许a[] 的负值
  • 但要实现这一点,您需要为 y 添加一些偏移量,从负值转移...
  • a[] 规范化过程会稍微复杂一些
  • 因为您需要寻找最小值、最大值...
  • 更简单的选择是将随机标志向量m[n]添加到处理中
  • m[i] 将标记是否应该使用 1-x[i] 而不是 x[i]
  • 这样,以上所有内容都保持原样......
  • 您可以创建更多类型的映射,使其更加灵活

【讨论】:

    【解决方案2】:

    如果您真的希望能够生成每个连续函数,这可能不仅很难,而且是不可能的。

    对于一维情况,您可以通过查看Faber-Schauder-System 来创建有用的近似值(另请参阅wiki)。这为您提供了区间上连续函数的 Schauder 基础。如果包含基向量的无限线性组合,这种基仅涵盖整个向量空间。因此,您可以通过在此基础上构建随机线性组合来创建一些随机函数,但通常您无法通过这种方式创建实际上由无限数量的基向量表示的函数。

    编辑以响应您的更新:

    似乎选择K 阶的随机多项式函数(对于 K 次可微函数类)对您来说可能就足够了,因为这些函数中的任何一个都可以通过其中一个来近似(围绕给定点) (见taylor's theorem)。选择随机多项式函数很容易,因为您可以选择K 随机实数作为多项式的系数。 (请注意,例如,这不会返回类似于 abs(x) 的函数)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-17
      • 1970-01-01
      相关资源
      最近更新 更多