【发布时间】: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