柔性作业车间调度测试数据处理(matlab)

一. 目的

原始的测试案例数据(如下图所示)
测试案例数据
想要的是一个存放工件,工件工序,加工机器和对应的加工时间的矩阵(如下图所示)

存放工件,工件工序,可选加工机器和对应时间的矩阵

二. 流程图

在这里插入图片描述

三. 实现思路

1. 把txt文件里面的测试案例的数据导入到matlab中

filename = 'Mk03.txt';
M = dlmread(filename);

M部分示例

2. 对M进行处理获取到测试案例的相关信息

工件数量:jobQuantity
机器数量:machQuantity
总工序数:totalProcQuantity
存放最终数据的矩阵:data
并且将data第三列到最后列的数据设置为NaN
代码如下:

jobQuantity = M(1,1);                                       % 工件数量
machQuantity = M(1,2);                                      % 机器数量
totalProcQuantity = sum(M(2:jobQuantity+1,1));              % 总的工序数量
data = zeros(totalProcQuantity, machQuantity+2);            % 存放最终数据的矩阵
data(:,3:machQuantity+2) = NaN;                             % 将data第三列到最后列的数据设置为NaN

3. 从M第二行开始,依次读取数据,并且存放到data矩阵相应的位置上

第一层循环
M的行数循环
第二层循环
工序总数的循环(对应的是data里面的行数)
第三层循环
每一工序对应的可选机器位置的循环
代码如下:

beforeProcQuantity = 1;                                             % 循环时记录工序数量的变量(起始)
for i = 2 : jobQuantity+1                                           % 获取到M的的二行(第一个工件的相关信息)
    

    procQuantity = M(i,1);                                          % 获取当前工件的工序数量
    afterProcQuantity = beforeProcQuantity + procQuantity -1;       % 更新循环时记录工序数量的变量(终止)
    p = 1;                                                          % 记录每个工件工序的变量
    k = 2                                                           % 记录M中工序可选机器数所在的位置
    for j = beforeProcQuantity : afterProcQuantity 
        
        % 更新data里面前两列的数据(工件号和工序号)
        data(j, 1) = i-1;                                           % 工件号
        data(j, 2) = p;                                             % 工序号
        p = p + 1;
        
        
        % 更新每一行工序可选的机器和对应的时间                                                  
        optMachine = M(i,k);                                        % 记录工序的可选机器数量
        for l = k + 1 : 2 :k + optMachine * 2
            switch M(i,l)
                case 1
                    data(j, 3) = M(i,l+1);
                case 2
                    data(j, 4) = M(i,l+1);
                case 3
                    data(j, 5) = M(i,l+1);
                case 4
                    data(j, 6) = M(i,l+1);
                case 5
                    data(j, 7) = M(i,l+1);
                case  6
                    data(j, 8) = M(i,l+1);
                case  7
                    data(j, 9) = M(i,l+1);
                case  8
                    data(j, 10) = M(i,l+1);
                otherwise
                    disp('出错了!!');
                    
            end
        end
        k = k + optMachine * 2 + 1;                                 % 更新M中工序可选机器数所在的位置        
    end
    beforeProcQuantity = afterProcQuantity+1;                       % 更新循环时记录工序数量的变量(起始)   
end

四. 代码运行后的结果(符合预期)

在这里插入图片描述

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
粒子群柔性作业车间调度(Particle Swarm Optimization (PSO) for Flexible Job Shop Scheduling)是一种优化算法,通过模拟鸟群中的行为来解决作业车间调度问题。 在这个问题中,有多个作业(jobs)需要在不同的设备(machines)上进行处理。每个作业有一系列的操作(operations),每个操作需要在特定的设备上进行处理,并具有预定的处理时间。 粒子群柔性作业车间调度算法的Matlab代码如下: ```matlab function [best_sequence, best_fitness] = PSO_FJSP(jobs, machines, operations, swarm_size, max_iterations) % 初始化粒子群 particles = initialize_particles(jobs, machines, swarm_size); % 初始化全局最优解 global_best_fitness = Inf; global_best_sequence = []; % 迭代更新粒子群 for iter = 1:max_iterations % 更新每个粒子的速度和位置 particles = update_velocity_position(particles, global_best_sequence); % 计算每个粒子的适应度 for i = 1:swarm_size fitness = calculate_fitness(particles(i).sequence, jobs, machines, operations); % 更新个体最优解 if fitness < particles(i).best_fitness particles(i).best_fitness = fitness; particles(i).best_sequence = particles(i).sequence; end % 更新全局最优解 if fitness < global_best_fitness global_best_fitness = fitness; global_best_sequence = particles(i).sequence; end end end % 输出最优解 best_sequence = global_best_sequence; best_fitness = global_best_fitness; end ``` 以上是粒子群柔性作业车间调度的简单实现,代码中定义了初始化粒子群、更新速度和位置、计算适应度等函数。通过调用`PSO_FJSP`函数,可以得到最优的作业调度序列(`best_sequence`)以及对应的适应度值(`best_fitness`)。 需要注意的是,以上代码只是一个简单的实现,实际应用中可能需要根据具体的问题进行参数调整和性能优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值