У меня проблема со скриптом для транспортировки.
У меня есть мои поставщики и мои транспортные средства. Мне нужно заправить свой автомобиль продуктом моего провайдера и отправить его на мой склад.
У меня есть 4 типа транспортных средств: [A, B, C, D]
, и они имеют различные мощности {A:3500, B:7000, C:12000, D:24000}
. У них разные расходы {A:550, B:680, C:730, D:790}
.
Для моих провайдеров [ 1 2 3 4 5 6]
у меня есть спрос на каждого провайдера {1:1000, 2:3000, 3:500, 4:500, 5:1000, 6:300}
У меня также есть фиксированное время (в минутах) для каждого {1:5, 2:19, 3:40, 4:23, 5:35, 6:12}
, и у меня есть поток спроса (кг / мин) для каждого поставщика {1:50, 2:30, 3:100, 4:50, 5:100, 6:30}
.
У меня есть расстояния между поставщиками в Excel. А средняя скорость моего транспортного средства составляет 60 км / ч.
Мне нужно собрать все требования моих поставщиков и отправить их на мой склад с минимально возможной стоимостью.
У меня есть 408 минут для каждого транспортного средства, чтобы выполнить эту операцию.
У меня есть 4 типа транспортных средств, но я могу использовать столько, сколько необходимо для каждого. Пример: 2A + 5 C
Может кто-нибудь помочь мне?
Я ценю это.
from pulp import *
# Informações fornecedores
fornecedores = ['A','B','C','D','E']
volume = {'A':1000, 'B':2000, 'C':20000, 'D':589, 'E':963}
kg_min = {'A':60, 'B':80, 'C':150, 'D':100, 'E':90}
tempo_coleta = dict((k, (volume[k])/kg_min[k]) for k in volume)
tempo_fixo_fornecedor = {'A':4, 'B':5, 'C':5, 'D':10, 'E':10}
tempo_total_coleta = dict((k, (tempo_fixo_fornecedor[k]) + kg_min[k]) for k in volume)
# Informações Veículos
veiculos = ['3/4', 'toco', 'truck', 'carreta']
capacidade_veiculo = {'3/4':3500, 'toco':7000, 'truck':12000, 'carreta':24000}
custo_veiculo = {'3/4':500, 'toco':680, 'truck':740, 'carreta':975}
# Definir Modelo
model = LpProblem('Menor_Custo_Coleta', LpMinimize)
# Definir Variáveis de Decisão
k = LpVariable.dicts('ship_', fornecedores, cat= 'Binary')
v = LpVariable.dicts('Veic_', veiculos, cat= 'Binary')
t = LpVariable.dicts('time_', fornecedores, cat= 'Binary')
# Definir Objetivo
model += lpSum(custo_veiculo[c] * v[c] for c in veiculos)
# Definir Restrições
for b in capacidade_veiculo:
model += lpSum(volume[i] * k[i] for i in fornecedores) <= lpSum(capacidade_veiculo[c] * v[c] for c in capacidade_veiculo)
model += k['A'] + k['B'] + k['C'] + k['D'] + k['E'] >= len(fornecedores)
model += v['3/4'] + v['toco'] + v['truck'] + v['carreta'] >= 1
model += lpSum(tempo_total_coleta)<= 408
# Resolução do Modelo
model.solve()
for i in fornecedores: print('{} status {}'.format(i,k[i].varValue))
for c in veiculos: print('{} status {}'.format(c,v[c].varValue))