遗传算法(GA)进化算法,MATLAB(一)

% %遗传算法  参数5表示生成的种群包含5个个体,10表示每个个体长度为10,chrom 矩阵,随机生成
% %lind每个个体长度10,baseV指定基数值,编码的默认值2
1.crtbp创建种群函数

>> [chrom,lind,baseV]=crtbp(5,10)

chrom =

     1     0     0     0     1     1     1     1     0     0
     1     0     1     0     0     1     0     1     0     0
     0     1     1     1     1     0     0     0     1     1
     1     1     0     1     1     1     0     1     1     1
     1     1     1     1     1     0     0     0     0     1


lind =

    10


baseV =

     2     2     2     2     2     2     2     2     2     2

>> [chrom,lind,baseV]=crtbp(5,[2,3,4,5,6,7,8.9])

chrom =

     0     0     0     0     3     3     7
     1     0     2     3     1     0     4
     1     1     1     1     3     1     8
     0     2     0     2     4     6     0
     1     2     1     0     4     1     3


lind =

     7


baseV =

    2.0000    3.0000    4.0000    5.0000    6.0000    7.0000    8.9000

2.适应度计算函数ranking  功能:基于排序的适应度分配

>>   objv=[1;2;3;4;5;10;7;8;9;6];
Fitnv=ranking(objv)

Fitnv =

    2.0000
    1.7778
    1.5556
    1.3333
    1.1111
         0
    0.6667
    0.4444
    0.2222
    0.8889

3.%使用RFun中的值估算适应度,Fitnv列向量,包含chrom个体中的适应度

>>  RFun=[3;5;7;10;14;18;25;30;40;50];
Fitnv = ranking(objv,RFun)

Fitnv =

    50
    40
    30
    25
    18
     3
    10
     7
     5
    14

%使用非线性排序,选择压差为2,在objv中有两个子种群估算适应度

>> Fitnv = ranking(objv,[2,1],2)

Fitnv =

    2.0000
    1.2889
    0.8307
    0.5354
    0.3450
    0.3450
    1.2889
    0.8307
    0.5354
    2.0000

使用随机遍历抽样sus选择8个个体:

>> Chrom = [1 11 21;2 12 22;3 13 23;4 14 24;5 15 25;6 16 26;7 17 27;8 18 28];
 FitnV=[1.50;1.35;1.21;1.07;0.92;0.78;0.64;0.5];SelCh = select('sus',Chrom,FitnV)

SelCh =

     5    15    25
     4    14    24
     2    12    22
     3    13    23
     1    11    21
     8    18    28
     6    16    26
     2    12    22

%假设Chrom由两个子种群组成,通过轮盘赌选择函数sus对每个子种群选择150%的个体。

>> FitnV=[1.50;1.16; 0.83; 0.50; 1.50; 1.16; 0.83;0.5];
SelCh= select('sus', Chrom, FitnV,1.5,2)

SelCh =

     2    12    22
     4    14    24
     2    12    22
     1    11    21
     3    13    23
     1    11    21
     7    17    27
     7    17    27
     5    15    25
     5    15    25
     6    16    26
     5    15    25

一元函数简单优化:

%简单一元函数优化
clc, clear
close all
 
%% 画出函数图
figure(1);
hold on;
lb = 1; ub = 2;  %函数自变量范围[1,2]
ezplot('sin(10 * pi * X) / X', [lb, ub]');
xlabel('自变量/X')
ylabel('函数值/Y')
%% 定义遗传算法参数
nind = 40;      %种群大小
maxgen = 20;    %最大遗传迭代次数
preci = 20;     %个体长度
ggap = 0.95;    %代沟
px = 0.7;       %交叉概率
pm = 0.01;      %变异概率
trace = zeros(2, maxgen);               %寻优结果初始化
fieldd = [preci; lb; ub; 1; 0; 1; 1];   %区域描述器
chrom = crtbp(nind, preci);             %种群初始化(任意离散随机种群)
%% 优化
gen = 0;                                %代计数器
X = bs2rv(chrom, fieldd);               %初始种群二进制转十进制
objv = sin(10 * pi * X) ./ X;            %计算目标函数值
while gen < maxgen
    fitnv = ranking(objv);                      %分配适应度值
    selch = select('sus', chrom, fitnv, ggap);  %选择
    selch = recombin('xovsp', selch, px);       %交叉
    selch = mut(selch, pm);                     %变异
    X = bs2rv(selch, fieldd);                   %子代个体十进制转换
    objvsel = sin(10 * pi * X) ./ X;
    [chrom, objv] = reins(chrom, selch, 1, 1, objv, objvsel);   %重插入子代到父代,得到新种群
    X = bs2rv(chrom, fieldd);
    gen = gen + 1;
    %获取每代的最优解及其序号,Y为最优解,i为个体的序号
    [Y, i] = min(objv);
    trace(1, gen) = X(i);
    trace(2, gen) = Y;
end
plot(trace(1, :), trace(2, :), 'bo');   %绘制每一代的最优点
grid on;
plot(X, objv, 'b*');
%% 画进化图
figure(2);
plot(1 : maxgen, trace(2, :));
grid on;
xlabel('遗传代数')
ylabel('解的变化')
title('进化过程')
best_y = trace(2, end);
best_x = trace(1, end);
fprintf(['最优解:\nX=', num2str(best_x), '\nY=', num2str(best_y), '\n'])

最优解:
X=1.1491
Y=-0.8699

  • 25
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
遗传算法(GA)是一种模拟自然进化过程的优化算法,用于解决复杂的问题。车间调度是一种重要的管理问题,通过合理安排工作任务和资源分配,提高生产效率和资源利用率。在MATLAB中,可以使用遗传算法来求解车间调度问题。遗传算法的基本步骤如下: 1. 初始化种群:随机生成一组车间调度方案作为初始种群。 2. 适应度函数:根据车间调度方案,计算每个个体的适应度值。 3. 选择操作:根据适应度值,选择一定数量的个体作为父代。 4. 交叉操作:对父代个体进行交叉操作,生成一定数量的子代。 5. 变异操作:对子代个体进行变异操作,引入一定的随机性。 6. 父代与子代合并:将父代和子代个体合并为新的种群。 7. 适应度评估:计算新种群中每个个体的适应度值。 8. 环境选择:根据适应度值,选择一定数量的个体作为下一代的父代。 9. 终止条件:达到最大迭代次数或找到满意的解。 10. 输出结果:输出找到的最优解,即最优车间调度方案。 具体的MATLAB代码实现可能包括以下几个部分: 1. 随机生成初始种群的函数。 2. 计算适应度值的函数。 3. 选择操作的函数。 4. 交叉操作的函数。 5. 变异操作的函数。 6. 计算适应度值的函数。 7. 输出最优解的函数。 8. 主程序:按照上述步骤依次执行,直到满足终止条件。 以上就是使用遗传算法求解车间调度问题的思路和大致的步骤。具体的MATLAB代码实现可以根据具体问题的需求和约束进行调整和编写。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值