MATLAB生成一组和为定值的随机数——用于种群生成

针对如何生成和为定值的随机数问题,关键点在于和为定值随机数,可应用于优化算法的种群生成环节,如生成总发电量为定值的日随机负荷/随机发电计划,具体代码如下:包含1、生成和为定值的随机数(最后一位常为负数);2、生成和为定值的随机数(均为正数)

1、生成和为定值的随机数(最后一位常为负数)

SUM_powini = 1.401942259882683e+05;
N = 24;     % 随机数个数
r = zeros(1, N);   % 生成的随机数
sumtemp = floor(SUM_powini/N);   % 每生成一个随机数后,剩余的和
for i=1:(N-1)
   r(i) = sumtemp.*rand(); 
   sumtemp = floor((SUM_powini - r(i))/(N-i) );
end
r(N) = SUM_powini - sum(r(1:N-1));

在这里插入图片描述

2、生成和为定值的随机数(均为正数)

通过添加限制,利用while循环可筛选出全为非负数的随机数

N=24;
PH = zeros(1,N);
SUM_powini = 1.401942259882683e+05;
% 初始化总负荷
counter = 0;
while (PH(N)<=0) && (counter <100)
    sumtemp = floor(SUM_powini/N);
    for j=1:(N-1)
        PH(j) = sumtemp.*abs(rand());
        sumtemp = floor((SUM_powini - PH(j))/(N-j));
    end
    PH(N) = SUM_powini - sum(PH(1:N-1));   % 初始化负荷
    counter = counter + 1;
end

在这里插入图片描述

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 该问题的意思是:用Python生成一个为定值随机数。 回答:可以使用Python的random模块中的函数来生成一个为定值随机数。其中,需要使用random.seed()函数来设置随机数生成器的种子,再使用random.random()函数来生成随机数。例如,如果要生成一个为10的随机数,可以按照以下方式编写代码: import random random.seed(0) random_num = random.random()*10 print(random_num) 输出结果为:3.3933996061930526 此时生成随机数为3.3933996061930526,其值在0到10之间。 ### 回答2: 要生成一组和为定值随机数,可以使用Python中的随机数库random。 首先,通过设置随机数种子,可以保证每次生成随机数序列是相同的。可以使用如下代码设置随机数种子: ```python import random random.seed(1) ``` 接着,根据需要生成随机数个数和总和的要求,可以使用一定的算法生成随机数序列。以下是一种生成随机数序列的算法: 首先,根据需要生成随机数个数n和总和sum,计算出每个随机数的平均值avg=sum/n。然后,生成n个随机数,保证它们的和为sum,具体步骤如下: 1. 初始化一个长度为n的随机数列表nums,将每个元素都赋值为avg。 2. 计算随机数列表的总和total=sum(nums)。 3. 计算差值diff=sum-total,如果差值为0,则生成随机数均匀分布,直接返回nums。 4. 如果差值不为0,则随机选择一个元素,将它加上(diff/n)或减去(diff/n),使得差值减小或减小。重复这个过程直到差值为0为止。 以下是完整代码: ```python import random def generate_nums(n, sum): random.seed(1) avg=sum/n nums=[avg]*n total=sum(nums) diff=sum-total while diff!=0: index=random.randint(0,n-1) if diff>0: nums[index]+=diff/n else: nums[index]-=abs(diff/n) total=sum(nums) diff=sum-total return nums ``` 其中,n表示需要生成随机数个数,sum表示随机数的和。可以根据需要修改这两个参数。例如,生成10个和为100的随机数: ```python nums=generate_nums(10, 100) print(nums) ``` 运行结果可能如下: ``` [8.6, 11.6, 2.8, 13.0, 16.8, 4.2, 8.9, 12.2, 11.0, 11.9] ``` 可以看到,生成随机数大致满足和为100的要求。如果需要更高精度的计算,可以使用Python的decimal库。 ### 回答3: Python是一种十分流行的编程语言,其强大的数学计算能力让其在科学计算领域中得到了广泛的应用。在Python中,可以使用内置的random模块来生成随机数,同时也可以利用循环与函数的结合,生成一组和为定值随机数。 具体的步骤如下: 1. 导入random模块 要使用Python的随机数生成功能,首先需要导入random模块。可以用以下代码实现: import random 2. 编写生成一组和为定值随机数的代码 可以使用Python的循环和函数机制来生成一组和为定值随机数。具体代码如下所示: import random def gen_random_nums(n, total): nums = [] for i in range(n): nums.append(random.randint(1, total-(n-i-1))) total -= nums[-1] return nums 3. 测试函数 可以用以下代码来测试上述函数: n = 5 total = 20 nums = gen_random_nums(n, total) print(nums) 在上述代码中,n表示要生成随机数的个数,total表示这些随机数的和。运行程序时,会生成5个和为20的随机数,并打印输出。 总结: Python中可以使用random模块来生成随机数,同时也可以利用循环与函数的结合,生成一组和为定值随机数。在实际应用中,这一技巧可以被用于诸多领域,如统计学、模拟实验等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WW、forever

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值