вспомогательные перевозки python - PullRequest
0 голосов
/ 21 апреля 2020

У меня проблема со скриптом для транспортировки.

У меня есть мои поставщики и мои транспортные средства. Мне нужно заправить свой автомобиль продуктом моего провайдера и отправить его на мой склад.

У меня есть 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))
...