遗传算法解决带约束的厂房功能区优化问题(python)
该模型是一个厂房功能区优化模型,遗传算法求解,求解出来是21个坐标点。根据每次求解出来的坐标点自动画出布局分块图,和物流动线图。将一个120*50的仓库平面,首先画出过道,然后通过横线及竖线画出分区的平面图,在平面图各区域内标明功能区名称,然后将固定的坐标点连线形成动线图。
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
## **完整代码数据 私信我发**