【问题标题】:How to generate random numbers in matlab subjecting it to condition |x(i) - x(i+1)|>0.25, i = 1,...,N如何在 matlab 中生成随机数,使其符合条件 |x(i) - x(i+1)|>0.25, i = 1,...,N
【发布时间】:2020-09-27 04:13:19
【问题描述】:

如何在matlab中生成随机数,使得两个连续数之间的差必须大于0.25。 |x(i)-x(j) |>0.25.

我实际上是在使用 PSO 解决非线性优化问题。我已经能够在算法中包含我的随机数范围(随机数范围从 0.25 到 2.25)并且我的适应度函数运行良好,但生成的随机数之间的间距大多数时候小于 0.25。这是因为我不知道如何在我编写的 MATLAB 函数中包含上述约束。

function  f  = current(x)
AF1=0;
theta=0:pi/200:pi;
theta0=pi/2;
u=2*pi*(cos(theta)-cos(theta0));
for n=1:length(x)
    if (x)>0.125
        AF1=AF1(n)+abs(cos(x(n).*u)+cos((2.5)*u));
f=-1*max(20*log(AF1));
    end
end
end

当我使用上述函数运行此 PSO 代码时,我的最佳成本值为 1.5002 1.5007 1.5017 0.90902 除后两个值外,每两个连续值的差值不大于0.25。

【问题讨论】:

  • 你在帖子正文中写下连续的数字,并在标题中用 i != j 暗示不连续。它是哪一个?数字的允许范围是多少?
  • 随机数生成器遵循给定的分布,如果生成的每个数字的分布发生变化,则不再是随机的。还是有什么我不明白的地方?
  • 我已经阐述了我的问题。谢谢
  • 遵循 |x(i) - x(j)|>0.25 for i != j 的数学运算,不允许使用序列 0, 0.3, 0,因为对于 i=1,j=3差异小于 0.25。但是,您的文本谈到 successive 数字,即 |x(i) - x(i+1)|>0.25,在这种情况下,将允许上述序列。你能澄清一下吗?
  • 如果您希望两个数字(不一定是连续的)之间的差异大于M,您可以像这样创建一个网格:startVal:1.5*M:endVal,然后对这个结果添加小幅度的噪声(例如高斯),最后随机排列randperm。完成这些步骤后,您可以测试条件是否成立,如果它不只是再次运行它和/或降低噪声幅度 -> 最终它会成功。

标签: matlab optimization random


【解决方案1】:

您的帖子和代码令人困惑。它们在任何形式上都不匹配,但我会回答以下问题,这是我唯一理解的:

如何在matlab中生成随机数,使得两个连续数之间的差必须大于0.25

maxdifference=3;
mindifference=0.25;
a=cumsum(rand(1,10)*maxdifference+mindifference)

a 会有大于 0.25 的差值,分布均匀。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多