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
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)}')