<jupyter_start><jupyter_text>Assignment 7 - Exercise 1<NAME> - 201805995<jupyter_code>prob_statement = """A CELESC disp˜oe de trˆes unidades geradoras de energia el´etrica com capacidades mensais de 25, 40 e
30 GWh para fornecer energia para trˆes grandes munic´ıpios de Santa Catarina: S˜ao Jos´e, Florian´opolis
e Palho¸ca. A demanda m´edia mensal desses munic´ıpios ´e 30, 35 e 25 GWh, respectivamente. O pre¸co
por GWh transmitido entre as unidades geradoras e as cidades ´e dado na tabela abaixo. A empresa
estima que durante o mˆes de janeiro h´a um aumento no consumo de energia de 20% em todo o estado.
Caso necess´ario, a CELESC pode comprar da empresa vizinha, COPEL, energia el´etrica ao pre¸co de
$1000/GWh, com a ´unica condi¸c˜ao de que essa energia n˜ao ser´a consumida na Palho¸ca. A CELESC
precisa determinar qual o plano de distribui¸c˜ao e compra de energia mais barato para o mˆes de janeiro
que supra a demanda destes trˆes munic´ıpios. Considere ainda no problema que h´a perda de 10% na
transmiss˜ao de energia pela rede.
"""
def fix_statement(str_statement):
    list_replacements = [("¸c", "ç"), 
                         ("´a", "á"),
                         ("´e", "é"),
                         ("´ı", "í"),
                         ("´o", "ó"),
                         ("´u", "ú"),
                         ("˜a", "ã"),
                         ("˜o", "õ"),
                         ("ˆe", "ê"),
                         ("$", "\\\$")]
    for replacement in list_replacements:
        str_statement = str_statement.replace(replacement[0], replacement[1])
    return str_statement
prob_statement = fix_statement(prob_statement)
print(prob_statement)<jupyter_output>A CELESC dispõe de três unidades geradoras de energia elétrica com capacidades mensais de 25, 40 e
30 GWh para fornecer energia para três grandes municípios de Santa Catarina: São José, Florianópolis
e Palhoça. A demanda média mensal desses municípios é 30, 35 e 25 GWh, respectivamente. O preço
por GWh transmitido entre as unidades geradoras e as cidades é dado na tabela abaixo. A empresa
estima que durante o mês de janeiro há um aumento no consumo de energia de 20% em todo o estado.
Caso necessário, a CELESC pode comprar da empresa vizinha, COPEL, energia elétrica ao preço de
\\$1000/GWh, com a única condição de que essa energia não será consumida na Palhoça. A CELESC
precisa determinar qual o plano de distribuição e compra de energia mais barato para o mês de janeiro
que supra a demanda destes três municípios. Considere ainda no problema que há perda de 10% na
transmissão de energia pela rede.<jupyter_text>A CELESC dispõe de três unidades geradoras de energia elétrica com capacidades mensais de 25, 40 e30 GWh para fornecer energia para três grandes municípios de Santa Catarina: São José, Florianópolise Palhoça. A demanda média mensal desses municípios é 30, 35 e 25 GWh, respectivamente. O preçopor GWh transmitido entre as unidades geradoras e as cidades é dado na tabela abaixo. A empresaestima que durante o mês de janeiro há um aumento no consumo de energia de 20% em todo o estado.Caso necessário, a CELESC pode comprar da empresa vizinha, COPEL, energia elétrica ao preço de\\$1000/GWh, com a única condição de que essa energia não será consumida na Palhoça. A CELESCprecisa determinar qual o plano de distribuição e compra de energia mais barato para o mês de janeiroque supra a demanda destes três municípios. Considere ainda no problema que há perda de 10% natransmissão de energia pela rede.|Gerador| <NAME> | Florianópolis | Palhoça|| --- | --- | --- | --- ||1| \\$600| \\$700| \\$400||2| \\$320 |\\$300 |\\$350 ||3| \\$500| \\$480| \\$450|<jupyter_code>import gurobipy as gp
from gurobipy import GRB, Model
# Create a new model
m = Model("CELESC")
# Create variables
x1_SJ = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="Energy from 1 to SJ")
x1_FLN = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="Energy from 1 to FLN")
x1_P = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="Energy from 1 to P")

x2_SJ = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="Energy from 2 to SJ")
x2_FLN = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="Energy from 2 to FLN")
x2_P = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="Energy from 2 to P")

x3_SJ = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="Energy from 3 to SJ")
x3_FLN = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="Energy from 3 to FLN")
x3_P = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="Energy from 3 to P")

COPEL_SJ = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="Energy from COPEL to SJ")
COPEL_FLN = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="Energy from COPEL to FLN")

m.setObjective(x1_SJ * 600 + x1_FLN * 700 + x1_P * 400 + 
               x2_SJ * 320 + x2_FLN * 300 + x2_P * 350 +
               x3_SJ * 500 + x3_FLN * 480 + x3_P * 450 +
               COPEL_SJ * 1000 + COPEL_FLN * 1000,
               GRB.MINIMIZE)
# Add constraints
m.addConstr(x1_SJ + x1_FLN + x1_P <= 25, 'Max output 1')
m.addConstr(x2_SJ + x2_FLN + x2_P <= 40, 'Max output 2')
m.addConstr(x3_SJ + x3_FLN + x3_P <= 30, 'Max output 3')

m.addConstr(0.9 * (x1_SJ + x2_SJ + x3_SJ + COPEL_SJ) >= 30 * 1.2, 'Min input SJ')
m.addConstr(0.9 * (x1_FLN + x2_FLN + x3_FLN + COPEL_FLN) >= 35 * 1.2, 'Min input FLN')
m.addConstr(0.9 * (x1_P + x2_P + x3_P) >= 25 * 1.2, 'Min input P')

m.optimize()
for v in m.getVars():
    print(f'{v.varName}, {v.x}')

print(f'Obj: {m.objVal}')<jupyter_output>Energy from 1 to SJ, 0.0
Energy from 1 to FLN, 0.0
Energy from 1 to P, 25.0
Energy from 2 to SJ, 0.0
Energy from 2 to FLN, 40.0
Energy from 2 to P, 0.0
Energy from 3 to SJ, 14.999999999999998
Energy from 3 to FLN, 6.666666666666666
Energy from 3 to P, 8.333333333333334
Energy from COPEL to SJ, 25.0
Energy from COPEL to FLN, 0.0
Obj: 61450.0
{'fraction_non_alphanumeric': 0.10299234516353514, 'fraction_numerical': 0.05288796102992345, 'mean_word_length': 3.484399375975039, 'pattern_counts': {'":': 0, '<': 12, '<?xml version=': 0, '>': 12, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 3, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '2', 'dir': 'jupyter-structured-clean-dedup', 'id': '540699', 'license': 'MIT', 'n_tokens_mistral': 2477, 'n_tokens_neox': 2210, 'n_words': 767, 'path': 'L7E1.ipynb', 'repo_name': 'brunokiyoshi/optimization_modelling', 'size': '5765'}