ComeçarComece de graça

Alocando recursos

Bom trabalho, é hora de resolver o próximo problema apresentado.

Um gerente aloca 120 tarefas para um engenheiro de software sênior (S), júnior (J) e um estagiário (I) e quer minimizar os custos.

O estagiário precisa de um treinamento que custa $500 antes de começar a trabalhar nas tarefas. O custo para resolver cada tarefa é c = [30, 40, 5], respectivamente.

\(x\) contém o número de tarefas atribuídas e \(o\) é a variável binária que indica se o estagiário recebe treinamento. O custo total é

\(TC = 30x_S+40x_J+(5x_I+500)o\)

Use o método BigM para linearizar este problema usando a nova variável \(z\):

\(z = (5x_I+500)o\)

\(-oM\leq z \leq oM\)

\(-(1-o)M \leq z- (5x_I+500)o \leq (1-o)M\)

pulp, junto com um model, parâmetros c, M e names, e as variáveis x, z, o já foram importados para você.

Este exercício faz parte do curso

Introdução à Otimização em Python

Ver curso

Instruções do exercício

  • Defina a função objetivo substituindo parte da fórmula por z.
  • Defina as restrições preenchendo o índice do estagiário.

Exercício interativo prático

Experimente este exercício completando este código de exemplo.

# Define the objective
model += c[0]*x[0] + c[1]*x[1] + ____

# Define the constraints
model += -o * M <= z
model += z <= o * M
model += -(1-o) * M <= z - (c[___]*x[____] + 500)
model += z - (c[____]*x[____] + 500) <= (1-o) * M
model += lpSum(x) >= 120

status = model.solve()
print(f"{'Optimal found' if status == 1 else 'Ignore solution'}")
for i in range(len(c)):
    print(f"{names[i]} was assigned {x[i].varValue:.0f}")
Editar e executar o código