CommencezCommencez gratuitement

Résoudre le problème de budgétisation du capital

Rappelez-vous le problème de budgétisation du capital.

Votre gestionnaire élabore la stratégie de l'entreprise et évalue les projets \(A\), \(B\), \(C\), et \(A\) est la condition préalable à \(B\). Les profits sont respectivement \(V = [250, 200, 300]\), l'investissement requis est I = [2000, 1900, 2500] et seulement 4600 $ sont disponibles. \(o\) est une variable binaire indiquant si un projet est sélectionné.

Votre gestionnaire vous a donné le problème :

\(\max\ \ o_AV_A + o_{AB}V_B + o_CV_C\) \(s.t.\ o_AI_A + o_{AB}I_B + o_CI_C\leq 4600\)

Votre tâche est de linéariser et de résoudre le problème de profit.

Nous avons déjà importé pulp et défini un model avec les paramètres V, I, names pour les noms des projets (A, B, C et AB indexés dans cet ordre), et o représentant la décision binaire en utilisant le même indexage.

Cette activité fait partie du cours

Introduction à l'optimisation en Python

Voir le cours

Instructions de l’exercice

  • Définissez la fonction objectif linéarisée en complétant l'expression pour les projets B et C, en tenant compte de la condition préalable pour B.
  • Définissez les contraintes en utilisant la variable AB mise à jour.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

# Define the objective
model += o[0]*V[0] + ____*V[1] + ____*V[2]

# Define the constraints
model += o[0]*I[0] + ____*I[1] + o[2]*I[2] <= 4600, 'budget constraint'
model += o[____] <= o[0]
model += o[____] <= o[1]
model += o[____] >= o[0] + o[1] - 1 

status = model.solve()
print(f"{'Optimal found' if status == 1 else 'Ignore solution'}")

for i, name in enumerate(names):
    print(f"{name}: {'accepted' if o[i].varValue == 1 else 'rejected'}")
print(f'Total profit = ${value(model.objective)}')
Modifier et exécuter le code