【布局优化】基于遗传算法的车间布局优化 车间设施布局优化【Matlab代码#50】

news2024/11/25 0:23:13

文章目录

    • 【`获取资源`请见文章第5节:资源获取】
    • 1. 车间布局优化
    • 2. 基于GA的布局优化模型
    • 3. 部分代码展示
    • 4. 仿真结果展示
    • 5. 资源获取


获取资源请见文章第5节:资源获取】


1. 车间布局优化

车间设施布置的规划一直是工业工程领域不断研究和探索的内容,其中最具代表性之一的是系统布置设计(system layout planning,SLP) 方法。作为一种经典且有效的方法,其为设施布置提供了很好的改善思路,但在长期的发展中也存在一些不可避免的缺点,如计算结果不够精确,很难确保计算结果较优且受人员主观因素的影响较大等。

随着计算机技术的快速发展,基于计算机技术的启发式算法在数据处理、数学建模、运算速度等方面相比传统方法具备更大的优势,因此在用 SLP 方法布置时完全可以将大量计算求解的工作交由计算机处理,从而可大幅度提高布置效率和布置结果的精确性。

目前设施布置设计的模型与算法已经比较成熟,常见的有遗传算法、蚁群算法、模拟退火算法等启发式算法。

2. 基于GA的布局优化模型

车间布局优化模型如下图所示:
在这里插入图片描述
模型目标函数为搬运费用最小化非物流关系最大化

假设布置方案为X,i 和 j 为该方案的作业单位,两者距离用 d i j d_{ij} dij表示,搬运量用 f i j f_{ij} fij表示,可得距离矩阵及物流量矩阵,进而求得物料搬运成本表达式如下:
C 1 = ∑ i = 1 m ∑ j = 1 m c i j f i j d i j C_{1}=\sum_{i=1}^{m} \sum_{j=1}^{m} c_{ij}f_{ij}d_{ij} C1=i=1mj=1mcijfijdij
式中, C 1 C_{1} C1为总搬运成本; c i j c_{ij} cij为各单位之间的搬运成本。非物流关系表达式为:
C 2 = ∑ i = 1 m ∑ j = 1 m T i j b i j C_{2}=\sum_{i=1}^{m} \sum_{j=1}^{m} T_{ij}b_{ij} C2=i=1mj=1mTijbij
式中, C 2 C_{2} C2为非物流关系总和; T i j T_{ij} Tij为作业单位之间非物流关系的紧密程度。

由此可得两个基本目标,即 C 1 C_{1} C1的最小化和 C 2 C_{2} C2的最大化,从而构建双目标函数如下:
m i n C 1 = ∑ i = 1 m ∑ j = 1 m c i j f i j d i j minC_{1}=\sum_{i=1}^{m} \sum_{j=1}^{m} c_{ij}f_{ij}d_{ij} minC1=i=1mj=1mcijfijdij
m a x C 2 = ∑ i = 1 m ∑ j = 1 m T i j b i j maxC_{2}=\sum_{i=1}^{m} \sum_{j=1}^{m} T_{ij}b_{ij} maxC2=i=1mj=1mTijbij
为方便求解,将双目标函数 C 1 C_{1} C1 C 2 C_{2} C2进行合并,得到单目标函数 C C C表达式如下:
m i n C = ∑ i = 1 m ∑ j = 1 m c i j f i j d i j − ∑ i = 1 m ∑ j = 1 m T i j b i j minC=\sum_{i=1}^{m} \sum_{j=1}^{m} c_{ij}f_{ij}d_{ij}-\sum_{i=1}^{m} \sum_{j=1}^{m} T_{ij}b_{ij} minC=i=1mj=1mcijfijdiji=1mj=1mTijbij

此单目标函数仍需进行标准化处理,并且还需以惩罚函数加以限制,

3. 部分代码展示

%% 物料搬运成本最小化和非物流关系最大化的合并目标函数
function [fit,Z1,Z2] = Fitness(P,LW,D,A,C,T,L,W,big)
dmax = max([L W]);
gap = 3;
%% SECTION TITLE
% DESCRIPTIVE TEXT
K = size(P,1);   % 设施数量
%% 计算关联因子
dB = zeros(K);
for i = 1 : K
    for j = i + 1 : K
        if D(i,j) <= dmax / 6
            dB(i,j) = 1;
        elseif D(i,j) <= dmax / 3
            dB(i,j) = 0.8;
        elseif D(i,j) <= dmax / 2
            dB(i,j) = 0.6;
        elseif D(i,j) <= dmax * 2 / 3
            dB(i,j) = 0.4;
        elseif D(i,j) <= dmax * 5 / 6
            dB(i,j) = 0.2;
        else
            dB(i,j) = 0;
        end
        dB(j,i) = dB(i,j);
    end
