Matlab 如何在给定的时间段内随机分布值?

Matlab 如何在给定的时间段内随机分布值?,matlab,math,combinations,permutation,Matlab,Math,Combinations,Permutation,我试图在一段随机的时间内分配某个值。为了进一步澄清 假设我想在30天内分发产品x和y。我有1500件产品x,必须在30天内随机分发。对一天内可分发的物品数量有限制,即最多60件 我一直在想办法解决一些问题,但在这个问题上真的没有成功。我对编程真的很陌生,所以如果有人能给我指出正确的方法,这将是一个真正的帮助 作为补充,如果我有1个以上的项目要分发(比如假设有x、y和z),并且有不同的值(例如1500、1000、900),并且在特定的一天可以分发多少项目(每天最多150个)有限制,那么这个逻辑是否

我试图在一段随机的时间内分配某个值。为了进一步澄清

假设我想在30天内分发产品x和y。我有1500件产品x,必须在30天内随机分发。对一天内可分发的物品数量有限制,即最多60件

我一直在想办法解决一些问题,但在这个问题上真的没有成功。我对编程真的很陌生,所以如果有人能给我指出正确的方法,这将是一个真正的帮助

作为补充,如果我有1个以上的项目要分发(比如假设有x、y和z),并且有不同的值(例如1500、1000、900),并且在特定的一天可以分发多少项目(每天最多150个)有限制,那么这个逻辑是否仍然有效,或者我应该看看新的东西。另外,如果有一个检查,比如假设x的100,y的20和z的30被分配,然后减去这个值(第二天我有1400个x,980个y和870个z可供分配),因为这将改变排列值


谢谢你们

这应该适合你

days = 30;
elem = 1500;
max_x = 60; 

x = randi(max_x,days,1);
remain = elem - sum(x);

while remain > 0
   idx_1 = find(x < max_x);  % Numbers that can be increased
   idx_fill = randperm(numel(idx_1),remain);
   % idx_fill = idx_fill(:,1);    % Might be needed
   x(idx_1(idx_fill)) = x(idx_1(idx_fill)) + 1;
   remain = elem - sum(x);
end

while remain < 0
   idx_2 = find(x > 0);      % Numbers that can be reduced
   idx_red = randperm(numel(idx_2),abs(remain));
   % idx_red = idx_red(:,1);      % Might be needed
   x(idx_2(idx_red)) = x(idx_2(idx_red)) - 1;
   remain = elem - sum(x);
end

sum(x)
max(x)
min(x)

ans =  1500
ans =  60
ans =  34
天数=30天;
元素=1500;
最大x=60;
x=兰迪(最大值x,天,1);
剩余=元素-总和(x);
而保持>0
idx_1=查找(x0);%可以减少的数字
idx_red=randperm(numel(idx_2),abs(剩余));
%idx_red=idx_red(:,1);%可能需要
x(idx_2(idx_红))=x(idx_2(idx_红))-1;
剩余=元素-总和(x);
结束
总和(x)
最大值(x)
最小值(x)
ans=1500
ans=60
ans=34

这是一种直观的方法,适用于2D阵列,无需“randperm”:

但价格是一个奇怪的概率函数:

hist(x(:), max_x - min_x + 1)
请注意,约束对自由度也有明显的影响


还要注意的是,他们试图在中回答类似的问题。

你从中划出了什么?你在哪里卡住了?最好的做法是在你的问题中解释你自己的努力。还有很多东西还不清楚。。。例如,事情应该是多么随机。您可以抛出30个介于0和60之间的随机数,如果它们的总和超过1500,则停止。如果这听起来是个好的开始,请在MATLAB中检查
randi
。但也许每天60次的概率不应该和每天1次的概率一样……”“随机”这个词太模糊了。您需要指定所需的数字分布
hist(x(:), max_x - min_x + 1)