J'ai besoin de construire un objet.
L'objet est un mélange de 3 éléments.
Je dois minimiser le poids de l'objet, mais le garder résistant .
Les éléments sont notés comme à l'école, sur 20 , pour déterminer si ils sont plus ou moins lourds ou résistants.
Du style , ben, l'acier il est lourd alors je lui mets 18/20 dans la catégorie poids, mais le plastique il est léger alors il a 3/20 en catégorie poids ( La note la plus haute ne signifie pas que c'est mieux dans ce cas, mais que c'est plus lourd ).
Par contre, la céramique est assez résistante, du coup elle a 10/20 dans la catégorie résistance, mais l'acier , lui, est plus resistant , alors il a 16/20 .
Alors en fait je veux pas travailler en pourcentages mais bel et bien en notes sur 20 comme à l'école .
Demande : La résistance minimale requise de l'objet final est la note suivante: 10/20.
Et le poids, vous vous en doutez, c'est le programme avec la librairie PYTHON PULP qui minimise le poids grâce au simplexe.
Donc, en théorie, l'alliage des 3 éléments doit obtenir une note minimale moyenne de plus de 10/20 en résistance, tout en minimisant le poids ...vous me suivez ?.
Voici les caractéristiques des éléments disponibles pour construire mon objet :
...........................................poids..........resistance
acier: ............................18/20..........16/20
plastique: .....................3/20...........6/20
céramique: ...................12/20........10/20
C'est le programme Linéaire Python Pulp que j'ai construit, qu'en pensez-vous, s'il vous plaît?
- Code: Tout sélectionner
import pulp
# Je veux minimiser le poids
prob = LpProblem ("Minimize", LpMinimize)
# Liste des ingrédients et caractéristiques
produits = ["acier", "plastique", "céramique"]
resistance = {"acier": 18, "plastique": 3, "céramique": 12}
poids = {"acier": 16, "plastique": 6, "céramique": 20}
# Construire les varables de décision
x = LpVariable.dicts ("produits", x, 0)
# Fonction objectif : minimiser le poids
prob + = lpSum ([poids [i] * x [i] for i in produits]), "MinimizerPoids"
# Contrainte : la resistance totale de l'objet final doit être supérieure à 10/20 en notation
prob + = lpSum ([(resistance[i] * x [i]) / 20 pour i in produits])> = 10, "resistance"
# Contrainte de note Max (vu dans la plupart des problèmes de mélange ...)
prob + = lpSum ([1 * x [f] pour f in produits]) == 20, "noteMax"
prob.solve ()
for v in prob.variables ():
print (v.name, "=", v.varValue)
print ("Note", valeur (objectif prob. / 20))
** C'est le résultat que j'obtiens, est-ce correct mathématiquement parlant, s'il vous plaît? En gros, il dit que je devrais utiliser de l'acier 9,3 / 20 et du plastique 10,6 / 20 pour obtenir l'objet le plus léger possible mais toujours robuste ... Est-ce vrai?
- Code: Tout sélectionner
Statut: Optimal
produits__ceramic = 0,0
produits__acier = 9.3333333
produits__plastique = 10,666667
Objectif 10.66666674
Ce que je ne comprends pas, c'est que la contrainte devrait être une moyenne, comme celle-ci, mais cela ne fonctionne pas:
- Code: Tout sélectionner
prob + = (lpSum ([(resistance [i] * x [i]) pour i in produits]) / 3)> = 10, "resistance"
Ou alors cherche page d'une personne pouvant m'aider $