from gurobipy import * import gurobipy as gp from gurobipy import GRB import numpy as np import os import re import csv import time import pandas as pd # 读取需求数据 filePath = r"D:\\学习\\大三上\\运筹学\\附件数据\\附件数据\\all_1.xlsx"#表里的数据是31行16列,表示客户的需求 data = pd.read_excel(filePath) #读取文件 demand = data.to_numpy() zone = 16 #一个中转站有8个客户 timeInterval = 30 #时间间隔 RentCost = 0.1 # 中转站的对应单位容积的租赁费用 RentSize = 800 # 中转站的租赁容积 HoardCost = 1 # 单位货物囤积在中转站的囤积成本 TravelCost1 = np.array([1, 3]) # 从工厂运输到中转站i的单位货物运输成本 # 从工厂运输到客户的单位货物运输成本 行为客户 大小16 TravelCost2 = 2*np.array([2, 2, 2, 3, 3, 2, 4, 4, 7, 3, 4, 2, 3, 4, 7, 5]) # (中转站<->客户)车辆从点i运输到点j的车辆使用成本 大小18*9(前面9*9为中转站1对应的部分,后面9*9为中转站2),如中转站1部分(9*9):第一个对应中转站,2-9对应8个客户 DispathCost = 10*np.array([[0, 11, 15, 13, 47, 2, 1, 2, 10], [14, 0, 8, 15, 37, 3, 14, 12, 9], [17, 8, 0, 23, 36, 9, 18, 16, 16], [13, 15, 22, 0, 42, 16, 11, 12, 7], [47, 36, 37, 42, 0, 39, 47, 45, 38], [12, 2, 8, 16, 38, 0, 10, 8, 9], [2, 12, 16, 11, 47, 9, 0, 2, 9], [3, 9, 14, 12, 46, 7, 2, 0, 8], [13, 10, 17, 7, 38, 11, 12, 11, 0], [0, 26, 34, 30, 14, 8, 25, 25, 32], [26, 0, 21, 8, 40, 35, 5, 7, 30], [34, 20, 0, 18, 48, 42, 15, 14, 15], [30, 8, 18, 0, 44, 38, 5, 5, 29], [14, 41, 48, 44, 0, 13, 40, 40, 43], [8, 34, 42, 38, 13, 0, 34, 33, 40], [25, 5, 16, 5, 39, 33, 0, 1, 25], [25, 7, 15, 6, 39, 33, 2, 0, 24], [31, 30, 16, 29, 43, 40, 25, 24, 0]]) TimeoutCost = 1000 # 客户i超时订单成本 #中转站和客户之间的运输时间,代表从点i到点j的运输时间,对角线设为1,即代表留在原地的汽车下一时刻还在原地 大小18*9(前面9*9为中转站1,后面9*9为中转站2) DispathT = np.array([[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, 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, 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, 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, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1]]) TravelT1 = np.array([1, 1]) # 工厂到中转站i的运输时间 TravelT2 = np.array([1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 1, 1, 2, 2, 1]*2) #工厂运输到客户的运输时间 Q = 100 # 车的最大容量 K = np.array([6, 6]) # 中转站i的车辆总数量 Max1 = RentSize # 记录工厂运输到中转站运货量的最大值 Max2 = 100 # 记录工厂运输到客户运货量的最大值 Max3 = Q # 记录从中转站运输到客户运货量的最大值 M = 100000 #条件约束 model = gp.Model("车辆调度") x_tij = model.addVars(np.empty(DispathCost)) y_i1t = model.addVars(np.empty((2,31))) y_i2t = model.addVars(np.empty((16,31))) y_i3t = model.addVars(np.empty((16,31))) h_it = y_i1t - y_i3t d_it = model.addVars(np.empty((16,31))) model.setObjective(31*RentCost*RentSize +sum(sum(HoardCost* h_it)) + sum(TravelCost1 *y_i1t) + sum(TravelCost2*y_i2t) + sum(sum(np.multiply(DispathCost,x_tij))) + sum(sum(TimeoutCost*d_it)) )