import math
import random
from random import sample
import numpy as np
from numpy import *
import geatpy as ea
import xlrd
import pysnooper
q1='F:\共享车选址调度\共享汽车数据\候选点之间的OD(13).xlsx'
T1='F:\共享车选址调度\共享汽车数据\候选点之间的最短期望时间Tik(13).xlsx'
wt1='F:\共享车选址调度\共享汽车数据\需求中心到备选点的步行时间(50行13列).xlsx'
D1='F:\共享车选址调度\共享汽车数据\每个需求中心的需求量(50网格).xlsx'
def excel_to_matrix(path,a):
table = xlrd.open_workbook(path).sheets()[a]
row = table.nrows
col = table.ncols
datamatrix = np.zeros((row, col))
for x in range(col):
cols = np.matrix(table.col_values(x))
datamatrix[:, x] = cols
return datamatrix
q=excel_to_matrix(q1,0)
T=excel_to_matrix(T1,0)
wt=excel_to_matrix(wt1,0)
D=excel_to_matrix(D1,1)
Cs=1*10
Cp=12*10
Cv=56*10
Ce=6
M=10000
alpha=0.8
beta=0.5
gama=2
I=13
J=50
Pmax=100
w1=50
H =500000
s=zeros((J, I))
for i in range(I):
for j in range(J):
if wt[j,i]<w1:
a=-(wt[j,i])**4+w1**4
b=(w1**4)*(math.exp((wt[j,i]/40)**3))
s[j,i]=a/b
elif wt[j,i]>w1:
s[j,i]=0
n=zeros((J, I))
for i in range(I):
for k in range(I):
if sum(q[i])>0:
n[i,k]=q[i,k]/sum(q[i])
else:
n[i,k]=0
'''1.目标函数'''
def objection(X,P,V,z):
z0=np.array(z).reshape(J,I)
for i in range(I):
Ti = T[i, :]
ni = n[i, :]
ui= [sum(D[:,0]*z0[:,i]*s[:,i]) for i in range(I)]
obj=sum([Cs * X[i] + Cp * P[i] + Cv * V[i] + Ce * sum(Ti * ni) * ui[i] for i in range(I)])
return obj
'''2.实数编码'''
def code():
Chrom = []
X_0 = np.random.randint(0, 2, I)
P_0 = np.random.randint(2, 101, I)
V_0 = np.random.randint(1, 81, I)
z0 = np.random.random((J, I))
for i in range(len(X_0)):
if X_0[i] == 0:
P_0[i], V_0[i], z0[:, i] = 0, 0, 0