遗传算法解决带约束的厂房功能区优化问题(python)

遗传算法解决带约束的厂房功能区优化问题(python)

该模型是一个厂房功能区优化模型,遗传算法求解,求解出来是21个坐标点。根据每次求解出来的坐标点自动画出布局分块图,和物流动线图。将一个120*50的仓库平面,首先画出过道,然后通过横线及竖线画出分区的平面图,在平面图各区域内标明功能区名称,然后将固定的坐标点连线形成动线图。
在这里插入图片描述
在这里插入图片描述

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

[在这里插入图片描述](https://img-blog.csdnimg.cn/direct/3aa500fcfd74451aa19abb9f89588974.png

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import itertools
Xmin = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
p = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
print(len(p))
Xmax = [120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50]
print(len(Xmax))
M = pd.read_excel('m.xlsx')['值/kg'].values
print(M)

def min_distance(arr):
    min_dist = 10000  # 初始化最小距离为无穷大
    n = len(arr)
    for i in range(n):
        for j in range(i+1, n):
            dist = abs(arr[i] - arr[j])  # 计算两个元素之间的距离
            if dist < min_dist:  # 如果当前距离小于最小距离
                min_dist = dist  # 更新最小距离
    print(min_dist)
    return min_dist


def obj_func(p):
    x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,\
    y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12,y13,y14,y15,y16,y17,y18,y19,y20,y21 =p
    x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19=\
        int(x3),int(x4),int(x5),int(x6),int(x7),int(x8),int(x9),int(x10),\
        int(x11),int(x12),int(x13),int(x14),int(x15),int(x16),int(x17),int(x18),int(x19)
    y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12,y13,y14,y15,y16,y17,y18,y19,y20,y21=\
        int(y20),int(y21),int(y3),int(y4),int(y5),int(y6),int(y7),int(y8),int(y9),\
        int(y10),int(y11),int(y12),int(y13),int(y14),int(y15),int(y16),int(y17),int(y18),int(y19),int(y20),int(y21)
    b1=(abs(x3-0)+abs(y3-y1)*2)*M[0]
    b2=(abs(x4-0)+abs(y4-y1)*2)*M[1]
    b3=(abs(x5-0)+abs(y5-y1)*2)*M[2]
    b4=(abs(x3-0)+abs(y3-y2)*2)*M[3]
    b5=(abs(x4-0)+abs(y4-y2)*2)*M[4]
    b6=(abs(x5-0)+abs(y5-y2)*2)*M[5]
    b7=(abs(x6-x3)+abs(y6-y3)*2)*M[6]
    b8=(abs(x7-x6)+abs(y7-y6)*2)*M[7]
    b9=(abs(120-x7)+abs(y20-y7)*2)*M[8]
    b10=(abs(120-x7)+abs(y21-y7)*2)*M[9]
    b11=(abs(x8-x4)+abs(y8-y4)*2)*M[10]
    b12=(abs(x9-x8)+abs(y9-y8)*2)*M[11]
    b13=(abs(120-x9)+abs(y20-y9)*2)*M[12]
    b14=(abs(120-x9)+abs(y21-y9)*2)*M[13]
    b15=(abs(x10-x3)+abs(10-y3)*2)*M[14]
    b16=(abs(x11-x10)+abs(y11-y10)*2)*M[15]
    b17=(abs(x12-x11)+abs(y12-y11)*2)*M[16]
    b18=(abs(x13-x12)+abs(y13-y12)*2)*M[17]
    b19=(abs(120-x13)+abs(y20-y13)*2)*M[18]
    b20=(abs(120-x13)+abs(y21-y13)*2)*M[19]
    b21=(abs(x14-x5)+abs(y15-y5)*2)*M[20]
    b22 = (abs(x15 - x14) + abs(y15 - y14) * 2) * M[21]
    b23 = (abs(x16 - x15) + abs(y16 - y15) * 2) * M[22]
    b24 = (abs(x17 - x16) + abs(y17 - y16) * 2) * M[23]
    b25 = (abs(x18 - x17) + abs(y18 - y17) * 2) * M[24]
    b26 = (abs(x19 - x18) + abs(y19 - y18) * 2) * M[25]
    b27 = (abs(120 - x19) + abs(y20 - y19) * 2) * M[26]
    b28 = (abs(120 - x19) + abs(y21 - y19) * 2) * M[27]
    s = b1+b2+b3+b4+b5+b6+b7+b8+b9+b10+b11+b12+b13+b14+b15+b16+b17+b18+b19+b20+b21+b22+b23+b24+b25+b26+b27+b28
    return s
	## **完整代码数据 私信我发**



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

20230330

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值