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