在智能算法的编码场景中,很多时候是需要用求和为一定的编码的,?比如分配问题,?配送问题等,?下面给出具体程序代码:
clc;close all;clear all;warning off;%清除变量
rand('seed', 100);
randn('seed', 100);
format long g;
N=5; % 设定优化问题维数
lb=0*ones(1,N);% 自变量上限
ub=1*ones(1,N);% 自变量下限
popsize=10;% 种群数
p=12.5;% 求和的目标?
Chrom=mygenfun(popsize,N,lb,ub,p)
disp('验证求和是否为p');
sum(Chrom,2)
function Chrom=mygenfun(popsize,N,lb,ub,p)
% 建立随机种群
Chrom=zeros(popsize,N);% 初始化编码矩阵
for i=1:popsize% 循环
? ? x=zeros(1,N);% 初始化变量
? ? for j=1:N
? ? ? ? x(1,j)=lb(j)+(ub(j)-lb(j))*rand(1,1);% 随机赋值
? ? end
? ??
? ? x2=p*x/sum(x);% 和为p的非负序列
? ??
? ? Chrom(i,:)=x2;% 求和序列赋值
end
程序结果:
可看到产生了10行随机数,?每一行的和都是12.5,?说明代码有效.