end
%% 目标函数1
Z1 = 0;
for i = 1 : K - 1
    for j = i + 1 : K
        Z1 = Z1 + C(i,j) * A(i,j) * D(i,j);
    end
end
%% 目标函数2
Z2 = 0;
for i = 1 : K - 1
    for j = i + 1 : K
        Z2 = Z2 + T(i,j) * dB(i,j);
    end
end
%% 归化因子计算
u1 = 0;
 for i = 1 : K - 1
    for j = i + 1 : K
        u1 = u1 + C(i,j) * A(i,j) * dmax;
    end
 end
u1 = 1 / u1;
u2 = 0;
for i = 1 : K - 1
    for j = i + 1 : K
        u2 = u2 + T(i,j);
    end
end
u2 = 1 / u2;
%% 边界约束1
t = 0;
for i = 1 : K
    if P(i,1) - LW(i,1) / 2 < gap ||  P(i,1) + LW(i,1) / 2 > L - gap
        t = t + 1;     % x方向不满足边界要求
    end
    if P(i,2) - LW(i,2) / 2 < gap ||  P(i,2) + LW(i,2) / 2 > W - gap
        t = t + 1;     % y方向不满足边界要求
    end
end
%%
dtag = (D == big);
dtn = sum(sum(dtag));
t = t + dtn;
%% 适应度
w1 = 3 / 4;
w2 = 1 / 4;
fit = w1 * u1 * Z1 - w2 * u2 * Z2 + 10000000000 * t;

4. 仿真结果展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. 资源获取

可以获取完整代码资源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/760757.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【2023江西省研究生数学建模竞赛】第二题 国际“合作-冲突”的演化规律研究 80页论文及Python代码

【2023江西省研究生数学建模竞赛】第二题 国际“合作-冲突”的演化规律研究 80页论文及Python代码 相关链接 【江西省研究生数学建模竞赛】第一题 蒸汽发生器倒U型管内液体流动 70页论文及MATLAB代码 【江西省研究生数学建模竞赛】第一题 蒸汽发生器倒U型管内液体流动 70页论…

<数据结构>并查集

目录 并查集概念 合并 查找集合的数量 并查集类代码实现 并查集概念 并查集和堆一样&#xff0c;都是通过数组来实现树的节点映射&#xff0c;不过并查集作用是&#xff0c;把一堆数据分为不同的几个小集合 不过并查集是森林的概念&#xff0c;并查集的学习可以帮助我们去更…

(QGIS)在QGIS中加载星图地球数据云的数据

本文以“瓦片数据”为例进行操作示例说明&#xff0c;类似矢量数据、地形数据等&#xff0c;方法步骤一样&#xff0c;将URL换成对应数据的示例网址与本人的token即可。 1、星图地球数据云上注册用户 注册登录星图地球数据云网站&#xff1a;https://datacloud.geovisearth.c…

Python 函数(二)

Python 函数&#xff08;二&#xff09; 一、可变参数、不可变参数 ​ 什么是可变类型&#xff0c;什么又是不可变类型&#xff1f; 这里我们首先要了解一个东西&#xff0c;在计算机程序中我们定义一个变量&#xff0c;并对其存储一个数值。这里有两个关键概念&#xff1a;内…

数码管显示(静态与动态)

文章目录 一、数码管简介二、数码管连接方式2.1 共阴极2.2 共阳极2.3 数码管真值表 三、数码管驱动方式3.1 静态显示3.2 动态显示四、Cyclone IV数码管原理图 五、模块代码六、引脚分配七、动态显示八、引脚分配 一、数码管简介 数码管分七段数码管和八段数码管。七段和八段的…

为什么不推荐在头文件中直接定义函数?

1. 函数的分文件编写 在C中&#xff0c;函数的分文件编写是一种让代码结构更加清晰的方法&#xff0c;通常可以分为以下几个步骤&#xff1a; 创建后缀名为 .h 的头文件&#xff0c;在头文件中写函数的声明&#xff0c;以及可能用到的其他头文件或命名空间创建后缀名为 .cpp …

ES6迭代器、Set、Map集合和async异步函数

目录 迭代器 Iterator 的作用 Iterator 的遍历过程 Set Map集合 map和对象区别? async异步函数 迭代器 迭代器&#xff08;Iterator&#xff09;就是这样一种机制。它是一种接口&#xff0c;为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口&…

自动化运维工具——Ansible学习(二)

目录 一、handlers和notify结合使用触发条件 1.新建httpd.yml文件 2.复制配置文件到ansible的files目录中 3.卸载被控机已安装的httpd 4.执行httpd.yml脚本 5.更改httpd.conf配置文件 6.使用handlers 7.重新执行httpd.yml脚本 8.检查被控机的端口号是否改变 9.handle…

矩阵乘法的硬件加速

