2ari2022 21646
POA_2022.ipynt - Colaboratory
y Instalagdo da biblioteca Pulp
pip install pulp
Looking in indexes: https://pypi.org/simple, https: //us-python.pkg.dev/colab-wheels/t
Collecting pulp
Downloading PuLP.
1y3-non
any.whl (14.3 MB)
| | 14.3 2 1.1 MB/s
Instal.
ng collected packages: pulp
Successfully installed pulp-2.7.0
~ Leitura dos dados
from google.colab import files
import pandas as pd
import io
uploaded = files.upload()
df = pd.read_csv(io.BytesI0(uploaded| “base.csv"}))
dF
Nenhum arquivo escolhido Upload widget is only available when the cell has been
‘executed in the current browser session, Please rerun this cell to enable
Saving base.csv to base.csv
Estado Segmentacio
0 ACRE
1 ALAGOAS
2 ALAGOAS
3 ALAGOAS
4 AMAZONAS
100 SAO PAULO
101 SERGIPE
102 SERGIPE
103 TOCANTINS
104 TOCANTINS
105 rows x 4 columns
» Conjuntos auxiliares
> 00> 8
RETAIL
ooo
Intengdo de compra Rentabilidade
9.736
32,092
12,254
9.933
19.074
38,983
11.999
16.329
9.452
18,225
11,70%
11,60%
11,00%
11,00%
11,50%
14,20%
11,20%
11,00%
11,20%
10,90%
hitpsticolab.research.google.comvcrive/-bFhkz6ydosUXC25RMRzSptA2sDxNONusp=share_ink#priniMode=ttue
182ari2022 21646 POA_2022.ipynt - Colaboratory
estados = dict(zip(df.index, df["tstado"]))
intencoes = dict(zip(df.index, df["Inten¢do de conpra"]))
rentabilidades = dict(zip(df.index, df["Rentabilidade"}))
segmentacoes = dict(zip(df. index, df["Segmentacao"]))
~ Fungées auxiliares
from typing import List
from pulp import Lpvariable
def ranking(index: int) -> int:
r = dF["Segmentagao" ] [index]
ifr return 6
ifr return 5
ifr return 4
ifr return 3
ifr return 2
return 1
not_none = lanbda item: item is not None;
def estados_escolhidos(propostas: LpVariable)-> int:
return len(set(
Filter(
not_none,
[estados[i] if propostas[i] == 1 else None for i in df.i
»)
def segnentacoes_escolhidas(propostas: LpVariable) -> int
return len(set(
Filter(
not_none,
[segmentacoes[i] if propostas[i] =
1 else None for i in df. index]
»)
def intencoes_das_propostas(propostas: LpVariable):
return [intencoes[index] * 1000 * propostas[index] for index in df. index]
def objetivo(propostas: LpVariable):
return [
float(rentabilidades[ index] .replace('X', '').replace(',","."))/10@
* escolha_da_proposta[ index]
* ranking(index)
for index in List(df.index)]
» Construc&o do problema [Rankeado]
hitpsticolab.research.google.comvcrive/-bFhkz6ydosUXC25RMRzSptA2sDxNONusp=share_ink#priniMode=ttue 2152aviiy2022 2148 POA 2022:pyn® - Colaboratory
from pandas.core.computation.ops import pprint_thing
from pulp import *
from collections import Counter
problem = LpProblem("Rankeado Por Segmentacao", LpMaximize)
'Variaveis do problema’
# Variavel bindria que indica se a proposta X foi escolhida
escolha_da_proposta = LpVariable.dicts("proposta", df.index, ®, 1, LpInteger)
# Fun¢3o objetivo
problem += 1pSum(objetivo(escolha_da_proposta))
Condigdes'
# Escolher pelo menos uma proposta de todos os Estados
problem += lpSum([estados_escolhidos(escolha_da_proposta)])
# Escolher pelo menos uma proposta de todas a segmentacées
problem += 1pSum([segmentacoes_escolhidas(escolha_da_proposta)])
# Limite superior de inten¢des de compra no pode exceder 8.000.000 de doses
problem += 1pSum(intencoes_das_propostas(escolha_da_proposta)) <= 8_900_000
status = problem.solve()
/usr/local/1ib/python3.7/dist-packages/pulp/pulp.py:1352: UserWarning: Spaces are not
warnings.warn("Spaces are not permitted in the name. Converted to '_'")
> Propostas
indices_das_propostas_aceitas = []
indices_das_propostas_rejeitadas = []
for variavel in problem. variables():
indice = int(variavel.name.split('_')[1])
if variavel.varvalue == 1:
indices_das_propostas_aceitas append indice)
else:
indices_das_propostas_rejeitadas.append(indice)
» Aceitas
aceitas = df.filter(items=indices_das_propostas_aceitas, axis=@)
aceitas
hitpsticolab.research.google.comvrive/-bFhkz6ydosUXC25RMRzSptA2sDxNONusp=share_inkprintMode=ttue 352ari2022 21646 POA_2022.ipynt - Colaboratory
Estado Segmentacao Inten¢ao de compra Rentabilidade
0 ACRE B 9.735 11,70%
1 ALAGOAS. A 32,092 11,60%
10 BAHIA B 69.844 12,30%
100 ‘SAO PAULO RETAIL 38.983 14.20%
101 SERGIPE B 11,999 11,20%
93 SANTA CATARINA D 171.979 12,80%
94 SANTA CATARINA RETAIL 21.222 12,90%
95 SAO PAULO A 595.305 14,50%
96 SAO PAULO AY 747.460 15,00%
> Descartadas
descartadas = df.filter(items=indices_das_propostas_rejeitadas, axis=0)
descartadas
Estado Segmentacéo Intengdo de compra Rentabilidade
60 PARANA D 505.565 12,00%
89 SANTA CATARINA A 979.336 13,50%
98 SAO PAULO c 796.956 14,20%
99 SAO PAULO D 826.841 14,00%
hitpsticolab.research.google.comvrive/-bFhkz6ydosUXC25RMRzSptA2sDxNONusp=share_inkprintMode=ttue 452artt2022 21:48 POA_2022.ipynt - Colaboratory
Produtos pagos do Colab - Cancelar contratos
hitpstfcolab.research.google.convrive/t-bFhkz6ydosUXC2SRhRzSp A2sOxNON7usp=share_inktprntMod:
55