#---------- Prompt de Comando ----------#
#pip install mip
#pip install mip --user
#---------------------------------------#2 RESULTADOS
2.1 Instalação dos Pacotes
O pacote mip requer o Python 3.5 ou mais recente. Como o Python-MIP está incluído no Python Package Index , uma vez que você tenha uma instalação do Python, instalá-lo é tão fácil quanto digitar no prompt de comando:
2.1.1 Instalação via Python
2.1.2 Instalação via R
#library(reticulate)
#py_install("mip")2.2 Implementação do Problema da Mochila em Python
O pacote Mixed-Integer Linear Programming (MIP) é uma coleção de ferramentas Python para modelagem e solução de programas Lineares Inteiros Mistos (MIPs). A sintaxe MIP foi inspirada no pacote Pulp. Assim como o CyLP, ele também fornece acesso a recursos avançados do solver, como geração de corte, restrições preguiçosas, MIPstarts e pools de soluções. Portar modelos Pulp e Gurobi deve ser bem fácil.
2.2.1 Declarar as Constantes
#from mip import *
#RANDOM_SEED = 1
#NUM_PRODUTOS = 10
#NUM_MOCHILAS = 22.2.2 Variáveis para Armazenar os Dados
#produtos = {}
#mochilas = {}
#gerar_produtos(produtos)
#gerar_mochilas(mochilas)2.2.3 Imprimir Itens
#imprimir_produtos(produtos)
#imprimir_mochilas(mochilas)2.2.4 Maximização Númérica
#modelo = Model(sense=MAXIMIZE)2.2.5 Variáveis Decisão
#carga = {} # qual produto será colcoado em cada mochila
#for m in mochilas:
# for p in produtos:
# carga[(m, p)] = modelo.add_var(var_type=BINARY) 2.2.6 Restrição
# a) O mesmo produto não pode ser colocado nas duas mochilas
#for p in produtos:
# modelo += xsum(carga[(m, p)] for m in mochilas) <= 1
# b) Soma dos pesos dos produtos alocados em uma mochila não devem ser maior do que a carga máxima suportada pela mochila
#for m in mochilas:
# modelo += xsum(carga[(m, p)] * produtos[p]['peso'] for p in produtos) <= mochilas[m]['carga_maxima']2.2.7 Função Objetivo
#modelo.objective = maximize(
# xsum(carga[(m, p)] * produtos[p]['valor']
# for m in mochilas
# for p in produtos
# if (m, p) in carga
# )
#)
#modelo.optimize()
# Resultado
#print("\n=====")
#print("Valor Total em Todas as Mochilas {}".format(modelo.objective_values))
#print("=====")
#for m in mochilas:
# print("\nCarga da Mochila {} com capacidade de {}g".format(m, mochilas[m]['carga_maxima']))
# valor_total = 0
# carga_total = 0
# for p in produtos:
# if (carga[(m, p)].x == 1):
# valor_total += produtos[p]['valor']
# carga_total += produtos[p]['peso']
# print("{} \tR$ {},00 \t{}g".format(p, produtos[p]['valor'], produtos[p]['peso']))
# print("-\nValor Total: R$ {},00 \nCarga Total: {}g\nCapacidade Ociosa: {}g".format(valor_total, carga_total, (mochilas[m]['carga_maxima']-carga_total)))
# GERAR PRODUTOS: (Peso e Valor Aleatório)
#def gerar_produtos(prod):
# random.seed(RANDOM_SEED)
# for i in range(NUM_PRODUTOS):
# cod = 'p_{}'.format(i)
# valor = random.choice(range(1,10)) # Valor em R$
# peso = random.choice(range(100,999)) # Valor em gramas
# prod[cod] = {
# 'valor': valor,
# 'peso': peso
# }
# PRODUTOS
#def imprimir_produtos(prod):
# print("PRODUTOS")
# print("Cód \tValor \t\tPeso")
# for p in prod:
# print("{}\tR$ {},00 \t{}g".format(p, prod[p]['valor'], prod[p]['peso']))
# GERAR MOCHILAS: Pesos Aleatórios
#def gerar_mochilas(moc):
# random.seed(RANDOM_SEED)
# for i in range(NUM_MOCHILAS):
# cod = 'm_{}'.format(i)
# carga_maxima = random.choice(range(500,2000)) # Carga máxima em gramas
# moc[cod] = {
# 'carga_maxima': carga_maxima
# }
# MOCHILAS
#def imprimir_mochilas(moc):
# print("\nMOCHILAS")
# print("Cód \tCarga Máxima")
# for m in moc:
# print("{} \t{}g".format(m, moc[m]['carga_maxima']))