博客
关于我
MATLAB生成一组和为定值的随机数——用于种群生成
阅读量:799 次
发布时间:2023-02-07

本文共 1109 字,大约阅读时间需要 3 分钟。

如何生成和为定值的随机数是优化算法种群生成环节中的重要步骤,例如用于生成总发电量为定值的日随机负荷或发电计划。以下是两种常见方法的实现代码及解释:

方法一:生成和为定值的随机数(最后一位常为负数)

% 示例参数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)); % 确保总和准确

方法二:生成和为定值的随机数(均为正数)

% 示例参数N = 24; % 随机数个数SUM_powini = 1.401942259882683e+05; % 定值总和% 初始化负荷数组PH = zeros(1, N);% 计算初始总和分配sumtemp = floor(SUM_powini / N);% 生成随机数并筛选非负数counter = 0; % 计数器避免无限循环while (PH(N) <= 0) && (counter < 100)    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

方法解释

  • 方法一通过分配初始总和sumtemp,逐步生成每个随机数r(i),并根据剩余总和更新分配。最后一个数r(N)直接计算为总和减去前面所有数的和,确保总和准确性。这种方法适用于允许最后一个数为负数的情况。

  • 方法二使用while循环确保所有随机数均为非负数。通过abs(rand())生成非负数,结合计数器counter避免无限循环。这种方法适用于严格要求所有数均为正值的场景。

  • 两种方法均可应用于优化算法的种群生成环节,例如电力系统中的随机负荷或发电计划生成,确保总负荷或发电量为定值。

    转载地址:http://afyfk.baihongyu.com/

    你可能感兴趣的文章
    Netty工作笔记0070---Protobuf使用案例Codec使用
    查看>>
    Netty工作笔记0072---Protobuf内容小结
    查看>>
    Netty工作笔记0077---handler链调用机制实例4
    查看>>
    Netty工作笔记0081---编解码器和处理器链梳理
    查看>>
    Netty工作笔记0084---通过自定义协议解决粘包拆包问题2
    查看>>
    Netty工作笔记0085---TCP粘包拆包内容梳理
    查看>>
    Netty常用组件一
    查看>>
    Netty常见组件二
    查看>>
    netty底层源码探究:启动流程;EventLoop中的selector、线程、任务队列;监听处理accept、read事件流程;
    查看>>
    Netty心跳检测
    查看>>
    Netty心跳检测机制
    查看>>
    netty既做服务端又做客户端_网易新闻客户端广告怎么做
    查看>>
    Netty核心模块组件
    查看>>
    Netty框架内的宝藏:ByteBuf
    查看>>
    Netty框架的服务端开发中创建EventLoopGroup对象时线程数量源码解析
    查看>>
    Netty源码—1.服务端启动流程二
    查看>>
    Netty源码—2.Reactor线程模型一
    查看>>
    Netty源码—2.Reactor线程模型二
    查看>>
    Netty源码—3.Reactor线程模型三
    查看>>
    Netty源码—4.客户端接入流程一
    查看>>