矩阵乘法的硬件加速 这里的硬件加速是指&#xff0c;如果依靠算法&#xff0c;可以通过减少访存次数来加速。可以将数据预取到cache来减少访存次数。 矩阵相乘最简单的实现 寄存器平铺矩阵乘法 将矩阵划分成多个小的矩阵块&#xff0c;小的矩阵块可以存放在寄存器中&#xff0…

QT开发技巧之嵌入式linux QT的QCombobox显示空白的问题

1.问题 开发平台&#xff1a;imx6ull qt版本&#xff1a;5.12.9 在嵌入式linux上运行的qt&#xff0c;QCombobox显示空白&#xff0c;不能显示其中的文本内容 2.解决办法 选中QCombobox&#xff0c;在属性栏中将foucsPolicy由WheelFocus改成NoFocus就好了

用户、角色、权限、菜单--数据库设计

用户角色关联表--user_role id-------------------主键 user_id------------用户ID role_id-------------角色ID create_time------创建时间 is_deleted--------状态&#xff08;0&#xff1a;未删除 1&#xff1a;删除&#xff09; 角色权限关联表--role_permission id------…

【PHP面试题50】Redis的主从复制实现原理是怎么样的?如何保证数据一致性?数据延迟又该如何处理?

文章目录 一、前言二、主从复制的基本原理三、数据一致性的保证四、数据延迟的处理四、总结 一、前言 本文已收录于PHP全栈系列专栏&#xff1a;PHP面试专区。 计划将全覆盖PHP开发领域所有的面试题&#xff0c;对标资深工程师/架构师序列&#xff0c;欢迎大家提前关注锁定。 R…

OpenCv算子

目录 一、索贝尔(sobel)算子 二、沙尔(Scharr)算子 三、拉普拉斯算子 一、索贝尔(sobel)算子 边缘的定义: 边缘是像素值发生跃迁的位置&#xff0c;是图像的显著特征之一&#xff0c;在图像特征提取、对象检测、模式识别等方面都有重要的作用。 sobel算子对图像求一阶导数。…

【V8】【1. 内存布局、隐藏类Hidden Class】

JavaScript 中的对象是由一组组属性和值的集合。JavaScript 对象像一个字典&#xff0c;字符串作为键名&#xff0c;任意对象可以作为键值&#xff0c;可以通过键名读写键值。 在 ECMAScript 规范中定义了数字属性应该按照索引值大小升序排列&#xff0c;字符串属性根据创建时…

python将dataframe数据导入MongoDB非关系型数据库

文章目录 pymongo连接新建数据库和集合pandas导入数据插入数据数据查看 pymongo连接 import pymongo client pymongo.MongoClient("mongodb://localhost:27017/") dblist client.list_database_names() for db in dblist:print(db) #查看已有数据库admin bilibil…

apply()函数--Pandas

1. DataFrame.apply()函数 1.1 函数功能 对DataFrame沿着指定轴运用函数。 函数接收到的对象是Series对象&#xff0c;它们的索引可以是DataFrame的行索引&#xff08;axis0&#xff09;或列索引&#xff08;axis1&#xff09;。结果为Series或DataFrame。 1.2 函数语法 Da…

java基础浮点类型

目录 1&#xff1a;float类型和double类型的定义 2&#xff1a;二者的范围和精度 3&#xff1a;float类型详解 3.1&#xff1a;整数位10进制转换为2进制 3.2&#xff1a;小数位10进制转换为2进制 3.3&#xff1a;把二进制放到浮点类型中 3.4&#xff1a;精度损失 4&…

手动下载composer项目放在vendor目录下并加载

比如添加easywechat。 说是手动&#xff0c;其实半手动。 到GitHub或gitee下载 1、下载后放在项目根目录下的vendor文件夹 2、在项目根目录的文件composer.json文件添加一段 "autoload": {"psr-4": {"EasyWeChat\\": "vendor/overtrue/wech…

9.带你入门matlab假设检验(matlab程序)

1.简述 函数 ztest 格式 h ztest(x,m,sigma) % x为正态总体的样本&#xff0c;m为均值μ0&#xff0c;sigma为标准差&#xff0c;显著性水平为0.05(默认值) h ztest(x,m,sigma,alpha) %显著性水平为alpha [h,sig,ci,zval] ztest(x,m,sigma,alpha,tail) %sig为观察…

3.5 Bootstrap 输入框组

文章目录 Bootstrap 输入框组基本的输入框组输入框组的大小复选框和单选插件按钮插件带有下拉菜单的按钮分割的下拉菜单按钮 Bootstrap 输入框组 本章将讲解 Bootstrap 支持的另一个特性&#xff0c;输入框组。输入框组扩展自 表单控件。使用输入框组&#xff0c;您可以很容易地…